下面以MNIST为例,通过caffe来训练、测试、单张图片的分类
https://blog.csdn.net/jieleiping/article/details/53134174
可执行文件的目录:caffe-master\Build\x64\Release 可执行文件对应的cpp所在目录:caffe-master\tools一、样本格式
https://blog.csdn.net/hjimce/article/details/49248231
caffe支持的训练数据格式 lmdb、h5py、levelIDB
- lmdb数据格式常用于单标签数据,分类问题
- h5py数据格式常用于多标签数据,回归问题
二、.sh和.bat
.sh和.bat都是批处理文件,一个是Linux下的一个是Windows下的
注意:路径问题
三、训练
(1)数据集格式的转换
新建 convert_mnist.bat,调用 convert_mnist.exe 将MNIST数据集转换为lmdb格式
(2)计算图片数据的均值
新建 compute_img_mean.bat,调用 compute_image_mean.exe 生成均值文件 mean.binaryproto
图片减去均值再训练,会提高训练速度和精度,其实不是很明白这个均值的作用,师兄觉得是归一化
将其加再 mean_file 位置
https://www.cnblogs.com/denny402/p/5083300.html
(3)训练数据集
新建 train_mnist.bat,调用 caffe.exe train 训练,使用的是 net_solver.prototxt
关于 caffe.exe
可以输入的4个参数
train train or finetune a model
test score a model
device_query show GPU diagnostic information
time benchmark model execution time
四、测试
test_mnist.bat,调用 caffe.exe test 训练数据集,使用的是模型文件 net.prototxt 和权重文件 net_iter.caffemodel
PS:刚开始不明白这几个文件的作用,报了下面这个错,就是因为把 net.prototxt 和 net_solver.prototxt 的使用混淆了
message type caffe.netparameter has no field named net
解决方法:https://github.com/alexgkendall/caffe-segnet/issues/16
注意:
- net.prototxt 对应网络的结构
- net_solver.prototxt 如何训练网络
注意prototxt文件中的路径与.bat文件放置的位置有关
五、对单张图片做分类
(1)标签文件
新建标签文件 synset_words.txt,与分类结果相对应
(2)分类
需要用到5个文件
net.prototxt
net_iter.caffemodel
mean.binaryproto
synset_words.txt
picture.bmp
<1>使用可执行文件1>
新建 classify_img.bat,调用 classification.exe 对自己的图片做分类
<2>调用C++接口2>
调用 caffe-master\examples\classification 接口,可能会出现下面的错误
1)
error C2220: 警告被视为错误 - 没有生成“object”文件
将“警告视为错误”的选项改为“否”
https://blog.csdn.net/bagboy_taobao_com/article/details/5613625
2)
F0519 14:54:12.494139 14504 layer_factory.hpp:77] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Input (known types: Input )
网上的解决方法是,将需要用到的layer添加到头文件中
但是我觉得很奇怪,官方的解决方案里其它项目是通过引用的方式,与libcaffe链接,而我现在通过静态链接的方式链接,就会报错???
https://www.cnblogs.com/love6tao/p/5847480.html
如果静态库里的某些方法没有任何地方调用,最终这些没有被调用到的方法或变量将会被丢弃掉,不会被链接到目标程序中,这样做大大减小生成二进制文件的体积
在微软的编译器中有的对于那些没有用到的变量和函数是不生效的,caffe中的这些层模板,其实都已经注册了,只不过,没有引用没办法生效
强制链接静态库的所有符号
http://www.cnblogs.com/coderzh/p/LinkAllSymbols.html
https://blog.csdn.net/LG1259156776/article/details/52542386