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());
std::vector
label(label_count);
while (infile >> filename)
// create new db
scoped_ptrdb_image(db::getdb(flags_backend));
scoped_ptrdb_label(db::getdb(flags_backend));
db_image->open(argv[3], db::new);
db_label->open(argv[4], db::new);
scoped_ptrtxn_image(db_image->newtransaction());
scoped_ptrtxn_label(db_label->newtransaction());
訓練模型:
上面我們就有了多工的深度學習的基礎部分資料輸入。為了向上相容caffe框架,我也是參考了大牛的部落格,摒棄了部分開源實現增加data層標籤維度選項並修改data層**的做法,直接使用兩個data層將資料讀入,即分別讀入資料和多維標籤。接下來詳細介紹訓練所需要做的步驟以及和修改。
1. lmdb的資料製作
由於篇幅的原因,我只貼了部分主要的**圖,注意下圖示紅的部分,第乙個是你多標籤所需要的類別數目,第二個是一些資料的路徑。
由於現在為了支援多標籤,把資料和標籤分開了,以前的單標籤在data層資料和標籤在一起的對應的(自己的理解)。所以第三和第四初標紅的是test和train最後用於訓練的lmdb資料和對應多維標籤。這製作lmdb指令碼檔案我會放在我的部落格資源上:
#訓練資料層
name: "caffenet"
layer
transform_param
data_param
}#訓練資料標籤層
layer
data_param
}#測試資料層
layer
transform_param
data_param
}#測試資料標籤層
layer
data_param
}
修改完網路模型的data層,後面需要將標籤資料庫中的內容進行切分,拆分成各個屬性的標籤,需要新增slice層,slice層是將乙個輸入層根據切割指標給定的維度(現在只有num和channel)切割成多個輸出層,如下圖所示。有幾類標籤就定義幾類top並命名不同,用於連線最後的accuracy層。對於slice層的引數: Caffe實現多標籤分類
任務 我這裡給出乙個具體的任務咯,要求在以下中,識別出汽車品牌和車輛外形。汽車品牌分為 benz bmw audi 車輛外形分為 sedan suv。這是乙個只有72張的小資料庫,包括了測試和訓練集 這裡寫描述 我們這裡採用的是上述文章中薛大牛的方法,兩個data層,乙個data只放,另乙個data...
多標籤分類問題
多類分類與多標籤分類 深度學習 多標籤分類問題 深度學習,opencv3 mxnet等影象處理相關的demo 深度學習模型處理多標籤 multi label 分類任務 好,介紹了整個處理流程 多標籤 multi label 分類任務 和 多分類 multi class 任務的區別 這裡筆者強調一下多...
caffe多工學習之多標籤分類
最近在參加乙個識別的競賽,專案裡涉及了許多類別的分類,原本打算乙個大的類別訓練乙個分類模型,但是這樣會比較麻煩,對於同一的分類會重複計算分類網路中的卷積層,浪費計算時間和效率。後來發現現在深度學習中的多工學習可以實現多標籤分類,所有的類別只需要訓練乙個分類模型就行,其不同屬性的類別之間是共享卷積層的...