1 圖片信息的轉換
在caffe中經常使用的數據類型是lmdb或leveldb;不是常見的jpg,jpeg,png,tif等格式;因此,需要進行格式轉換,通過輸入你自己的圖片目錄(下有的大量圖片)轉換成一個lmdb庫文件輸出;這個過程一般由caffe工具convert_imageset完成,該工具在編譯過的caffe-master/build/tools目錄下;
2 格式轉換需要的條件
格式轉換准備條件有:1)編譯好caffe,而且convert_imageset存在; 2)被轉換的圖片和目錄,注意這些都有格式要求 3)兩個標簽文件train.txt,val.txt; 4)用命令編輯好的shell腳本create-lmdb.sh;
3 被轉換圖片文件和存放目錄
按照下面圖示安排轉換目錄:注意該例子中,圖片分為0類和1類兩個集合;
4 標簽文件train.txt和val.txt
轉換過程,除了上面提到的圖片文件目錄,還需要這些圖片的標簽文件;該文件存放圖片文件路徑,以及該圖片的標簽(屬於哪個類);一般來說,標簽文件有兩個,一個描述訓練集合-train.txt,一個描述測試集合-val.txt,這兩個文件格式有輕微差別,標簽文件格式如下:
train.txt文件:
1/T10034.jpg 1 0/096377_01M36.JPG 0 1/T580.jpg 1 1/T4151.jpg 1 0/100333_00F42.JPG 0 0/076902_04M36.JPG 0
注意:該文件包含路徑/1和/0;分別存放0,1兩類圖片。
val.txt文件:
T10034.jpg 1 221169_02M52.JPG 0 T580.jpg 1 T4694.jpg 1 332136_01M17.JPG 0 181085_02M28.JPG 0 133417_02M37.JPG 0
注意:該測試集的標簽文件無需分類存儲;與train.txt和val.txt相伴隨的目錄結構圖對照;顯然,文件內容和目錄是密切關聯的;
5 如何生成標簽文件train.txt和val.txt
當圖片規模達到上千萬級別,上述兩個文件的生成需要程序實現,網上的找到一個shell腳本如下,
# /usr/bin/env sh DATA=examples/images echo "Create train.txt..." rm -rf $DATA/train.txt find $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt find $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txt cat $DATA/tmp.txt>>$DATA/train.txt rm -rf $DATA/tmp.txt echo "Done.."
將該文件拷貝到caffe-master目錄下執行,會在caffe-master/example/images目錄下生成如下的一個train.txt文件:
cat.jpg 1 fish-bike.jpg 2
只要將上述文件稍加修改,不難產生你需要的腳本。
6 用腳本命令生成lmdb
編寫一個shell文件create_lmdb.sh,內容如下:
#!/usr/bin/en sh DATA=examples/images rm -rf $DATA/img_train_lmdb build/tools/convert_imageset --shuffle \ --resize_height=256 --resize_width=256 \ /home/my_name/caffe/examples/images/train $DATA/train.txt $DATA/img_train_lmdb
7 執行腳本
設置參數-shuffle,打亂圖片順序。設置參數-resize_height和-resize_width將所有圖片尺寸都變為256*256.
/home/my_name/caffe/examples/images/train 為圖片保存的絕對路徑。最后,運行這個腳本文件
# sudo sh examples/images/create_lmdb.sh
就會在examples/images/ 目錄下生成一個名為 img_train_lmdb的文件夾,里面的文件就是我們需要的db文件。