YOLOv5 實(shí)現(xiàn)無人機(jī)識別
點(diǎn)擊左上方藍(lán)字關(guān)注我們

01
第一步數(shù)據(jù)準(zhǔn)備
想用視覺識別一下空中飛行的無人機(jī),識別對象有:
1:鳥類bird2:無人機(jī)UAV3:直升機(jī)helicopter
想通過自己創(chuàng)建一個數(shù)據(jù)集,訓(xùn)練yolov5,在調(diào)用detect.py來識別一下效果。
百度了一下,發(fā)現(xiàn)無法獲取別人已經(jīng)標(biāo)注好的數(shù)據(jù)集。(這里提醒大家,自己做數(shù)據(jù)集不費(fèi)時間,給100多張圖打標(biāo)簽label就行,用不了半個小時)圖片就從百度搜索就行,我們的目的是感性的認(rèn)識這套牛掰的算法,100張圖訓(xùn)練個幾個小時就可以出來很好的效果,還有不用非要顯卡,雖然我的電腦有顯卡,但是裝pytorch的顯卡cuda版本的總是出錯,索性不弄了,直接用cpu版本,cpu版本的pytorch包還小,一會兒就能安裝好,這100張圖我訓(xùn)練了100個epoch花費(fèi)了3到4個小時,我的電腦的cpu是i7-9700的)
我是從百度上找了大概130多張圖片,我截個圖:

用labelimage打上標(biāo)簽,所有的標(biāo)簽數(shù)量大概也就200來個吧!不會用labelimgage制作數(shù)據(jù)集的同學(xué)可以看這里:
https://github.com/tzutalin/labelImgyolo的數(shù)據(jù)文件夾格式又要鞏固一下了,先建一個數(shù)據(jù)文件夾data,在數(shù)據(jù)文件夾data目錄下面建圖像文件夾images和標(biāo)簽文件夾labels,然后在images文件夾下面建立訓(xùn)練數(shù)據(jù)集train和驗證集val(validation的縮寫,驗證校驗的意思),在labels的文件夾下面也是建立train和val兩個文件夾,分別放訓(xùn)練集和驗證集的標(biāo)簽。
另外說一下驗證集,驗證集里面我找了26張圖片,標(biāo)記了40個左右的labels吧,所以所有的數(shù)據(jù)加起來大概150張圖片。
我放一個圖片看一下驗證集里面的圖片如下圖:

到這里為止,所有的數(shù)據(jù)基本整理完畢,另外還需要幾張測試的圖片,到測試的時候再從網(wǎng)上找就是了。
02
配置與修改參數(shù)
這里下載yolov5的源碼就不寫怎么下載了,自己百度就好,相對難度低,我是從gitee上下載的,github總是卡,這個源碼也沒有多大,幾分鐘的時間就下載好了。下面直接寫怎么改一下代碼訓(xùn)練自己制作好的無人機(jī)的數(shù)據(jù)集。
分步驟寫吧
首先:明確思路
怎么訓(xùn)練這個算法?我要訓(xùn)練什么模型?我要拿這個模型做什么?這些問題是在訓(xùn)練這個算法的時候首先要想的問題。
回答:
我要訓(xùn)練一個模型能夠識別空中飛行的無人機(jī),并打上紅框label,空中的復(fù)雜環(huán)境下可能不只有無人機(jī),會有鳥、樹、白云、直升機(jī)、飛機(jī)等等其他干擾因素印象,簡單起見,我又加上了鳥bird和直升機(jī)helicopter,所以用yolov5分類nc(number class)為3個,也就是無人機(jī)UAV、鳥bird、直升機(jī)、helicopter,看下圖,建立一個數(shù)據(jù)信息文件,文件格式y(tǒng)aml

