关闭

如何在新版本caffe里添加新的一层

2003人阅读 评论(1) 收藏 举报
分类:
1、属于哪个类型的layer,就打开哪个hpp文件,这里就打开vision_layers.hpp,然后自己添加该layer的定义,或者直接复制Convolution_Layer的相关代码来修改类名和构造函数名都改为Aaa_Layer,如果不用GPU,将*_gpu的声明都去掉。
2、实现自己的layer,编写Aaa_Layer.cpp,加入到src/caffe/layers,主要实现Setup、Forward_cpu、Backward_cpu。

3、如果需要GPU实现,那么在Aaa_Layer.cu中实现Forward_gpu和Backward_gpu。

4、修改src/caffe/proto/caffe.proto,好到LayerType,添加Aaa,并更新ID,如果Layer有参数,添加AaaParameter类。

5、在src/caffe/layer_factory.cpp中添加响应代码。

6、在src/caffe/test中写一个test_Aaa_layer.cpp,用include/caffe/test/test_gradient_check_util.hpp来检查前向后向传播是否正确。

我使用的是目前(2017.2.28)最新开源的Caffe。新版的Caffe较之老版本,个人感觉自己定制的空间大了很多(也有可能是以前对老版本代码理解不够),也更加开放。这里简单介绍增加Layer的步骤:

1.在caffe.proto增加对应的LayerParameter message。

2.在./include/caffe/layers/路径下增加对应layer的声明。

3.在./src/caffe/layers/路径下增加对应layer的CPU,GPU实现文件。

4.在./src/caffe/test/路径下增加对应layer的test文件。

最后在Caffe文件夹下make整个项目。没有报错就恭喜啦!

前段时间CVPR有一篇关于Triplet的论文,Fine-grained Categorization and Dataset Bootstrapping using Deep Metric Learning with Humans in the.后来想要使用类似的方法来约束自己的网络,不过没有以三元组的形式,而是从相似对的思路出发,重新定义了Loss函数来训练自己的网络。结合了很多资料,自己在Caffe框架中完成了Norm层,PairLoss层,以及对应的Data层。下面以PairLoss层为例,介绍如何在Caffe框架下增加自己的Layer。

1.在caffe.proto下,首先在message LayerParameter 中追加

optional PairLossParameter pairloss_param = 148; //limbo

这里的148是目前LayerParameter的参数个数,后面的注释是为了方便下次增加Layer时查询最大参数个数,比如下次增加新的Layer,这时候就应该=149,以此类推。

另外还需要增加如下:

这样可以在之后的prototxt网路说明文件中加入参数。如下图

2.在./include/caffe/layers/路径下增加PairLoss.hpp(代码写得丑,这里就留个框架了,要代码的请私信我)

3.在./src/caffe/layers/路径下增加PairLoss.cpp以及PairLoss.cu (.cu文件指的是GPU版本是实现)。相信读过Caffe源码的朋友们都知道,必须实现对应的Forward_gpu,Backward_gpu,Forward_cpu,Backward_cpu,LayerSetUp。这里面Forward,Backward分别指的是前向传播以及反向传播,而cpu和gpu指的代码版本。LayerSetUp多数实在做初始化。而按如下方式可以在对应的函数中,实现调用prototxt文件layer层的参数。在这里特指上文的dis参数。

这里的Dtype类型就不做过多解释了。

4../src/caffe/test/增加对应的test文件以便测试。和上文类似,这里就不过多说明了。

这半年的实验做下来,对自己的编程能力无疑是一种锻炼。随之TensorFlow1.0的发布,使用Caffe开发的小伙伴越来越少。不过我依旧觉得新手从Caffe框架入门,既可以跑实验,又锻炼了编程能力,何乐不为呢。十分感谢我的导师提供这个平台,也感谢贾扬清大佬的Caffe框架!

上文表述不清的欢迎私聊,拒绝一切无脑伸手党!

2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

caffe添加新层教程

时间节点2016.04,即caffe重大更新后(每一种层都对应一个同名cpp和hpp文件)。描述一下本次要实现层的功能:正向直接copy传播,反向时将梯度放缩指定倍。这个层对一些特定的网络结构有很重要...
  • shuzfan
  • shuzfan
  • 2016-05-05 15:00
  • 21696

如何在caffe中添加新的Layer

本文分为两部分,先写一个入门的教程,然后再给出自己添加maxout与NIN的layer的方法
  • kuaitoukid
  • kuaitoukid
  • 2014-12-11 15:37
  • 42068

在caffe中添加新的层

caffe
  • a1154761720
  • a1154761720
  • 2016-09-18 17:04
  • 1845

caffe增加新的层

首先,对original的caffe配置成功,在此基础上进行添加新层 (一)具体步骤如下: 1. 修改{caffe_dir}/src/caffe/proto/caffe.proto 文件,在 ...
  • huima2017
  • huima2017
  • 2017-03-24 11:37
  • 667

在caffe中添加自定义层

Caffe中添加自定义层[6,7] 1)头文件 路径:py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers 2)CPP或者CU文...
  • king_lu
  • king_lu
  • 2016-12-22 11:34
  • 1670

caffe中添加新层(差分层)

caffe中添加新层(差分层)
  • wfei101
  • wfei101
  • 2017-08-05 21:23
  • 258

如何在caffe中添加新的layer

原文地址:http://blog.csdn.net/kuaitoukid/article/details/41865803 本文分为两部分,先写一个入门的教程,然后再给出自己添加maxout与...
  • zr459927180
  • zr459927180
  • 2016-01-24 21:24
  • 1457

Caffe源码中添加新层 详细教程

Caffe源码中添加新层 详细教程
  • wangpengfei163
  • wangpengfei163
  • 2017-01-04 11:35
  • 387

在新版本caffe里添加新的一层(向新格式中加)

我前几天层写过一篇关于向新版本的caffe中添加新层的博客,那篇我已经标注了是在caffe的pb文件中使用v1LayerParameter的旧格式基础上进行的修改,我通过那篇博文的方法将新版本caff...
  • wonengguwozai
  • wonengguwozai
  • 2017-01-18 17:16
  • 468

caffe添加新层windows

参考博客: http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/kkk584520/article/details/527...
  • junxiacaocao
  • junxiacaocao
  • 2017-02-04 17:12
  • 494
    个人资料
    • 访问:562283次
    • 积分:7078
    • 等级:
    • 排名:第3755名
    • 原创:85篇
    • 转载:303篇
    • 译文:10篇
    • 评论:205条
    简介
    研二在读,关注:深度学习,计算机视觉,机器学习,图像处理。博文主要是自己的一些总结。转载文章供资料学习(转载一些最新文章),如有侵权望告知。注:有些评论没有回复,最近比较忙不好意思。
    最新评论