語義分割學習系列(六)基於自己的數據集來訓練FCN模型

前言

由於系列(五)中提到的github開源項目只針對VOC2012格式數據集進行FCN模型訓練,所以爲了方便起見,我們在對自己數據集進行標註完成後,需要先轉換成VOC格式再來用該項目代碼訓練我們自己的FCN模型。

數據格式轉換

1)將所有標註結果文件(每個樣本圖片都對應一個json文件)放在一個目錄裏面。

2)仿照json_to_dataset.py,寫一個腳本來遍歷上面目錄裏面所有json文件,並分別轉換成同文件名的png圖片。這一步驟是必需而且非常重要。將來訓練時只需要這些png的label圖片即可。

3)另外再寫一個腳本來提取出所有json的文件名,並根據train和val數目的劃分,分別保存成train.txt和val.txt。 當然,這兩個腳本完全可以合併成一個腳本。

4)在linux服務器上,先創建一個數據集根目錄,比如說self_data_set,其路徑假設是/work/self_data_set

5)在self_data_set下面創建JPEGImages子目錄,並把所有樣本圖片都放到該目錄下。

6)類似地,創建SegmentationClass子目錄,並把前面轉換好的png圖片放放到該目錄中。

7)同理,創建ImageSets子目錄,並把train.txt和val.txt放到該目錄中。

模型訓練

由於每個數據集的情況不一樣,比如說class name和number不相同,所以需要對train和樣本數據集相關代碼進行相應修改。

我們先看 train.py

1)要根據自己數據集情況來修改基本訓練參數,比如batch_size, epochs, class num以及learning_rate。

parser = ArgumentParser()
parser.add_argument('-bs', '--batch_size', type=int, default=2, help="batch size of the data")
parser.add_argument('-e', '--epochs', type=int, default=200, help='epoch of the train')
parser.add_argument('-c', '--n_class', type=int, default=2, help='the classes of the dataset')
parser.add_argument('-lr', '--learning_rate', type=float, default=1e-3, help='learning rate')

2) 指定樣本數據集root路徑

# self dataset
data_path = os.path.expanduser('/work/')

voc_loader.py是專門讀取voc格式的數據集的腳本文件,也需要做相應修改:

1)class name的修改:

class VOCClassSegBase(data.Dataset):

    class_names = np.array([
        'background',
        'xxx',
        ... ...
    ])

2)進一步指定自己數據集的根目錄

  # dataset root dir
  dataset_dir = osp.join(self.root, 'self_data_set')

至此,就可以運行 python3 train.py來開始訓練模型了。  

 其部分log如下所示

 

 

 

 

 

 

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