一、說明
本文為系列博客第二篇,主要講述筆者在使用該團隊提供已經標注好的COCO數據集進行訓練的過程。
由於在windows中編譯Caffe和Deeplab特別的麻煩,筆者並沒有去探索,后續可能會去嘗試。所以整個過程都可以在linux系統中運行的,但為了標注方便,筆者采用服務器(linux)完成訓練過程+windows完成標注過程的方式,並且此方式也十分有利於協同標注。
二、准備工作
安裝軟件:Matlab
建議到Matlab官網進行下載,安裝過程應該不會有什么問題,筆者使用的版本為R2017,不過版本應該沒什么影響。
安裝庫:Caffe
編譯過程以及Caffe相關基礎知識建議參考denny的學習專欄
安裝庫:Deeplab
編譯過程建議參考博文:Deeplab v2 調試全過程(Ubuntu 16.04+cuda8.0)和圖像語義分割:從頭開始訓練deeplab v2系列,前者也是參考的后者博客,不過整理的過程更詳細一點,不過里面有些許小問題,學習過程中最好兩篇結合起來。
上述博文用的啟動文件( run_pascal.sh)以及模型文件和本項目中的有所不同,建議主要通過上文學會整個過程,踩一下在編譯過程中遇到的坑,后續可以將相應的配置替換即可。
不過因為配置有點復雜,沒有替換到位會有很多意想不到的錯誤,還是建議通過上文大致跑通后,再依照此文步驟(略講)再次下載編譯與CocoStuff相對應的Deeplab文件。
下載項目:
三、目錄解析
項目目錄主要分為3部分:
1、標注工具部分
2、數據集部分
3、模型(訓練部分)
annotator
annotator主要包含兩部分:代碼部分和數據部分。后續標注工程需要使用的一些腳本都寫在此處,數據部分主要為了方便協同標注而設定的,分配的任務都對應的寫在input/imageLists/目錄下user的list文件內。
dataset
下載數據集的腳本都在這些文件中,后續下載好的數據都會在此文件下。
models
cocostuff目錄主要是訓練的配置文件、數據集、數據列表、訓練模型的存放處。deeplab-public-ver2目前沒內容,后續需要將deeplab2安裝編譯在此目錄下。
四、運行腳本
數據准備部分
下載好項目后,在Matlab中進入項目目錄下
-Matlab中運行:startup()
進入項目環境
-Matlab中運行:demo_cocoStuff()
查看demo效果(可跳過)
-linux中運行:wget --directory-prefix=downloads http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip
unzip downloads/cocostuff-10k-v1.1.zip -d dataset/
將數據集下載下來;如果是windows系統可以直接去對應網址下載,然后解壓到對應目錄下即可。
-Matlab中運行:
CocoStuffClasses.showClassHierarchyStuffThings()
查看標簽的層次結構圖(可跳過)
-Matlab中運行:CocoStuffAnnotator()
打開標注工具進行嘗試,因為本篇主要講述使用標注好的數據的過程,可跳過。
訓練部分
-Linux中運行:git submodule update --init models/deeplab/deeplab-public-ver2
下載deeplab
-修改deeplab配置文件並編譯:
cd models/deeplab/deeplab-public-ver2
cp Makefile.config.example Makefile.config
make all -j8
(有問題參考“准備工作”中的博客)
cd ../..
-創建供給訓練的相關文件夾:
mkdir models/deeplab/deeplab-public-ver2/cocostuff && mkdir models/deeplab/deeplab-public-ver2/cocostuff/data
cd models/deeplab/cocostuff/data && ln -s ../../../../dataset/images images && cd ../../../..
-將准備好的標注文件轉換為deeplab認識的格式:
startup()
convertAnnotationsDeeplab()
-下載model:
wget --directory-prefix=models/deeplab/cocostuff/model/deeplabv2_vgg16 http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/deeplabv2_vgg16_init.caffemodel
-以上均沒報錯,就可以開始訓練了:
cd models/deeplab && ./run_cocostuff_vgg16.sh
五、備注
在運行這些命令的時候如果沒有報錯的話,其他先不用考慮,能保證運行起來再進行標注方面的學習。
訓練默認為訓練集9000張,測試集1000張,迭代20000次,每10000次生成一次model,生成的model保存在cocostuff10k/models/deeplab/cocostuff/model
目錄下
訓練完成后的測試結果為mat文件,保存在cocostuff10k/models/deeplab/cocostuff/data/feature/fc8
目錄下
然后通過運行
mat = load(fileName)
imagesc(mat.varName)
來借助Matlab自帶的,可將矩陣圖可視化的函數imagesc大致查看下訓練的效果。
更專業的准確的檢測訓練效果的方法,是使用IoU重疊度檢測的方法,簡單的說就是:取訓練結果和真實結果的交集與並集之比。但是因為筆者暫時還沒找到合適的腳本(肯定已經有現成的輪子),此事暫時擱置。
*注:此處類似於Deeplab v2 調試全過程中的create_labels_21.py的作用,但是因為我們這里使用的類別為182類,無法直接使用這個腳本。筆者有去查看該腳本的內容,主要是對應21種類別進行RGB三通道賦值,然后通過python調用調色板工具,進行着色而已。但是筆者按照這樣思路,創建了一個182類的調色腳本(create_labels_182.py)但是好像因為mat文件過大,處理過程中出現了一些問題,后來放棄此種做法。