Caffe實現多標籤分類

2021-08-08 19:09:07 字數 2614 閱讀 3804

任務

我這裡給出乙個具體的任務咯,要求在以下中,識別出汽車品牌和車輛外形。汽車品牌分為:benz/bmw/audi 車輛外形分為:sedan/suv。這是乙個只有72張的小資料庫,包括了測試和訓練集:

這裡寫描述

我們這裡採用的是上述文章中薛大牛的方法,兩個data層,乙個data只放,另乙個data放label,label通過slice layer切開。然後我們開始定義網路!修改alexnet!這是我的網路:

做資料轉換工具!

整個網路結構需要兩類資料,一類是純的lmdb,一類是包含兩個標籤的lmdb。首先我們需要修改caffe中的原始碼(相信我,很簡單!)開啟你編譯caffe時候的工程,找到convert_imageset這個工程:

修改convert_imageset.cpp為convert_multilabel.cpp,內容如下,全部替代也可以:(見github:然後重新編譯這個convert_imageset這個project。你可能會遇到什麼沒有生成object的警告,在這裡關掉即可:

完成後,我們會看到release資料夾下多了乙個convert_multilabel的exe,這個就是我們的lmdb生成工具啦。

做影象和多標籤資料!

convert_imageset.exe --resize_height=256 --resize_width=256 --shuffle=true d:\caffe-master\examples

\zncar

\test

\ d:\caffe-master\examples

\zncar

\test.txt d:\caffe-master\examples

\zncar

\test_lmdb d:\caffe-master\examples

\zncar

\test_label_lmdb 2

pause

然後還要做均值檔案:

compute_image_mean.exe d:\caffe-master\examples

\zncar

\test_lmdb d:\caffe-master\examples

\zncar

\testmean.binaryproto

pause

總之最後應該有六個東西,如圖:

微調alexnet!

試一試我們的模型

這裡還需要修改classification.cpp檔案,因為caffe自帶的只支援單樣本。我自己做了乙個修改版本的,主要是修改了命令列和輸出網路的部分,這個cpp只支援兩標籤,主要是用著方便,如果你需要更多的標籤可以自己修改。編譯步驟同convert_multilabel.cpp的編譯。鏈結中的的**直接就可以替換原來的cpp。

結果寫兩個標註檔案:

label1.txt:

sedan

suvlabel2.txt:

audi

bmw

benz

1 2

3 4

5 6

7 8

我修改後的classification.exe 分類的命令列:

本專案的github**:

資料集:

caffe實現多標籤分類

std ifstream infile argv 2 std vector lines std string filename std string label count string argv 5 int label count std atoi label count string.c str...

多標籤分類問題

多類分類與多標籤分類 深度學習 多標籤分類問題 深度學習,opencv3 mxnet等影象處理相關的demo 深度學習模型處理多標籤 multi label 分類任務 好,介紹了整個處理流程 多標籤 multi label 分類任務 和 多分類 multi class 任務的區別 這裡筆者強調一下多...

caffe多工學習之多標籤分類

最近在參加乙個識別的競賽,專案裡涉及了許多類別的分類,原本打算乙個大的類別訓練乙個分類模型,但是這樣會比較麻煩,對於同一的分類會重複計算分類網路中的卷積層,浪費計算時間和效率。後來發現現在深度學習中的多工學習可以實現多標籤分類,所有的類別只需要訓練乙個分類模型就行,其不同屬性的類別之間是共享卷積層的...