目录
深度学习框架之caffe(一) —编译安装
深度学习框架之caffe(二) —模型训练和使用
深度学习框架之caffe(三) —通过NetSpec自定义网络
深度学习框架之caffe(四) —可视化与参数提取
深度学习框架之caffe(五) —模型转换至其他框架
python接口模块
安装caffe时,执行make pycaffe -j8
时编译python接口模块,生成_caffe.so
, $CAFFE_ROOT/python 目录下包含了caffe的python接口模块,以及简要的demo脚本, 如图所示
net_spec.py
改文件使得用户可以通过编写python脚本的方式来定义网络结构,并生成文件.prototxt。
使用NetSpec()定义网络结构
import sys
sys.path.insert(0, "/home/ubuntu/caffe/python") # 替换成自己的路径
from caffe import layers as L, params as P
import caffe
def net_body():
"""
自定义网络结构
:return: net, 定义好的网络结构,类似dict
"""
## 实例化,非常重要,必须
net = caffe.NetSpec() # net 类似dict
# 2种为n添加层的方式,n[layer_name] = , 或者 n.layer_name=
# 具体每一层的参数可参见caffe.proto文件中的定义
# 添加输入层 方式1
net["data"] = L.Input(shape=[dict(dim=[1, 3, 256, 256])], ntop=1)
# 添加输入层 方式2, 其他层相同,下面只提供方式1 添加层的代码
net.data = L.Input(shape=[dict(dim=[1, 3, 256, 256])], ntop=1)
# 添加卷积池化relu层
net["conv"] = L.Convolution(net["data"], # bottom, 即改层的输入
num_output=64,
pad=1,
kernel_size=3)
net["pool"] = L.Pooling(net["conv"], pool=P.Pooling.MAX,
kernel_size=3, stride=2, pad=0)
net["relu"] = L.ReLU(net["pool"], in_place=True)
return net
def make_net(prototxt_file):
"""
将生成的网络写入文件prototxt_file中
:param prototxt: .prototxt 格式的文件
:return:
"""
net = net_body()
with open(prototxt_file, 'w') as f:
f.write(str(net.to_proto()))
model_libs.py
改文件提供了通过NetSpec()的方式定义实现的几个经典网络结构:VGG, ZF, Inceptionv2, Inceptionv3, ResNet101, ResNet152等。同时定义了一些方法,可用于多次使用的单元,如resnet中的conv-batchnorm块
参考链接
https://blog.csdn.net/happyflyy/article/details/78669143
https://github.com/D-X-Y/caffe-reid/blob/master/models/market1501/generate_caffenet.py
https://www.cnblogs.com/Charles-Wan/p/6442294.html
https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/pascalcontext-fcn32s/net.py