I have recently implemented the DeepFool algorithm [1] on top of Caffe and I would like to make a PR (if you want to include such functionality within Caffe). It is a tool that uses the undrlying functionality from Caffe and it is written in C++ with a MATLAB interface aswell. I am also planning to support a Python interface in the near future but it is not ready yet. I will also include usage documentation, etc and I will try to provide support for that part of the code as much as I can.
I have tried different implementations and the history log is quite messy so far and so I do not know what to do from that point on. I tried one approach, did about 3-4 commits and then I changed my implementation on top of that as I was working onto multiple files. The PR will contain the following files:
/include/caffe/util/classifier.hpp
/include/caffe/util/deepfool.hpp
/src/caffe/util/classifier.cpp
/src/caffe/util/deepfool.cpp
/matlab/+caffe/private/caffe_.cpp
/matlab/+caffe/get_deepfool.m
/matlab/+caffe/DeepFool.m
/tools/compute_adversarial.cpp
by default I put all my files in /caffe/util; I can change them to /caffe or create a new directory /caffe/tools or something similar.
Should I make a new branch with 1 commit per file (after testing everything)? Or should I try to remove the unecessary commits from my log? The problem is that the development was not linear (i.e. I found many bugs on deepfool.cpp after implementing DeepFool.m, etc). The first way (1 commit per file) gives a more linear progression even though the reality was different. Should I make multiple PRs maybe to make the review easier?
I have tested the code extensively based on a MATLAB implementation. Should I do something more than that?
Generally reference implementations and paper reproductions are best kept in their own repo either by forking Caffe or including Caffe as a submodule. Thank you for thinking of contributing to Caffe.
I have recently implemented the DeepFool algorithm [1] on top of Caffe and I would like to make a PR (if you want to include such functionality within Caffe). It is a tool that uses the undrlying functionality from Caffe and it is written in C++ with a MATLAB interface aswell. I am also planning to support a Python interface in the near future but it is not ready yet. I will also include usage documentation, etc and I will try to provide support for that part of the code as much as I can.
I have tried different implementations and the history log is quite messy so far and so I do not know what to do from that point on. I tried one approach, did about 3-4 commits and then I changed my implementation on top of that as I was working onto multiple files. The PR will contain the following files:
/include/caffe/util/classifier.hpp
/include/caffe/util/deepfool.hpp
/src/caffe/util/classifier.cpp
/src/caffe/util/deepfool.cpp
/matlab/+caffe/private/caffe_.cpp
/matlab/+caffe/get_deepfool.m
/matlab/+caffe/DeepFool.m
/tools/compute_adversarial.cpp
by default I put all my files in
/caffe/util
; I can change them to/caffe
or create a new directory/caffe/tools
or something similar.Should I make a new branch with 1 commit per file (after testing everything)? Or should I try to remove the unecessary commits from my log? The problem is that the development was not linear (i.e. I found many bugs on
deepfool.cpp
after implementingDeepFool.m
, etc). The first way (1 commit per file) gives a more linear progression even though the reality was different. Should I make multiple PRs maybe to make the review easier?I have tested the code extensively based on a MATLAB implementation. Should I do something more than that?
[1] DeepFool: a simple and accurate method to fool deep neural networks