語義分割學習系列(五) 基於VOC2012數據集的FCN模型訓練

前言

      本文先介紹VOC2012數據集,然後再基於GitHub上的一個開源項目對VOC2012數據集訓練出一個FCN算法模型。

VOC2012數據集

      VOC2012基本數據集分爲兩個部分:Train/Validation和Test。 前者大概1.9GB,後者大約1.8GB。大家可以自行去網上搜索並下載。我們這裏主要講第一個部分,其對應的包爲:VOCtrainval_11-May-2012.tar。

    解壓縮該包後,其子目錄如下所示:

Annotations是目標檢測的標註xml文件,ImageSets裏面有目標檢測和分割分別對應的train.txt, trainval以及val.txt, 因爲另外一個目錄JPEGImages裏面的樣本圖片很多,大約17128張,但實際上訓練和驗證的樣本圖片可以通過train.txt(1464張), val.txt(1449)來指定。SegmentationClass和SegmentationObject分別是語義分割和實例分割的標註結果圖片,後綴名是png。 

FCN模型訓練

   我在github上找了這麼一個開源項目 https://github.com/overfitover/fcn_pytorch 來使用pytorch框架對VOC2012數據集進行FCN算法模型的訓練和驗證。選擇它的理由是,訓練,驗證以及推理測試命令都非常簡單,如下所示。

當然,具體運行時會遇到一些問題,這裏列幾點如下:

訓練時主要注意三個問題:

1)訓練樣本圖片(VOCdevkit)所在的路徑要在train.py中相應修改。

2)要事先下載預訓練模型:https://download.pytorch.org/models/vgg16-397923af.pth

3)"loss.data[0]"要改成 "loss.item()",前者是torch0.4以前的語法,後者是0.4以後的規範。而本人安裝的torch版本是1.1.0。

 

推理並顯示結果時,即 python3 predict.py,會遇到下面問題

1)首先也是VOC數據集樣本圖片所在路徑的修改。

2)要將volatile的用法去掉,這個也是torch版本升級的緣故, 即將 “img = Variable(img.unsqueeze(0), volatile=True)” 修改成

"with torch.no_grad()"。 

 

 

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