目标检测第6步:YOLOv5(5.0)如何在Colab中训练自定义数据集?(更新时间:2022.3.22)
(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客)? ? ? ?
如果看完這篇博文,你的問題還是沒有解決,那么請關注我的公眾號,后臺發(fā)消息給我吧,當天回復!
目錄
一、收集數(shù)據(jù)
二、人工標記
1、下載labelimg
2、進行預訓練
A、打開界面,滑動到如下圖所示位置
B、滑動鼠標滾輪,找到如下位置
C、按照原來訓練的命令執(zhí)行,將coco128數(shù)據(jù)集下載到本地,觀察目錄結構。
3、labelimg軟件基本操作
A、打開Labelimg軟件
B、點擊“Open Dir”按鈕
C、點擊“Change Save Dir”
D、選擇標簽的類型為YOLO
E、使用默認標簽
F、將輸入法切換到英文,“w”代表寫標簽,“d”代表下一張
G、備份整個數(shù)據(jù)集?
三、訓練
1、確認照片的數(shù)量和標記之后生成的txt文件數(shù)量一致
2、構造yaml文件
3、最后確認目錄結構
4、正式訓練(谷歌的Colab,需要科學上網(wǎng))
A、打包數(shù)據(jù)集
B、上傳壓縮包
C、在Colab中安裝YOLOv5
D、探索數(shù)據(jù)集文件夾和YOLOv5的目錄關系
E、將壓縮包移動到筆記本內(nèi)
F、上傳yaml文件或者修改yaml文件
四、正式開始訓練
???????本文僅是介紹訓練自定義數(shù)據(jù)集的通用方法,重在類比。其中的文件目錄結構、文件名稱等在熟悉本方法后,可自行修改(通過修改配置文件的路徑),以理解為主。
一、收集數(shù)據(jù)
????????要想訓練自己的數(shù)據(jù)集,第一步要做的事情就是拍照,將圖片上傳到電腦,構造自己的數(shù)據(jù)集。圖片可以來源于現(xiàn)實生活,也可以來源于網(wǎng)絡,只要圖片中有你想要的內(nèi)容,就可以將此圖片作為數(shù)據(jù)集中的“一員”。值得注意的是,圖片的分辨率不易太大,否則在訓練時,對GPU要求較高。本文接下來的操作流程是按照實際的成功操作流程進行敘述的,請放心參考。
二、人工標記
????????我們需要下載labelimg工具對數(shù)據(jù)集中的每一張圖片進行標記,也即貼標簽。
1、下載labelimg
下載的鏈接為:GitHub - tzutalin/labelImg: 🖍? LabelImg is a graphical image annotation tool and label object bounding boxes in images
無法下載labelimg軟件的同學,歡迎關注我的微信公眾號,后臺留言,一天之內(nèi)必定回復。
2、進行預訓練
????????預訓練的目的是了解YOLOv5數(shù)據(jù)集的目錄結構,并不是需要將官方的訓練集完全訓練一次。請各位同學,根據(jù)文字內(nèi)容及截圖示意進行操作。
A、打開界面,滑動到如下圖所示位置
不知道怎么打開的,請看我上一篇文章:目標檢測第5步:如何在Windows 10系統(tǒng)下,搭建YOLOv5(5.0)環(huán)境?保姆級,沒有人比這個更詳細了(更新時間2022.3.22)_liO_Oil的博客-CSDN博客_yolov5環(huán)境搭建win10
B、滑動鼠標滾輪,找到如下位置
C、按照原來訓練的命令執(zhí)行,將coco128數(shù)據(jù)集下載到本地,觀察目錄結構。
通過下載、解壓、觀察后發(fā)現(xiàn),他的目錄結構是這樣的:
?????????其中images和labels分別存放的是官方數(shù)據(jù)集中的圖片和對應label的txt文檔,LICENSE和README是許可文件和相關信息,都得保存下來,不可刪除。接下來我們剖析這個文件的目錄,我們先看images的目錄結構:
?再看labels的目錄結構:
???????最后兩幅圖中的txt文件,即為官方數(shù)據(jù)集中記錄圖片中標記位置的坐標。里面存儲了矩形框的坐標(左上和右下),這是已經(jīng)標記好的,我們不用標記了,如果時間不是很緊迫,那就可以先訓練一下試試,測試一下電腦性能。如果時間緊迫,那么就接著參考本文,盡快訓練數(shù)據(jù)集。?
???????通過這個目錄結構,想必你也知道了數(shù)據(jù)集構造需要哪些文件了吧。沒錯,一級目錄中顯示的四個文件,缺一不可,詳情見下圖。
???????各位同學可以邊閱讀此篇文章,邊根據(jù)目錄結構準備相應的文件??梢韵葎?chuàng)建一個文件夾叫coco128,隨后在這個文件夾里創(chuàng)建images和labels,2個文件夾。將上述截圖中紅色框內(nèi)的2個文件拷貝到自己創(chuàng)建的coco128文件夾內(nèi),再按照上述介紹的文件目錄把已經(jīng)收集好的照片拷貝到對應的文件夾里。接下來,就可使用labelimg軟件貼標簽了!所以,接下來有關labelimg的操作務必非常重視。此步結束時,你的數(shù)據(jù)集目錄應該是這樣的:?
3、labelimg軟件基本操作
????????首先,需要了解軟件的設定和操作,避免做無用功,同時提高效率。我曾經(jīng)有1000多張圖片的數(shù)據(jù)集,就因為軟件操作不當,重新標記了2-3回(當然也是因為樣本的擴充,需要重新標定)。在打開軟件前,首先要做的就是更改預存標簽。操作如下圖所示:?
這個文件中的標簽是有順序的,一旦確定之后就不要所以更改,避免做無用功。隨后,就可以打開軟件了,鼠標雙擊labelimg.exe
A、打開Labelimg軟件
點擊“View”按鈕,選擇“Auto Save mode”,操作如下圖所示,一定得確保Auto Save mode前面有對勾。
B、點擊“Open Dir”按鈕
打開你的數(shù)據(jù)集照片存放的最終位置(最深層目錄),目錄、操作如下圖所示:?
C、點擊“Change Save Dir”
在更改標簽(就是txt文件)的存儲位置之前,你可以在labels文件夾里創(chuàng)建一個train2017文件夾,用來存放標簽對應的txt文件。目錄結構是這樣的:?
?然后,點擊“Change Save Dir”按鈕,選擇到剛才創(chuàng)建的文件夾。
D、選擇標簽的類型為YOLO
?????????否則,貼完標簽后,將會不是txt文件格式。這一點很重要,我貼了200多張,最后發(fā)現(xiàn),不是YOLO,欲哭無淚。也有相關的代碼可以將VOC格式的數(shù)據(jù)轉換為YOLO,大家可以從別處了解一下。
???????截止到目前為止,軟件操作界面的上側、左側都已設置完畢。像放大、縮小圖片等操作,我這里就不介紹了,放大圖片貼標簽貼的更準確一點,建議大家耐心一點操作,會收到意想不到的效果。最好每次進入labelimg軟件時,都檢查一下,防止出錯。接下來是右側。? ? ??
E、使用默認標簽
F、將輸入法切換到英文,“w”代表寫標簽,“d”代表下一張
????????操作完E后,請將光標放置于圖片上,并敲擊幾下。防止接下來的“W”字母出現(xiàn)在標簽上。(這都是貼標簽掉進的坑,希望大家注意)
? ? ? ? 敲擊鍵盤w,將會出現(xiàn)兩條互相垂直的長實線,這個就是貼標簽的工具了。
?
因為在軟件開始時,已經(jīng)設置了自動保存模式。所以,直接叩擊鍵盤d,跳到下一張圖片。?
此時,我們再跳到數(shù)據(jù)集中,查看有什么變化。發(fā)現(xiàn),照片文件夾中沒什么變化。但是標簽文件夾中出現(xiàn)了一些內(nèi)容:
????????其中,classes.txt文件要保存好,別小看這個文件,這個文件疏忽了,能讓你的標記全白費,所以建議各位,先標記個1-10張圖片,試驗一下,訓練程序能否進行。程序沒錯誤,就進行標記。有錯誤,再回頭看看本文的流程。一定得注意,打完第1-3個標簽,就得打開這個文件夾進行分類名稱和序號的確定。如果要改變classes.txt文件里的標簽順序,那么就得將改變順序之前的所有圖片,重新標記,否則也會出現(xiàn)問題。
G、備份整個數(shù)據(jù)集?
???????因為剛才建議大家標記上1-10個圖片,就先進行一下訓練,而訓練是的文件夾中不能包含classes.txt文件,所以這里,請大家再次備份一下整個coco128文件夾(包含里面的子文件),防止數(shù)據(jù)丟失或便于數(shù)據(jù)集的擴充,無論哪種情況,都不用重新再標記了。??????????
三、訓練
????????無論是你標記了10個圖片之后的小試牛刀還是全部標記之后的最終一戰(zhàn),你都得在訓練前檢測以下內(nèi)容:
1、確認照片的數(shù)量和標記之后生成的txt文件數(shù)量一致
????????即:coco128\images\train2017目錄下的圖片數(shù)量和coco128\labels\train2017目下的txt文件數(shù)量一致(確保classes.txt文件已被移除)。補充說明如下圖所示:
2、構造yaml文件
????????通過查看訓練命令行,我們知道要想訓練,就得有對應的yaml文件。
?首先打開官方的yaml查看一下:
?
?對其中紅框中的內(nèi)容進行修改后,得到下圖:
?這里需要注意,貌似新的coco128.yaml文件是以下樣子(多出了“path”,就是下圖中第一個紅框內(nèi)容,需要按照圖片中的內(nèi)容來修改相對路徑):
???????無論是哪一個,程序在運行時,能找到對應的文件就可以。(如果你選擇colab訓練,可以直接修改對應目錄下的coco128.yaml文件,至于詳細的方法,下文有介紹到,別著急)
3、最后確認目錄結構
4、正式訓練(谷歌的Colab,需要科學上網(wǎng))
?????????這里選用Colab的目的在于:訓練速度快,能迅速知道自己的數(shù)據(jù)集能否正常訓練。選擇了Colab,就倆字“很香”。一旦colab運行成功了,想在本地訓練的再進行本地訓練(畢竟本地訓練更穩(wěn)妥一些,畢竟不會涉及到網(wǎng)絡資源被收回的風險,至于本地如何訓練自定義數(shù)據(jù)集,下一篇文章將會介紹)。Colab一旦檢測到筆記本(本文提到的所有的筆記本都是在Colab中創(chuàng)建的,不是指你們面前的“筆記本電腦”)頁面長時間沒有活動,就會斷開,網(wǎng)絡資源被收回,里面的什么東西都沒有了。
A、打包數(shù)據(jù)集
????????將自己創(chuàng)建好的coco128文件整體打包成rar格式,打包是因為上傳方便,同時解壓后能保存目錄結構。
B、上傳壓縮包
????????因為從Colab上傳文件時較慢(我個人情況是這樣的,你們可以試試,快的話直接上傳就好),所以,我先將coco128上傳到谷歌云盤,再轉移到筆記本目錄。具體操作見下圖:
?等待上傳完成即可。
?
C、在Colab中安裝YOLOv5
谷歌瀏覽器框輸入Colab,點擊搜索。
?
?點擊文件,上傳筆記本。
?只需將下面這個文件上傳即可:
?上傳完成后,將會跳轉界面。然后按下圖操作流程進行,下載Yolov5代碼。
?下載完成后,將會出現(xiàn)“Setup complete”等字樣。隨后在文件夾目錄也可以看到y(tǒng)olov5的文件。
?
?然后運行inference,檢測yolov5是否正常。
D、探索數(shù)據(jù)集文件夾和YOLOv5的目錄關系
????????我們知道了coco128文件夾內(nèi)的目錄結構,但是還不知道coco128文件夾和YOLOv5文件夾的目錄關系(其實在第二章的2中,進行本地預訓練時,留心的同學已經(jīng)知道解壓后的coco128文件夾和YOLOv5文件夾是并列的關系,但此處再羅嗦一下)所以,接下來直接滑動滾輪到Train條目下。操作如圖所示:
?
?????????下載完成后,我們刷新文件目錄發(fā)現(xiàn),yolov5和coco128的文件目錄果真是并列的,此時便可大膽放心的將所有的文件搬進筆記本了。
E、將壓縮包移動到筆記本內(nèi)
?詳細的操作用圖說話:
?
?
?
?復制后,返回到筆記本界面,將代碼粘貼到輸入框內(nèi),敲擊回車(多敲幾下,會有明顯的代碼繼續(xù)運行的反應):
?顯示以下信息表示鏈接成功:
?
?
?
F、上傳yaml文件或者修改yaml文件
???????接下來上傳coco128.yaml文件,但我們已經(jīng)將整個yolov5的文件下載到了筆記本,不如直接在新下載的coco128.yaml文件里修改吧。在yolov5的data文件夾目錄下,可以找到coco128.yaml文件。
?
?雙擊該文件,如下圖所示,這個是已經(jīng)修改過的了。
????????別忘記Ctrl + s保存。保存后,關閉coco128.yaml文件即可。最后,還得去改一項內(nèi)容,就是對應權重的yaml文件。(我在訓練時引入了--cfg選項)
????????我將用yolov5s.pt訓練,那么就得修改yolov5s.yaml。下圖中的yolov5s.yaml文件是在models文件夾下,截圖中的紅色矩形框稍有偏差。
?
?????????截止到目前為止,我們訓練所需要的文件和數(shù)據(jù)集均已準備完畢,那么開始訓練,注意訓練的命令行有所更改。注意看截圖!!!
四、正式開始訓練
???????滑動滾輪,到熟悉的Train條目下。下圖將下載官方數(shù)據(jù)集的命令用#號注釋掉,根據(jù)我們壓縮包的類型,我們輸入如下命令進行解壓。(推薦用Winrar打包,其他的如7-zip解壓縮工具,Colab不支持)
!unrar x ../coco128.rar ../?
???????接下來,看圖操作。下圖中的前2個紅色框后面標記了Optional,意思是待選框,可以不選。為了方便,這里就直接忽略,把目標放在最終的訓練命令行。
圖中的1,2,3,4的含義:
????????1處的Batch:Batch大小是一個超參數(shù),用于定義在更新內(nèi)部模型參數(shù)之前要處理的樣本數(shù)。這里設置的數(shù)量最好是內(nèi)存的2的n次方,不可過大。
????????2處的Epochs:Epoch數(shù)是一個超參數(shù),它定義了學習算法在整個訓練數(shù)據(jù)集中的工作次數(shù)。你可以慢慢提升次數(shù),從100開始即可(我本次演示訓練時也是100起步)
????????3處的yolov5s.yaml可以更換成其他3個權重對應的yaml文件,但要記住修改訓練的類的數(shù)量。
????????4處的權重文件可以改成其他的權重文件。似乎得和3處的yaml文件一致。
接下來,就開始訓練了:
!python train.py --img 640 --batch 16 --epochs 30 --data coco128.yaml --cfg yolov5s.yaml --weights weights/yolov5s.pt --nosave --cache出現(xiàn)下圖所示的顯示信息時,表明你已經(jīng)成功運行訓練程序了!默默等待訓練完成即可。?
???????YOLOv5本地訓練時會輸出一個last.pt文件,以及一個best.pt文件,但是Colab上訓練,似乎只有批次參數(shù)設置合適的時候才會出現(xiàn)best.pt。最后將pt文件下載,放到本地的YOLOv5的weights文件夾里,就可以識別你想識別的物體了。?
總結
以上是生活随笔為你收集整理的目标检测第6步:YOLOv5(5.0)如何在Colab中训练自定义数据集?(更新时间:2022.3.22)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宜春市到安福的汽车经过新坊镇吗?
- 下一篇: 淮北到涡阳汽车时刻表查询驾驶证可以买车票