DRML(2016-CVPR)重现过程记录---(1)caffe+DRML源码编译

来源:互联网 发布:写日志软件 编辑:程序博客网 时间:2024/06/12 23:16

参考资料和说明

1,DRML论文:http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Zhao_Deep_Region_and_CVPR_2016_paper.pdf

Zhao K, Chu W S, Zhang H. Deep Region and Multi-label Learning for Facial Action Unit Detection[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2016:3391-3399.

作者定义了自己的新的层结构做区域学习多标签检测,来提升AU检测的效果。文章对12类AU的检测进行了训练和测试,分别是AU1,AU12,AU15,AU17,AU2,AU20,AU25,AU26,AU4,AU5,AU6,AU9


2,作者提供了部分源码:https://github.com/zkl20061823/DRML

该源码包含作者新定义的网络层结构和prototxt


重现文章的思路:在现有caffe基础上添加作者自定义的层


本文讲解caffe+DRML源码编译,后续处理我会在后面的博文中讲到。


注意:作者的DRML源码是在caffe-master_20150520_1版本(有点像caffe rc2版本,但是不是完全的caffe rc2, 所以我邮件找作者问了,作者提供了他们当时用的Caffe版本)基础上做的,但是新版本中很多函数和变量已经变了,我现在用新的caffe版本+DRML源码编译,所以需要知道DRML在原来caffe版本上有什么改变,以及如何在caffe中添加新的层定义。


感谢作者提供了他们当时用的caffe源码!


作者使用的caffe版本与DRML源码对比(beyondcompare结果)

(注:caffe.proto是我自己修改的,作者没有提供。作者提供了common_layers.hpp,data_layers.hpp,loss_layers.hpp以及box_layer.cpp,box_layer.cu,image_data_layer_multilabel.cpp,multi_sigmoid_cross_entropy_loss_layer.cpp,

multi_sigmoid_cross_entropy_loss_layer.cu,splice.cpp,cplice.cu)


作者在common_layers.hpp中增加了BoxLayer和SpliceLayer的声明,这些在后来的caffe版本中专门提出来作为.hpp单独存在,不再直接在common_layers.hpp中添加。



作者在data_layers.hpp中增加了MultilabelImageDataLayer的定义和两个变量



作者在loss_layers.hpp中增加了MultiSigmoidCrossEntropyLossLayer层定义



我在caffe.proto中的修改(新增加层必须要在caffe.proto中有相应的增加,否则编译会出错说找不到这个层)






以上部分主要目的是指出作者在原本的caffe上做出的修改,下面讲我在新的caffe上合入作者的代码

我用的caffe版本:2017-4-21在https://github.com/BVLC/caffe/上下载的

liunx版本:Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-47-generic x86_64)

带GPU

1,先把caffe本身编译通过

2,修改代码

修改caffe.proto文件

.hpp中的新增加的每一层代码单独提出来作为该层的hpp文件

.cpp和.cu文件添加到src/layers/目录下









其中的每一层的hpp文件是从作者在common_layers.hpp,data_layers.hpp,loss_layers.hpp添加的每一层。

比如:multilabel层

作者添加为:


修改为multilabel_imagedata_layer.hpp

上述这些工作做好之后,就可以重新编译caffe了

进入到caffe根目录下

make clean

make all -j8


编译时可能遇到的问题:

fatal error: caffe/proto/caffe.pb.h: No such file or directory
解决办法
首先需要进入 caffe 根目录
protoc src/caffe/proto/caffe.proto --cpp_out=.
sudo mkdir include/caffe/proto
sudo mv src/caffe/proto/caffe.pb.h include/caffe/proto

不想重新挨着修改代码的同学可以直接看我的另一篇博文,我上传了最终的代码:http://blog.csdn.net/u011668104/article/details/77412332


0 0
原创粉丝点击