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
编译时可能遇到的问题:
不想重新挨着修改代码的同学可以直接看我的另一篇博文,我上传了最终的代码:http://blog.csdn.net/u011668104/article/details/77412332
- DRML(2016-CVPR)重现过程记录---(1)caffe+DRML源码编译
- DRML(2016-CVPR)重现过程记录---(2)数据预处理
- DRML(2016-CVPR)重现过程记录---(3)训练模型
- DRML(2016-CVPR)重现过程记录---(4)问题与反思
- DRML(2016-CVPR)重现过程记录---(5)问题定位_1
- DRML(2016-CVPR)重现过程记录---(6)新的尝试与思考-tensorflow?
- DRML(2016-CVPR)重现过程记录---(7)问题定位_2
- DRML(2016-CVPR)重现过程记录---(8)问题定位_3
- DRML(2016-CVPR)重现过程记录---(9)问题解决与最终结果
- DRML(2016-CVPR)重现过程记录---(10)代码上传
- OpenSift源码编译过程记录
- 源码编译mysql5.5过程记录
- vlc-android源码编译过程记录
- vlc-android源码编译过程记录
- vlc-android源码编译过程记录
- android源码下载与编译过程记录
- nifi源码汉化重新编译过程记录
- IDEA下openfire源码编译过程记录
- 数据驱动在链家网搜索优化与推荐策略中的实践
- 优化Mysql数据库的8个方法
- 我为什么要写博客?
- OC中对象方法的使用详解
- win10 下天天模拟器 需要重启 安装驱动问题
- DRML(2016-CVPR)重现过程记录---(1)caffe+DRML源码编译
- 操作符重载注意点 C++
- java 访问修饰符
- iOS 防止数组越界 对象类型不一致的安全处理 使用category对nsmutablearray处理
- 乘法逆元小结
- jQuery动画的hover连续触发动画bug处理
- 剑指offer 42. 翻转单词顺序VS左旋转字符串
- 面向对象实验三 分析类图
- Python的ASCII, GB2312, Unicode , UTF-8 相互转换