【語義分割小白教程】手把手教你訓練自己的數據集(基於輕量級的FCN-DenseNet)
0. 任務描述:
正好這幾天有時間,就寫一下一個小白教程,用來教大家如何用一個輕量級的 FCN-DenseNet 訓練自己的數據集,我們以分割魔方爲例:
1. 標註數據:
1.1 Labelme 的安裝:
語義分割標註我們使用 labelme,它是一個圖形界面的圖像標註軟件,是用 PyQt5 編寫的圖形界面。
安裝方式:
pip3 install labelme --user
報錯:
我們換清華源試一下:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -U labelme --user --default-time=1000 --user
解決:
1.2 Labelme 的使用:
在終端輸入 labelme:
打開界面如圖:
點擊OpenDir選擇需要標註的圖片的路徑:
點擊標註按鍵開始標註:
閉合標註區域後,填入標籤:
點擊Save保存:
另一張也如法炮製:
最後得到兩個標註的json文件:
1.3 轉換標註格式:
這一步我們需要把 json 文件轉換成 VOC 格式的顏色掩碼圖,像這樣:
我們只需要在終端輸入:
labelme_json_to_dataset <文件名>.json
即:
就可以看到在該目錄下,生成了相應的文件:
對於 1.json 也同樣操作;
最終我們只需要保留兩種標註的掩碼圖(注意需要改成跟原圖相同的圖片名):
2. 數據的目錄結構:
我們需要安排一下圖片和標註的文件目錄;
首先新建一個 Data 文件夾:
裏面創建 2 個文件夾:
train/images 文件夾放訓練原圖:
train/masks 放訓練標註圖:
同樣那個 val 下面的 images 和 masks 分別放測試原圖和測試標註圖;
3. 下載源碼:
源碼地址(記得給一個Star哦~):
https://github.com/Sharpiless/FCN-DenseNet
下載完成後解壓:
4. 下載預訓練模型:
預訓練模型地址:
http://download.pytorch.org/models/densenet121-a639ec97.pth
下載完成後放到源碼目錄下:
5. 安裝 pytorch:
Linux 安裝比較容易,這裏就着重講一下怎麼在 Windows 下安裝吧;
(我的是 python3.7,其他的版本同理)
到這個網站:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
找到對應的 torch 版本下載:
下載完成後,在相應目錄下 shift+右鍵 選擇打開 Windows Powershell:
輸入:
pip3 install torch‑1.0.1‑cp37‑cp37m‑win_amd64.whl --user
然後再:
pip3 install torchvision --user
如果還有報錯 ‘No modul named ***’,也是直接用:
pip3 install *** --user
6. 運行訓練:
在編輯器(我用的 VSCode)打開 FCN-DenseNet:
運行 train.py 即可開始訓練:
下面是訓練的參數,都有註釋說明,需要改的話在 default 裏面改就 ok:
訓練時的模型參數保存在這裏:
7. 測試圖片:
運行 test.py 即可:
會在目錄下生成一個 output 文件夾,裏面是測試集的分割結果(這裏是因爲我只有兩張圖片做例子,所以測試集跟訓練集是一樣的):
大功告成!