學(xué)習(xí)筆記-yolov5訓(xùn)練自己的模型初探
配置yaml文件:
創(chuàng)建了gesture_image.yaml文件:
yaml的作用在于將要訓(xùn)練的數(shù)據(jù)集文件結(jié)構(gòu)位置以及具有的類別,知會給yolov5模型,所以在yolov5項目下的data文件夾中新建自己的yaml文件。

添加配置需要參量:
包括數(shù)據(jù)集文件夾路徑,數(shù)據(jù)集中train和val圖片路徑以及Classes,即標(biāo)簽類名。

修改train.py接收參數(shù)函數(shù)parse_opt()的默認值
包括:
--weights 選擇yolov5s.pt
--data 上一步配置好的gestrue_image.yaml文件路徑
--epochs 訓(xùn)練迭代次數(shù),先來100輪
--batch-size 一次訓(xùn)練分批每批次數(shù)量,先設(shè)置48
--works 設(shè)置為0
--name 保存名字,使用默認exp

訓(xùn)練:
開始訓(xùn)練,

實驗室兄弟說訓(xùn)練過擬合,結(jié)果并不好,

嘗試運行起來也不行。收拾收拾,再來吧。
數(shù)據(jù)增強:
使用b站up主@啥都生的數(shù)據(jù)增強軟件,有現(xiàn)成的輪子就是方便,鏈接:https://www.bilibili.com/video/BV1Sv4y1S7yb/?spm_id_from=333.788.top_right_bar_window_history.content.click&vd_source=fbf62db090250cc27ce97b468689ee38
不過,支持xml、json格式,非不支持yolo的txt格式,所以先進行格式轉(zhuǎn)換。
格式轉(zhuǎn)換:yolo2xml
使用了csdn論壇一篇博客的腳本,鏈接:https://blog.csdn.net/coulson/article/details/125778467。
修改完代碼中的類別字典和自己的數(shù)據(jù)集圖片、txt標(biāo)簽、要輸出xml路徑,后運行即可。圖為代碼運行:

從txt標(biāo)注轉(zhuǎn)為xml標(biāo)注,通過labelimg軟件,抽查了幾張,位置及對應(yīng)類別都正確,效果不錯:


開始增強:
選擇好路徑,因為我的數(shù)據(jù)集圖片過少(2365張),所以增強后要與原先的圖片混在一起,所以初始編號設(shè)置為2366。點擊確認,準(zhǔn)備批量操作。

忽然意識到不對,一共所有圖片才2358張,最高編號怎么是2365?得,要是跳了還好說,要是錯位就真傻眼了。趕緊去檢查了一遍,好在基本上圖片與對應(yīng)標(biāo)注都沒啥問題,看來沒有錯位。繼續(xù)。
使用了旋轉(zhuǎn),縮放,噪點等手段,把數(shù)據(jù)集拓展到一萬七千多張,這回應(yīng)該效果會好些。

格式轉(zhuǎn)換:xml2yolo:
被網(wǎng)上亂七八糟的玩意折磨死,項目結(jié)構(gòu)看的人頭疼。除此之外,最意外的bug是忘記了在文件路徑后的/,然后顯示怎么都找不到文件。我簡直是……

實驗室某位不知名老哥給的轉(zhuǎn)換文件,終于還不錯,雖然沒給教程,不過還是用起來了。之后得讀讀代碼,基礎(chǔ)的腳本還是看看。
再訓(xùn)練:
增強并轉(zhuǎn)換完數(shù)據(jù),就又開始訓(xùn)練我的模型了。
不過打開tensorborad界面,顯示出錯,仔細看了下,是該指令指定的文件路徑并不能在python所在位置找到,
(yjh) PS X:\temp\compare to learn> tensorboard --logdir runs\train 出錯
所以先在終端中進入yolov5-master項目后,再運行該指令,
(yjh) PS X:\temp\compare to learn\yolov5-master> tensorboard --logdir runs\train
運行成功,顯示訓(xùn)練過程:

又開始漫長的訓(xùn)練過程了,借了實驗室老哥的3080,估計也要跑11個小時。終于有一點了解AI煉丹一詞如何而來了。訓(xùn)練結(jié)果要是不行,增加數(shù)據(jù),修改參數(shù),再訓(xùn)練,直到得到一個合用的模型。即便有調(diào)參的方向,也往往需人力窮舉調(diào)整配方,再加上每次漫長的等待。這確實有些煉丹的意味了??蒲忻窆ず痛a農(nóng)這樣的詞也許也是如此得來的吧。

再結(jié)果:
早上來實驗室,訓(xùn)練完了,結(jié)果比上次好了一奈奈,但依舊會做出類似于把貓識別成狗的事,比如把我的腦袋識別成了表示門的手勢。恭喜我,又訓(xùn)練出了個人工智障。



我其實是不大明白,為什么會把我的腦袋識別成door,置信率還高達0.82。還是得再學(xué)習(xí)學(xué)習(xí),看看問題出在哪里了。感覺可能是與訓(xùn)練權(quán)重用yolov5s.pt不大行,或許可以試試更大一點的模型。又或者事訓(xùn)練輪數(shù)多了些,才導(dǎo)致過擬合。不過都先不急,下一步先去學(xué)會如何看訓(xùn)練效果的文件吧,看看這輪的模型到底怎么樣在說別的,不能盲目的再走了。順便再把沒看完的吳恩達的入門課程也看完吧。