Caffe操作技巧之如何快速準備自己的lmdb數據集

這一期背景是安裝完成了Caffe,在研究如何由圖片轉爲lmdb文件時,在圖片訓練集上犯了愁。既不想下載imagenet,又不想費盡心思自己再準備個數據集(畢竟只是想簡單測試一下Caffe,想體驗一下跑自己數據集的快感)。於是各種歪腦子動盡,技巧列在下面了。


任何事情都有一二三,那麼,首先要考慮的是,怎麼快速擁有一堆圖片!
答案是隻要你有一張圖片就好了,嗯,充分發揮ctrl CV精神,還省去了未來圖片大小需要一致的問題。還是那句話,畢竟只是想測試一下。


第二,如何快速重命名這一堆圖片?
面臨一堆 副件123456...,看起來蛋疼,但只需要全選中,然後右鍵鍵入image,驚喜的發現全部文件名都變成了image (1),image (2)...這樣的規律,是有利於到時候寫convert_lmdb.bat的!

那麼問題又來了。在測試過程中,發現convert_lmdb.bat文件讀取train_file_name.txt(即所有訓練圖片集的文件名)過程中,讀到的文件個數始終爲0!再三檢查後發現,文件名中不能有空格!好吧,但是剛纔右鍵重命名的過程中生成的image (1).jpg天然帶一個空格(windows 10測試,其他系統不知道),如何去掉這些空格,重命名這堆圖片呢?

針對這個問題,專門從網上找到了幾個方法。分享記錄於此。
文件重命名三部曲。
1、全選圖片,右鍵鍵入image,調整成爲image (1).png,帶空格的形式。
2、在該圖片文件夾中,新建bat文件,寫入如下內容

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s/b *.*') do (
    set "foo=%%~nxi"
    set foo=!foo: =!
    set foo=!foo: =!
    ren "%%~fi" "!foo!"
)
exit

然後運行bat文件。這時候圖片全都變成了image(1).png,空格就全去掉了。
3、這個時候其實就可以了,但是我看着括號感覺十分不爽,於是接下來是去括號。
分兩步。
(1)新建excel,第一列寫ren imageset(1).png,第二列寫imageset1.png,第三列寫A1&" "&A2。然後均向下拖動自動填充圖片序號一直到全部圖片數。
(2)把第三列複製下來,同樣填寫到一個bat文件裏,執行bat,這時候圖片就全變成了image1.png...了。


第三,準備各種bat文件和exe文件。
不復雜。這裏準備三個exe和三個對應的執行這些exe的bat文件(省得每回再敲cmd了),分別是compute_image_mean.exe,convert_imageset.exe以及caffe_gpu.exe。exe文件的生成參考上一篇,簡單說就是從tools裏面找到對應的cpp文件,然後放到caffe項目下跑出來生成該cpp對應的exe就行了。
然後是bat。由於caffe自帶的是各種蛋疼的sh文件,是linux下的東西,windows下還需要下載什麼gcc啥的,麻煩,於是就自己照着網上的例子寫了bat文件。
這個是執行convert_imageset.exe對應的bat文件。我把caffe放在了D盤這個目錄,所以多了這幾步讀盤符和cd進文件夾的操作。
SET GLOG_logtostderr=1
D:
cd D:\Program Files\Caffe\data\QQimage
convert_imageset.exe train/ train.txt mytrainlmdb 0
pause
然後convert_imageset.exe後面第一個參數是圖片集所在文件夾,因爲是相對路徑,所以寫/而不是\。然後空格,第二個參數是咱們第二步裏準備的那些文件名,需要填寫進一個txt文件裏。這裏我們把剛纔excel裏面生成的那一堆文件名粘過來。由於還需要在後面放對應的標籤,這裏把png替換一下,或者是excel裏再操作一下,就行了。如開題所說,我們僅僅是爲了測試,所以我就隨便填了0 1 2三種標籤。做好的txt文件(train.txt)內容如下面幾行所示。
image1.png 0
image2.png 0
image3.png 0
image4.png 0
image5.png 1
image6.png 1
image7.png 1
image8.png 1
image9.png 1
第三個參數是生成的lmdb的文件夾名稱,生成後會有data和lock兩個文件存放在mytrainlmdb文件夾裏。第四個參數填0,不知道是什麼。
運行這個bat文件,lmdb就生成了。

至此,你應該看到夢寐以求的lmdb數據集了。

---------------------------------------------------------------------------分割線--------------------------------------------------------------------------------------

後續
第四,calculate_image_mean.exe和caffe.exe對應的bat文件。
SET GLOG_logtostderr=1
D:
cd D:\Program Files\Caffe\data\QQimage
compute_image_mean.exe mytrainldb mymean.binaryproto
pause
不多說了,生成的mean文件爲mymean.binaryproto。
SET GLOG_logtostderr=1
D:
cd D:\Program Files\Caffe\data\QQimage
caffe_gpu.exe train --solver=solver.prototxt
pause

這裏要注意這種caffe_gpu.exe train --solver=solver.prototxt的寫法。solver文件是一個單獨的文件,存放各類配置等,從mnist裏面拷出來修改一下。
我的貼在這裏。
net: "train_val.prototxt"
test_iter: 80    
test_interval: 10
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 1
display: 3
max_iter: 80
momentum: 0.9
weight_decay: 0.005
snapshot: 4000
snapshot_prefix: "prefix"
solver_mode: GPU

test_iter是迭代次數。test_interval是多少圖片一批。
這裏有個詳細的介紹。http://blog.csdn.net/u012746763/article/details/51549184

然後特別說明的是,(1)stepsize和滑動窗口原理一樣,是步長,很好理解了。test_iter,test_interval和stepsize一定要協調好,數據集太小的情況下,不要超過數據集數量範圍。
(2)第一行又是一個單獨的文件,存放net的結構。這個也從mnist裏面找到就行了。
(3)snapshot_prefix隨便寫就行,代表的是訓練過程的快照,快照的名字是prefix。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章