您的位置:首页 > Web前端

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

2017-05-03 11:38 274 查看
参考资料和说明

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: