用 C++ 接口和训练好的 caffemodel 对图像分类

需要以下文件

  • 训练好的 model 文件。文件已存在,假设所在路径为 ~/caffe/model/iter120.caffemodel
  • 训练 model 时用到的均值文件。文件已存在,假设所在路径为 ~/caffe/examples/myfile/mean.binaryproto
  • 新编写一份清单文件 words.txt
  • 一个由 train_val.prototxt 修改而来的 deploy.prototxt 模型文件
  • 待分类图像,假设路径为 ~/caffe/image/unknow.jpg

编写清单文件

在 ~/caffe/examples/myflie 下新建 words.txt。文档第一行为训练模型标号 0 号的分类名,第二行为模型标号 1 号的分类名,等等。

例如,训练模型贴标签时,将大象标记为 3 号,将标记为 4 号,将标记为 5 号,将 标记为 6 号,将恐龙标记为 7 号,那么在编写清单文件 words.txt 时,第一行填 0,第二行填 1,第三行填 2,第四行填大象,第五行填,第六行,第七行,第八行恐龙,第九行填8,...。最后总行数为模型文件 train_val.prototxt 中 fc8 层 num_output 数。

train_val.prototxt的fc8层num_output: 15
分15类(其实是分5类,其他用数字凑数)

修改模型文件

若训练模型时用的 caffe 自带模型 ~/caffe/models/bvlc_reference_caffenet 下的 solver.prototxt 和 train_val.prototxt ,那么直接使用该文件夹下的 deploy.prototxt 即可。

注意,deploy.prototxt 中 fc8 层的num_output值应与 train_val.prototxt 的相同,其为所分类数。

deploy的fc8层num_output也为15

进行分类

在~/caffe目录输入以下命令:

./build/examples/cpp_classification/classification.bin \
examples/myfile/deploy.prototxt \
models/re/_iter_120.caffemodel \
examples/myfile/mean.binaryproto \
examples/myfile/words.txt \
examples/images/unknow.jpg

五个参数:

第一个参数:deploy 配置文件
第二个参数:caffemodel 文件
第三个参数:均值文件
第四个参数:标签清单文件
第五个参数:待分类的图片

分类结果如下。


分类结果
unknow.jpg

参考资料

http://www.cnblogs.com/denny402/p/5111018.html
http://www.datakit.cn/blog/2015/08/03/caffe_introduction.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容