用 C++ 接口和訓練好的 caffemodel 對圖像分類

需要以下文件

  • 訓練好的 model 文件。文件已存在,假設(shè)所在路徑為 ~/caffe/model/iter120.caffemodel
  • 訓練 model 時用到的均值文件。文件已存在,假設(shè)所在路徑為 ~/caffe/examples/myfile/mean.binaryproto
  • 新編寫一份清單文件 words.txt
  • 一個由 train_val.prototxt 修改而來的 deploy.prototxt 模型文件
  • 待分類圖像,假設(shè)路徑為 ~/caffe/image/unknow.jpg

編寫清單文件

在 ~/caffe/examples/myflie 下新建 words.txt。文檔第一行為訓練模型標號 0 號的分類名,第二行為模型標號 1 號的分類名,等等。

例如,訓練模型貼標簽時,將大象標記為 3 號,將標記為 4 號,將標記為 5 號,將 標記為 6 號,將恐龍標記為 7 號,那么在編寫清單文件 words.txt 時,第一行填 0,第二行填 1,第三行填 2,第四行填大象,第五行填,第六行,第七行,第八行恐龍,第九行填8,...。最后總行數(shù)為模型文件 train_val.prototxt 中 fc8 層 num_output 數(shù)。

train_val.prototxt的fc8層num_output: 15
分15類(其實是分5類,其他用數(shù)字湊數(shù))

修改模型文件

若訓練模型時用的 caffe 自帶模型 ~/caffe/models/bvlc_reference_caffenet 下的 solver.prototxt 和 train_val.prototxt ,那么直接使用該文件夾下的 deploy.prototxt 即可。

注意,deploy.prototxt 中 fc8 層的num_output值應與 train_val.prototxt 的相同,其為所分類數(shù)。

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

五個參數(shù):

第一個參數(shù):deploy 配置文件
第二個參數(shù):caffemodel 文件
第三個參數(shù):均值文件
第四個參數(shù):標簽清單文件
第五個參數(shù):待分類的圖片

分類結(jié)果如下。


分類結(jié)果
unknow.jpg

參考資料

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容