Windows Caffe(三) 影象資料轉化為Caffe可以執行的資料
阿新 • • 發佈:2019-01-02
在執行Caffe自帶的兩個例子的時候,我們的資料都來自網際網路,是直接下載的二進位制檔案。
但我們大多數情況下使用的是原始的圖片資料(如.jpg .png等),接下來研究如何將原始的圖片資料轉化為caffe可以執行的資料。
1、準備圖片資料
caffe安裝完成之後,在example/images檔案下會有四張.jpg圖片,cat.jpg, cat gray,jpg, cat_gray.jpg, fish-back.jpg2、生成圖片清單
我們寫需要一個sh指令碼,呼叫Linux命令生成圖片的清單。Windows下如何執行shell指令碼,第一個實驗有說。 編寫指令碼的原因是我們有大量的訓練資料和測試資料,手寫清單不大現實。 具體操作 在example/images資料夾下建立一個create_filelist.sh這裡對指令碼做下大致的解釋 DATA=D:/Caffe/Caffe_BVLC/examples/images 圖片所在位置# /usr/bin/env sh DATA=D:/Caffe/Caffe_BVLC/examples/images echo "Create train.txt..." exec 2>>log.txt rm -rf $DATA/train.txt find $DATA -name *cat.jpg | cut -d '/' -f6 | sed "s/$/ 1/">>$DATA/train.txt find $DATA -name *bike.jpg | cut -d '/' -f6 | sed "s/$/ 2/">>$DATA/tmp.txt cat $DATA/tmp.txt>>$DATA/train.txt rm -rf $DATA/tmp.txt echo "Done.."
exec 2>>log.txt 將執行期間所遇到的錯誤寫入log.txt資料夾下 rm -rf遞迴強制刪除 find $DATA -name *cat.jpg | cut -d '/' -f6 | sed "s/$/ 1/">>$DATA/train.txt 在$DATA目錄下,查詢*cat.jpg檔案,cut表示擷取路徑,-f6表示第六層目錄下(根據自己的情況修改)。sed表示在每行後面加上標註。
cat $DATA/tmp.txt>>$DATA/train.txt 將temp.txt檔案中的內容寫到train.txt檔案後面,相當於兩個檔案合併。
執行該檔案,會生成一個train.txt的檔案。
3、生成lmdb格式的檔案
該檔案的使用格式: convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME 分析一下convert_imageset的四個引數
FLAGS
-gray: 是否以灰度圖的方式開啟圖片。程式呼叫opencv庫中的imread()函式來開啟圖片,預設為false
-shuffle: 是否隨機打亂圖片順序。預設為false
-backend:需要轉換成的db檔案格式,可選為leveldb或lmdb,預設為lmdb
-resize_width/resize_height: 改變圖片的大小。在執行中,要求所有圖片的尺寸一致,因此需要改變圖片大小。 程
序呼叫opencv庫的resize()函式來對圖片放大縮小,預設為0,不改變
-check_size: 檢查所有的資料是否有相同的尺寸。預設為false,不檢查
-encoded: 是否將原圖片編碼放入最終的資料中,預設為false
-encode_type: 與前一個引數對應,將圖片編碼為哪一個格式:‘png','jpg'......
ROOTFOLDER
圖片存放的路徑
LISTFILE
檔案清單
DB_NAME
最終生成的lmdb或leveldb所存放的路徑
具體操作
在example/images資料夾下建立一個create_lmdb.sh 指令碼,指令碼內容如下:
DATA=D:/Caffe/Caffe_BVLC/examples/images
rm -rf $DATA/img_train_lmdb
D:/Caffe/Caffe_BVLC/Build/x64/Release/convert_imageset.exe --shuffle \
--resize_height=256 --resize_width=256 \
$DATA $DATA/train.txt $DATA/img_train_lmdb
執行該指令碼,會在該目錄下生成一個新的檔案,如下圖所示:
至此,將原始的圖片資料轉化為caffe能夠執行的lmdb資料實驗 完成。
如有疑問,歡迎一起探討!