caffe-windows添加自己的loss层
2017-04-01 09:39
211 查看
最近几天忙着在添加center loss层,因为是在windows系统下,所以参考了很多的博客,发现都是在linux下的,遇到很多问题,这里和大家分享自己的经历,希望对大家有个帮助,也对在windows下跑着caffe和我一样的菜鸟帮助。另外,如果只是添加center loss(cvpr2015)或者triple loss(cvpr2015)年,我建议配置happynear大神的最新版caffe(vs2015+cuda8.0+cudnnV5.0,注:vs15估计很多人会安装出错),里面已经有这两个层,因为我使用的是BLVC的官方版(vs2013+cuda7.5+cudnnv4.0),所以比较老,需要添加center
loss层。
首先给出caffe配置的一个原码 教程链接如下:
https://github.com/BVLC/caffe/tree/windows http://m.blog.csdn.net/article/details?id=50819464 http://blog.csdn.net/fuwenyan/article/details/62039341
一个是有GPU,一个无GPU两个配置教程
happynear的代码链接:
https://github.com/happynear/caffe-windows
教程大家可以找
进入正题:
第一步,编写新层的.hpp,.cpp,.cu.主要是头文件,层的定义,层的实现(正向传播,反向传播等),GPU实现的实现,将已经写好的。CPP,CU文件放到~/caffe-master(这里的名称可能不一样)/src/caffe/layers内,就是工程里的src/caffe/layers。.hpp放到include/caffe/layers内,在写。cpp文件最后需加入注册函数INSTANTIATE_CLASS(CenterLossLayer);
REGISTER_LAYER_CLASS(CenterLoss);,详情请大家搜索相关微博。
第二步,修改src/caffe/proto/caffe.proto文件,加入新层的ID,与message(注:所有的ID必须是唯一的)
打开文件找到message LayerParameter 定义在文件里添加ID(注:请仔细看你的版本LayerParameter那行的的注释,下个ID是多少,我这里是151)
![](https://img-blog.csdn.net/20170401100838034?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
加入参数message函数
![](https://img-blog.csdn.net/20170401142817070?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
找到message V1LayerParameter里enum LayerType处加入ID
![](https://img-blog.csdn.net/20170401143019524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在message V1LayerParameter最后加入ID
![](https://img-blog.csdn.net/20170401143204148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果你的层参数用到没有定义的参数变量还要在message V0LayerParameter加入定义
如你的message函数是这样的定义一个自己的float
diff_scale
message
DiffCutoffParameter { optional float
diff_scale = 1
[default
= 1];//默认梯度不缩放}
那么就要在message
V0LayerParameter加入定义
在message V0LayerParameter {}添加参数定义 optionalfloat
diff_scale = 47
[default
= 1];
另外还有一个要修改的在~\caffe-master\src\caffe\util\内upgrade_proto.cpp里const char* UpgradeV1LayerType(const
V1LayerParameter_LayerType type) {
switch (type) {}里添加相关代码case...return(这步是可选的,我之前没有这步,大多数博客也没有,加了也没有好,主要是libcaffe没改,所以这步是不是必须的,我也没有测试,我改好了,又改了libcaffe也是可以的,
所以大家可以不改这一步,试试看,可以不,方便的话,留言告诉我)
![](https://img-blog.csdn.net/20170401143719281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里CENTER_LOSS与V1LayerParameter内名称一样的
![](https://img-blog.csdn.net/20170401143019524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里最后一步,对于Windows下来说,是最重要的,找到caffe-master\windows\libcaffe\下的libcaffe.vcxproj,libcaffe.vcxproj.filters
修改,也就是加入.hpp,.cpp,.cu文件的路径
第一步,在libcaffe.vcxproj加入
![](https://img-blog.csdn.net/20170401144117662?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170401144200460?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170401144211023?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第二步:在libcaffe.vcxproj.filters加入
![](https://img-blog.csdn.net/20170401144211023?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170401144514125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170401144544938?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最后重新编译caffe就可以了
测试minst,层配置
![](https://img-blog.csdn.net/20170401144706670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行截图
![](https://img-blog.csdn.net/20170401145636006?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM0Njg4MDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
感谢一下几位博主的分享
参考链接
http://blog.csdn.net/shuzfan/article/details/51322976 http://blog.csdn.net/u014696921/article/details/52278655?locationNum=6 http://blog.csdn.net/u013488563/article/details/50325631
loss层。
首先给出caffe配置的一个原码 教程链接如下:
https://github.com/BVLC/caffe/tree/windows http://m.blog.csdn.net/article/details?id=50819464 http://blog.csdn.net/fuwenyan/article/details/62039341
一个是有GPU,一个无GPU两个配置教程
happynear的代码链接:
https://github.com/happynear/caffe-windows
教程大家可以找
进入正题:
第一步,编写新层的.hpp,.cpp,.cu.主要是头文件,层的定义,层的实现(正向传播,反向传播等),GPU实现的实现,将已经写好的。CPP,CU文件放到~/caffe-master(这里的名称可能不一样)/src/caffe/layers内,就是工程里的src/caffe/layers。.hpp放到include/caffe/layers内,在写。cpp文件最后需加入注册函数INSTANTIATE_CLASS(CenterLossLayer);
REGISTER_LAYER_CLASS(CenterLoss);,详情请大家搜索相关微博。
第二步,修改src/caffe/proto/caffe.proto文件,加入新层的ID,与message(注:所有的ID必须是唯一的)
打开文件找到message LayerParameter 定义在文件里添加ID(注:请仔细看你的版本LayerParameter那行的的注释,下个ID是多少,我这里是151)
加入参数message函数
找到message V1LayerParameter里enum LayerType处加入ID
在message V1LayerParameter最后加入ID
如果你的层参数用到没有定义的参数变量还要在message V0LayerParameter加入定义
如你的message函数是这样的定义一个自己的float
diff_scale
message
DiffCutoffParameter { optional float
diff_scale = 1
[default
= 1];//默认梯度不缩放}
那么就要在message
V0LayerParameter加入定义
在message V0LayerParameter {}添加参数定义 optionalfloat
diff_scale = 47
[default
= 1];
另外还有一个要修改的在~\caffe-master\src\caffe\util\内upgrade_proto.cpp里const char* UpgradeV1LayerType(const
V1LayerParameter_LayerType type) {
switch (type) {}里添加相关代码case...return(这步是可选的,我之前没有这步,大多数博客也没有,加了也没有好,主要是libcaffe没改,所以这步是不是必须的,我也没有测试,我改好了,又改了libcaffe也是可以的,
所以大家可以不改这一步,试试看,可以不,方便的话,留言告诉我)
这里CENTER_LOSS与V1LayerParameter内名称一样的
这里最后一步,对于Windows下来说,是最重要的,找到caffe-master\windows\libcaffe\下的libcaffe.vcxproj,libcaffe.vcxproj.filters
修改,也就是加入.hpp,.cpp,.cu文件的路径
第一步,在libcaffe.vcxproj加入
第二步:在libcaffe.vcxproj.filters加入
最后重新编译caffe就可以了
测试minst,层配置
运行截图
感谢一下几位博主的分享
参考链接
http://blog.csdn.net/shuzfan/article/details/51322976 http://blog.csdn.net/u014696921/article/details/52278655?locationNum=6 http://blog.csdn.net/u013488563/article/details/50325631
相关文章推荐
- caffe-windows添加自己的工程
- 【caffe-Windows】添加工程-以classification为例(2017-04-11)
- caffe框架在添加自己的MFC程序(上)(2016-08-04 )
- windows-caffe入门之用CPU训练自己的数据
- windows-caffe入门之用CPU训练自己的数据
- 【Caffe实践】 添加自己的网络层
- 给自己的Blog程序添加对Windows Live Writer的支持
- Caffe_Windows学习笔记(二)用自己的数据训练和测试CaffeNet
- caffe添加新层windows
- 在caffe-windows下跑自己的数据集leveldb格式 或者lmdb
- 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
- caffe框架下添加自己的MFC程序(下)(2016-08-04 )
- 4000 windows-caffe 训练和测试自己的数据集
- Windows Caffe常见问题解决 以及如何更换为自己的Opencv
- 给自己的 Blog程序添加对Windows Live Writer的支持
- windows-caffe入门之用CPU训练自己的数据
- windows-caffe入门之用CPU训练自己的数据
- caffe框架在添加自己的MFC程序(上)
- Windows+caffe对自己的样本进行特征提取
- Windows右键菜单中添加自己的命令