Caffe 不同版本之间layer移植方法
本系列文章由 @yhl_leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/52185521
(前两天这篇博客不小心被自己更改删除了,现在重新补上。)
Caffe版本一直在不停更新,新版本往往会包含一些新的layer,如果只想将该layer移植到自己工程的版本中,该怎么做呢?看到网上有关于添加新layer的教程:
- Add a class declaration for your layer to the appropriate one of
common_layers.hpp,data_layers.hpp,loss_layers.hpp,neuron_layers.hpp, orvision_layers.hpp. Include an inline implementation oftypeand the*Blobs()methods to specify blob number requirements. Omit the*_gpudeclarations if you’ll only be implementing CPU code. - Implement your layer in
layers/your_layer.cpp.SetUpfor initialization: reading parameters, allocating buffers, etc.Forward_cpufor the function your layer computesBackward_cpufor its gradient
- (Optional) Implement the GPU versions
Forward_gpuandBackward_gpuinlayers/your_layer.cu. - Add your layer to
proto/caffe.proto, updating the next available ID. Also declare parameters, if needed, in this file. - Make your layer createable by adding it to
layer_factory.cpp. - Write tests in
test/test_your_layer.cpp. Usetest/test_gradient_check_util.hppto check that your Forward and Backward implementations are in numerical agreement.
但是,这种方法并不一定对移植有用,以CropLayer为例,按照上述的方法肯定是行不通的,编译的过程中会反复出现关于函数DiagonalAffineMap的错误。查看版本更新记录:Crop layer for automatically aligning computations,可以发现,原来不只是添加两个文件那么简单的事情,按照版本更新的差异,逐个文件进行更改就可以使用。
因此,对于移植来说,直接搜索版本更新记录,是更加直接和高效的办法。
Caffe 不同版本之间layer移植方法的更多相关文章
- 不同JDK版本之间的intern()方法的区别-JDK6 VS JDK6+
String s = new Stirng(“a”); s.intern(); JDK6:当调用intern()方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,将此 ...
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- [MFC] VS2013版本MFC工程移植到VC6.0上
:VS虽号称“宇宙最强IDE”,但是有时候安装包太大,动不动就几个G:而且安装好之后也会多出很多几乎很难用到的部分,这对于那些处女座的人如何忍受!本文不是吐槽,而是给出一种在应急场景下,不用安装新版本 ...
- CLR/.NET/C#/Visual Studio/ASP.NET各版本之间的关系(转)
由于这篇文章记录的是2015年7月,那时.net core还是叫做.net core 5 名词定义 下列这些名词,写.NET 的人一定都不陌生,但你是否有真正理解呢?如果看了我的摘要文字说明还无法理解 ...
- 【转】(笔记)CANopen协议【CANFestival】移植方法
一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...
- 查看linux版本的三种常用方法
1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如: [root@3.5.5Biz-46 ~]# lsb_release -a LSB Version: 1.3 Dis ...
- NDK Android* 应用移植方法
概述 本指南用于帮助开发者将现有的基于 ARM* 的 NDK 应用移植到 x86.假设您已经拥有一个正常执行的应用,须要知道怎样可以高速让 x86 设备在 Android* Market 中找到您的应 ...
- .net Framework各个版本之间的发展
原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还 ...
- (笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32
转自http://bbs.21ic.com/icview-878522-1-1.html 前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC.QT.STM ...
随机推荐
- Less的学习和使用
官网 http://less.bootcss.com/usage/ 在线编译器 http://tool.oschina.net/less
- TruncateTable数据库清理
原文引用 https://www.cnblogs.com/liangxiaoking/p/5958456.html 本地链接下载 https://files.cnblogs.com/files/she ...
- 在switch中的case语句中声明变量会被提前
原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...
- Android实现按钮点击效果(第一次点击变色,第二次恢复)
1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" ...
- POJ 2152 Fire (树形DP,经典)
题意:给定一棵n个节点的树,要在某些点上建设消防站,使得所有点都能够通过某个消防站解决消防问题,但是每个点的建站费用不同,能够保证该点安全的消防站的距离上限也不同.给定每个点的建站费用以及最远的消防站 ...
- Codeforces Gym 100650B Countdown (离线)
题目链接:http://codeforces.com/gym/100650 根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目. dfs一个结点前保存询问深 ...
- 字符串赋值方式理解 sizeof 和strlen的一些区别
#include<stdio.h>#include<string.h> int main(){ int a,i=0; char ch[10000]; while(scanf( ...
- HTML5资源汇总(更新游戏引擎cocos2d-html5)
我也是现学现用,想了解的可以看看效果,想知道实现的也有源码 http://cocos2d-html5.org Cocos2d-HTML5 API和Cocos2d-x一致,同样的代码可以支持cocos2 ...
- bfs染色法判定二分图
#include<iostream> #include<queue> #include<cstring> #include<cstdio> using ...
- ssh的server安装和安装指定版本的软件的方法
ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...