Fully Convolutional Networks for Semantic Segmentation 论文中公布的代码作为示例,解释python层该怎么写。
https://github.com/shelhamer/fcn.berkeleyvision.org
First
you have to build Caffe with WITH_PYTHON_LAYER option 1. Run make clean to delete all the compiled binaries. Then > WITH_PYTHON_LAYER=1 make && make pycaffecaffe的大多数层是由c++写成的,借助于c++的高效性,网络可以快速训练。
但是我们有时候需要自己写点输入层以应对各种不同的数据输入,比如你因为是需要在图像中取块而不想写成LMDB,这时候可以考虑使用python直接写一个层。而且输入层不需要GPU加速,所需写起来也比较容易。
每个类都是层,类的名字就是layer参数的名字。这两个都是数据输入层,由于需要一个data,一个label,所以有两个top,没有bottom。
类直接继承的是caffe.Layer,然后必须重写setup(),reshape(),forward(),backward()函数,其他的函数可以自己定义,没有限制。
setup()是类启动时该做的事情,比如层所需数据的初始化。
reshape()就是取数据然后把它规范化为四维的矩阵。每次取数据都会调用此函数。
forward()就是网络的前向运行,这里就是把取到的数据往前传递,因为没有其他运算。
backward()就是网络的反馈,data层是没有反馈的,所以这里就直接pass。
python_param中的这三个参数需要注意:
module:模块名,我们先前编写的data层,本身就是一个文件,也就是一个模块&#x