本文是學習Caffe官方文檔"ImageNet Tutorial"時做的,同樣由于是Windows版本的原因,很多shell腳本不能直接使用,走了不少彎路,但是收獲也不少。比如:如何讓shell腳本在Windows系統上直接運行、如何去用Caffe給圖像resize來統一大小,如何去構建train.txt和val.txt等等。具體流程均記錄如下。
正文:
1.準備數據
我從網上下載了兩類圖片,一類為貓,一類為鳥,分別存在名為bird和cat的文件夾里,每類60張(50張做為訓練集,10張做為測試集)。【分開存放,在做train.txt時,方便打標簽。等做完標簽再將100張訓練圖片一起放在新建的train文件下里,下面會詳述。】
貓:(已經過批量重命名。ps:我選圖還是比較講究的,不好看的、不清楚的、不奇怪的我不選,哈哈)
鳥:(已經過批量重命名)
2.構建train.txt和val.txt
首先是重命名圖片,從搜索引擎下載下來的圖片的名稱都是則亂無章,我們需要用批量重命名的方法去先給它們命名。
批量重命名可以通過一個bat文件實現,代碼如下:
修改其中的“bird”位置,運行。比如,我將“bird”改為“Cat”,運行bat文件,效果如下:
可以看到圖片名字被統一的修改了,并且生成了一個list文件夾,通過txt文件的查找-替換,給每個文件打上標簽(比如Cat為0,Bird為1),截圖如下:
下面的工作自己做就行了,將cat和bird的txt文檔,合在一起,組成train.txt。同理,完成val.txt。我的train.txt和val.txt的截圖如下(我標簽用了1和2):
3.數據處理
數據處理要進行三項:1.將圖片統一轉化成256X256大小。2.將數據轉化為LEVELDB格式。3.求數據均值。
看了一些博客,在將圖片統一轉化成256大小這兒曲線救國,想了很多方法。其實第1步和第2步可以一起完成,只要調用examples\imagenet\create_imagenet.sh就可以一起完成。但是shell腳本在Windows下如何運行呢?是可以的,只需要安裝Git即可在Windows環境下運行shell腳本!Git下載鏈接:https://git-scm.com/downloads/
根據具體情況,對create_imagenet.sh,做一些修改(需要修改處均用紅色方框標出,五角星處即是caffe自帶的resize圖片的地方,一定要設為true):
打開git,運行create_imagenet.sh即可,查看文件夾,出現imagenet_train_leveldb和imagene_val_leveldb:
接下來是進行第三步,求圖像均值了。在進行這一步時,我使用\examples\imagenet\make_imagenet_mean.sh時,是成功求得了均值文件imagenet_mean.binaryproto,但在之后訓練時,一直報錯,提示均值文件無法讀取。故還是換用了compute_image_mean.exe,來求得均值文件,具體步驟,之前的文章已經記錄了,不再贅述。
再從\models\bvlc_reference_caffenet中,將train_val.prototxt和solver.prototxt復制過來,這樣所有文件都準備齊全了:
4.配置訓練所需文件
首先,根據具體情況修改,train_val.prototxt:
修改solver.prototxt:
關于solver里面的參數,我認為應該根據具體情況就修改就好了,這一部分我還不是很熟悉,慢慢積累吧。
5.進行訓練
寫一個bat文件,進行訓練即可!bat文件代碼如下:
6.訓練結果
因為我的電腦配置很低很低。。所以訓練起來很慢,我調小了很多參數,訓練了兩天還是沒訓完。。。貼一張訓練中的截圖吧:
?
7.總結
這次主要是為了自己感受一下用Windows Caffe訓練自己數據的整個過程,也沒有去追求準確率,也沒有考慮去跟蹤訓練過程去調參等等。這些經驗方面的知識,接下來慢慢繼續積累吧。經過這次學習,起碼能把整個過程跑下來了,收獲很多。