使用SSD mobilenet训练自己的数据集
1、首先配置好環境,我是用的的torch1.7.1,和torchvision0.8.2版本,可以直接根據作者給出的requirements.txt文件進行其他安裝包的配置
2、下載代碼lufficc-SSD
PS:我是根據某乎上面一個博主進行代碼調試的,這里給出鏈接SSD訓練自己數據
3、先放置數據集,按照這種方式放置的話,代碼里面其他位置都不需要改變了
看另外一個博主說的其實VOC2012里面的內容就是VOC2007直接復制過去的,不過我是在訓練之后才看到他的博文,所以我是將自己的數據集一大半放VOC2007,小部分放的VOC2012的。annotations中放置Pascal voc類型的xml文件
4、打開ssd/config/defaults.py文件,以及configs文件夾下你需要的yaml文件,在這兩個里面更改num_classes,注意這里要改成自己的數據類別數+1!!!!這個1代表背景
5、打開ssd/data/datasets/,在下面找到coco.py或者voc.py,將里面的列別改成自己的類別。知乎那個博主說的加載預訓練模型的問題我沒有遇到,因為我沒有使用預訓練模型,在defaults.py文件中將加載預訓練模型設為False即可。
voc.py的69行class_name = obj.find(‘name’).text.lower().strip(),所以我們的數據類別一定要小寫才行
6、defaults.py和.yaml文件中,yaml的優先級更高,yaml中沒有的到defaults里面找,使用哪個backbone,輸入圖片大小,特征圖,默認框的生成配置,訓練配置,batch_size等等
7、更換backbone,在defaults.py文件中修改,我自己使用的是mobilenet的backbone,所以我這里改為
_C.MODEL.BACKBONE.NAME = 'mobilenet_v2'在改完這里之后,設置自己需要的特征圖大小,我設置的是512,在yaml文件中修改這個值即可。這里不能簡單的改個名字,需要對應去你要的backbone的py文件中查看你需要網絡的名字,再寫上去
8、更改defaults.py中其他參數。最簡單直接的方法就是對應yaml文件中的參數修改,至于為什么要這么修改我這里就不寫了,詳細的請看上面鏈接貼出的內容,那個博主寫的很好
其實在運行代碼的時候我發現改的這些好像沒有怎么用到,因為上面說了都是優先ymal文件中的內容,所以輸出的都是yaml文件中的內容,不放心的話也可以改一下啊
9、在訓練之前在train.py中先指定–config-file,我是使用的configs/mobilenet_v2_ssd320_voc0712.yaml,看自己需要進行修改,然后就可以開始訓練
10、我還遇到了問題 with open(cfg_filename, “r”) as f:
FileNotFoundError: [Errno 2] No such file or directory: ‘’,后面發現是我的yaml文件中寫了中文注釋,讀取不出來,把中文刪掉就可以了
11、訓練中我沒有看到怎么設置epoch,但是在yaml文件中設置了一個MAX_ITER=120000,在這里設置訓練的次數,同時默認2500次進行以此評估,這個也是看自己需求進行修改
12、在訓練到45000次的時候突然中斷了,我這里還沒有弄清怎么resume,等我找到方法繼續更新…
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
好了,看了這么久終于看出點眉目了,根本就不用再哪里設置怎么重新訓練,直接點運行就會接著上一次的繼續訓練了。。。。。。。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
我在跑完120000個iter之后,準備再利用我剛剛生成的模型進行訓練,然后將defaults.py中的_C.MODEL.BACKBONE.PRETRAINED設置為True,然后我在train.py文件中進行斷點調試,
從這里看到我需要將我自己的模型放到C盤對應的這個文件夾下面,然后將我自己的名字改成–mobilenet_v2-b0353104.pth,這樣的話就可以直接用我自己訓練好的權重進行訓練了,不需要在代碼中更改其他,如果自己有其他想改動的地方也可以調整。
總結
以上是生活随笔為你收集整理的使用SSD mobilenet训练自己的数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我今天才知道,原来蒙古包是没有地址的?!
- 下一篇: 中国史纲学习笔记