深入浅出Yolov5之自有数据集训练超详细教程
除了本文,大白還整理了如何深入淺出人工智能行業(yè),算法、數(shù)據(jù)、目標(biāo)檢測、論文創(chuàng)新點(diǎn)、求職等版塊的內(nèi)容,可以查看:點(diǎn)擊查看。
此外本文章Yolov5相關(guān)的代碼、模型、數(shù)據(jù)等內(nèi)容,可以查看下載:點(diǎn)擊查看。
當(dāng)然下方也列出了,如何通過官方鏈接的方式,下載的過程,也可以查看。
1 下載Yolov5代碼及模型權(quán)重
1.1 下載Yolov5代碼
登錄github鏈接:https://github.com/ultralytics/yolov5,下載完整的代碼。
1.2 下載Yolov5模型權(quán)重
在Yolov5模型權(quán)重頁面,https://github.com/ultralytics/yolov5/releases
在下方選擇相應(yīng)的Yolov5各個(gè)pt權(quán)重文件。
放在Yolov5代碼的models文件夾中。
2 下載一系列的依賴庫
按照yolov5代碼中requirements.txt中的說明,下載一系列的依賴庫
3 對于推理功能進(jìn)行測試
先使用預(yù)訓(xùn)練的模型,對于圖片進(jìn)行推理測試,看看效果。
修改detect.py里面的weights的路徑,增加前面的models文件夾的路徑。
運(yùn)行結(jié)束后,可以在運(yùn)行結(jié)果看到信息:
打開runs/detect/exp可以看到推理得到的結(jié)果:
4 使用自有數(shù)據(jù)進(jìn)行訓(xùn)練
4.1 數(shù)據(jù)&腳本&訓(xùn)練代碼
大白為了讓大家從0基礎(chǔ),就可以學(xué)會訓(xùn)練,準(zhǔn)備了三個(gè)文件。
(1)data:人頭數(shù)據(jù)集
為了便于大家學(xué)習(xí),大白準(zhǔn)備了一個(gè)教室場景下的人頭數(shù)據(jù)集,放在data/head/classroom文件夾中。
數(shù)據(jù)集中,JPEGImages有4361張圖片,Annotations有4361張xml文件。
(2)train_code:數(shù)據(jù)處理腳本
在train_code文件夾中,有三個(gè)python文件,主要使用的是get_labels.py和main.py兩個(gè)腳本。
get_labels.py腳本,可以直接獲取Annotations文件夾中,所有標(biāo)注文件的標(biāo)注類別。
而main.py腳本,可以將之前標(biāo)注文件和圖像,進(jìn)行處理,轉(zhuǎn)換成Yolov5可以訓(xùn)練的格式。
(3)yolov5-master:訓(xùn)練代碼
這個(gè)文件夾里面就是Yolov5的訓(xùn)練測試代碼,大家也可以直接使用大白提供的Yolov5代碼。
4.2 查看自有數(shù)據(jù)集中的類別數(shù)
打開train_code/get_labels.py,修改下方的人頭數(shù)據(jù)集路徑。
運(yùn)行后,在下方就可以看到類別數(shù),以及標(biāo)注的類別框的數(shù)量。
4.3 轉(zhuǎn)換訓(xùn)練數(shù)據(jù)格式
(1)新建數(shù)據(jù)集轉(zhuǎn)換文件夾
首先在data文件夾里面,新建一個(gè)head_train_data文件夾。
并在head_train_data文件夾中,新建一個(gè)images_label_split文件夾。
并將前面的classroom數(shù)據(jù)集,直接拷貝到images_label_split里面。
(2)main.py腳本處理:配置修改
打開train_code/main.py文件,修改訓(xùn)練數(shù)據(jù)的路徑。
在前面通過get_labels.py腳本,我們也知道了當(dāng)前數(shù)據(jù)集的類別數(shù),比如主要是“head”,將該類別填入label_list中。
而main.py文件主要分為三個(gè)部分的功能:數(shù)據(jù)集的清洗、訓(xùn)練集&驗(yàn)證集劃分、xml轉(zhuǎn)換txt格式。
(3)main.py腳本處理:數(shù)據(jù)集清洗
數(shù)據(jù)集的清洗使用的主要是這些行的代碼。
有的數(shù)據(jù)集有圖片,沒有標(biāo)注文件。有的數(shù)據(jù)集有標(biāo)注文件,圖片有可能丟失。
同時(shí)將長寬比太小的框刪除掉,并且在刪除后,檢查下是否存在空的標(biāo)注文件,如果有,也刪除。
并在最后,將標(biāo)注的框顯示到圖片上,進(jìn)一步確定腳本是否正確。
運(yùn)行上面的代碼,最后會跳出來一些畫了人頭框的圖片。
(4)main.py腳本處理:訓(xùn)練集&驗(yàn)證集劃分
訓(xùn)練集&驗(yàn)證集劃分的代碼主要是這一行代碼。
0.2表示,80%的數(shù)據(jù)進(jìn)行訓(xùn)練,20%的數(shù)據(jù)進(jìn)行驗(yàn)證。
運(yùn)行結(jié)束后,會發(fā)現(xiàn)head_train_data這個(gè)文件夾下面多了兩個(gè)文件夾,train和test,就是按照80%、20%進(jìn)行劃分。
(5)main.py腳本處理::xml轉(zhuǎn)換txt格式
xml轉(zhuǎn)換成txt格式的代碼主要是下面三行。
運(yùn)行結(jié)束后,可以看到多了兩個(gè)文件夾。
image_txt文件夾中是所有的image和轉(zhuǎn)換完的txt文件、
而train_test_txt文件夾中,則是對于訓(xùn)練和測試數(shù)據(jù)路徑匯總的兩個(gè)txt,后面訓(xùn)練中會用到。
4.4 Yolov5代碼訓(xùn)練
4.4.1 修改訓(xùn)練配置
(1)新建一個(gè)yaml文件
因?yàn)槭怯?xùn)練人頭數(shù)據(jù)集,所以在data文件夾下先新建一個(gè)head.yaml文件,并修改其中的參數(shù)。
可以復(fù)制一個(gè)coco.yaml文件進(jìn)行修改,其中主要涉及到訓(xùn)練集的txt文件、驗(yàn)證集的txt文件、類別數(shù)量nc、類別標(biāo)簽名。
(2)修改train.py參數(shù)
① 修改models里面的weights路徑,大白下載了一些pt文件放在models中,可以選擇使用。
② 修改cfg路徑,即網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)配置文件,需要注意的是,需要修改其中的類別數(shù)。
③ 修改data的路徑,即前面修改的head.yaml文件。
4.4.2 開始訓(xùn)練
運(yùn)行train.py文件,既可以開始訓(xùn)練。
可以看到網(wǎng)絡(luò)收斂的很快。
4.4.3 訓(xùn)練結(jié)果測試
網(wǎng)絡(luò)訓(xùn)練到一段時(shí)間后,可以使用detect.py腳本對于訓(xùn)練的模型,進(jìn)行測試了,不過需要修改是三個(gè)參數(shù):
① weights:即前面訓(xùn)練好得到的權(quán)重文件
② source:即需要檢測的圖片數(shù)據(jù)集
③ data:修改成head.yaml
運(yùn)行detect.py文件后,可以在runs/detect/exp最后一個(gè)文件夾中得到檢測的效果圖片:
以上就是Yolov5的詳細(xì)訓(xùn)練過程,其中每一步大白都是經(jīng)過詳細(xì)的測試的,可以下載對應(yīng)的代碼、權(quán)重,進(jìn)行嘗試。
總結(jié)
以上是生活随笔為你收集整理的深入浅出Yolov5之自有数据集训练超详细教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: M1A2C型主战坦克
- 下一篇: 兵器是天下暗器之首?