我把這個文件名保存成了chenchen.yaml
訓(xùn)練集圖片train在uav_train下面的data里面,訓(xùn)練集也是,這個文件不用寫標(biāo)簽label的地址,因為文件夾結(jié)構(gòu)是定的,程序會自動判斷出label的位置。
chenchen.yaml文件里面的nc改成2,names改成自己的,也就是uav bird 和helicopter
下面我貼兩張圖片,這兩張圖片是我訓(xùn)練了100張圖后,測試的標(biāo)簽和測試的預(yù)測,基本上框的位置已經(jīng)很好了,只有左上角的這個直升機(jī)helicopter沒有被識別出來,這個我感覺是因為我找的直升機(jī)圖片的問題,這個直升機(jī)圖片有點(diǎn)特別,訓(xùn)練數(shù)據(jù)中這樣的圖片少的原因。

總結(jié):思路明確了,就是做一個三分類模型,無人機(jī)、鳥、直升機(jī),
其次修改train.py文件
思路確定了后就是訓(xùn)練這個模型了,我們已經(jīng)把數(shù)據(jù)集準(zhǔn)備好了,現(xiàn)在就訓(xùn)練這個模型。下載下來的yolo源碼里面的train.py文件,我截圖一下:

這個是train.py文件
第一:導(dǎo)入各種依賴包;第二:定義train函數(shù)方法,主要的就是這個train方法;第三:主程序;
解釋一下,各種依賴包不用解釋,train方法就是作者的核心了,簡單解釋就是yolo算法的原理,主程序里面就是調(diào)用tran方法畫框框,(到目前位置我能給的解釋也只有這么多,我沒有花費(fèi)時間研究,我感性上的理解應(yīng)該是這樣)
這個文件中主要要修改的參數(shù)是什么呢?
下面這張圖中我給出了箭頭

第一個箭頭:
yolov5s.pt,這個是權(quán)重文件,用的是s版本,small,yolov5的權(quán)重文件不同分為幾個不同版本,這里我用的是s版本,這里可以認(rèn)為是模型的初始權(quán)重,
第二個箭頭:
這個yolov5s.yaml文件我保存到了uav_train文件夾里面,這個文件是配置yolov5模型的,叫做配置文件吧,等下這個文件我截圖一下,這個文件也要改一個地方。
第三個箭頭:
就是數(shù)據(jù)文件,就是上面定義的一個chenchen.yaml文件,這里有訓(xùn)練數(shù)據(jù)集的地址。
第四個箭頭:
是epoch,我寫的是100,大家也可以改成10試一下,20分鐘訓(xùn)練完成,我當(dāng)時做了一下,10個epoch效果很差,100個的時候效果就是我視頻的效果,都能到70%準(zhǔn)確率以上。
第五個箭頭:
是batch,我是16張圖片一個batch
第二個箭頭解釋圖片如下:

這里是這個算法的配置文件,最終輸出的類別是3,這改成3保存就行,其他的能看出來這個里面是yolo的架構(gòu),我也不會解釋,有想了解的可以自己百度。
總結(jié):到這里train.py就修改完畢了
03
訓(xùn)練與測試
到這里就可以訓(xùn)練了,我用的是pycharm這個集成環(huán)境,所以選中train.py文件直接右鍵運(yùn)行就可以

下面就是漫長的訓(xùn)練時間,只有等著
其實(shí)這一步可以不用,test.py文件主要是用來測試驗證集val的,這里和訓(xùn)練一樣,不要把訓(xùn)練好的權(quán)重文件的地址換一下,就是best.pt文件,data的參數(shù)改一下,改成chenchen.yaml就可以。最激動人心的是第五步,就是訓(xùn)練好的模型驗證一下其他的圖片,看看效果怎么樣。
測試新圖片,新視頻看效果
這個文件是detect.py,我截圖看下:

這里有四個箭頭
第一個:訓(xùn)練好的最好的權(quán)重文件,加載上第二個:我從百度找了一個視頻文件保存成了666.mp4第三個:置信度,我這里其實(shí)可以寫0.7,第四個:iou,
解釋:如果訓(xùn)練的epoch少,可以把三四箭頭改小點(diǎn),要不然視頻和圖片中不會被標(biāo)記出,會讓你誤認(rèn)為自己訓(xùn)練的不對。測試效果如下:
END
整理不易,點(diǎn)贊三連↓
