1. 程式人生 > >YOLOV3實戰2:訓練自己的資料集,你不可能出錯!

YOLOV3實戰2:訓練自己的資料集,你不可能出錯!

大家好,我是小p,今天給大家帶來一期用darknet版本YOLO V3訓練自己資料集的教程,希望大家喜歡。 歡迎加入物件檢測群813221712討論和交流,進群請看群公告! 一、搭建環境 搭建環境和驗證環境是否已經正確配置已在YOLOV3實戰1中詳細介紹,請一定要先解決環境問題,有任何疑問,歡迎入群@或者求助其他小夥伴。 二、資料準備 總體簡介:YOLOV3 訓練訓練自己的資料集時你一共需要修改6個檔案,如表1所示: 表1 訓練需要準備的檔案列表

檔名 檔案路徑 檔案說明
makefile darknet-master 編譯生成可執行程式的檔案,在其中指定是否使用GPU和Cuda,是否使用攝像頭、OpenCV等
train.txt 自定義 儲存訓練圖片的路徑,每一行為一張圖片的完整路徑,一般報找不到xx圖片的錯誤多半是本檔案格式不對
label資料夾 自定義 整個資料夾存放所有圖片的標註資訊,標註資訊用txt文件儲存,詳細資訊見下
.cfg檔案 darknet-master/cfg/ .cfg指定了網路的結構和其他超引數,有關cfg的詳細說明請關注YOLOV3實戰4或進群討論
.names檔案 自定義 該檔案中的內容指定了訓練的標籤,如:person,car等,一個標籤佔用一行,示例見:data/coco.names
.data檔案 自定義 該檔案中的內容指示了上述train.tx *.names和模型儲存的位置等,參考cfg/coco.data的內容

詳細修改: 1、修改makefile檔案,makefile檔案一共改4處。 ① 修改開始幾行的內容,如下圖所示 ,0表示否,1表示是,自己根據實際情況設定,建議使用GPU和CUDA 在這裡插入圖片描述 GPU:是否使用GPU? CUDNN:是否開啟CUDA加速? OPENCV:是否使用OpenCV? OPENMP:是否使用攝像頭? DEBUG:是否開啟除錯模式? ②改運算的架構,自己顯示卡支援什麼架構可以自己查詢,按需修改,也可以使用預設值: ③更改NVCC值:23行處,NVCC=nvcc,改為你cuda路徑下的nvcc,實測也可以不改,因人而異。 ④改cuda路徑值:48行處,參考圖如下: 在這裡插入圖片描述 此處的路徑改為你安裝cuda的路徑,一般只需要把cuda換成cuda-9.0或者其他類似,如果安裝過程添加了軟連線,也可以不用修改 2、生成 train.txt

train.txt中的內容為:每一行代表一張訓練圖片的完整路徑,一定要注意一行只能是一張圖片哦,自己寫指令碼生成即可,python推薦函式os.listdir()遍歷一個資料夾的所有檔案,樣本示例如下圖所示: 在這裡插入圖片描述 3、製作標籤資料夾 總原則:每張訓練圖片生成一個以圖片名命名的txt標籤文件,假設有:1.jpg 2.jpg 3.jpg 三張訓練圖片 那你就需要生成1.txt 2.txt 3.txt 這三個標籤文件,同時train.txt中一定是3行內容。標籤文件示例如下圖: 在這裡插入圖片描述 其中每一行表示該圖片中一個矩形框的資訊。以第一行內容舉例: 第一列表示該矩形框中物件的類別索引號,這個類別索引號與.names中的順序有關,從上到下,索引號從0開始 第二列表示該矩形框的中心點的x座標值,第三列表示該矩形框的中心點的y座標值 第四列表示該矩形框的寬度值,第五列表示該矩形框的高度值 注意:第2-5列的值都是歸一化後的值,x和寬度值相對於圖片的寬歸一化,y和高度值相對圖片的高度歸一化 製作標籤文件的程式設計並不複雜,可以參考darknet-master/scripts/voc_label.py 進行簡單修改即可,自己設計也簡單 4、修改.cfg的內容(小重點,前期不難) 說明:作此修改之前強烈建議觀看我的另一期部落格對cfg檔案的說明,否則很多引數說不明白 以修改yolov3.cfg為例,建議備份,以免改錯! 首先修改batch和subdivision的值,參考部落格按需修改 其次改yolo層前一層的卷積核數目★★★,一共改三處,注意是三處,少一處都不行!位置如圖所示: 在這裡插入圖片描述 三處的位置都是在yolo層的上一層描述的地方,具體修改的值根據你資料集的類別數確定,該值為: 3*(類別數+5),比如COCO有80類,則其值為:3*(80+5)=255,注意類別數不包含背景哦。 5、修改.names內容 其為標籤名稱,每一個標籤名稱佔一行,根據自己需要修改,示例圖如下: 在這裡插入圖片描述 6、修改.data內容 先看示例圖: 在這裡插入圖片描述 classes=80 該值表示你資料集的類別數。 train 後面的內容 表示剛才你生成的train.txt的路徑 valid 後面的內容不管 names 後面的內容為剛才生成的.names的路徑 backup 後面的內容為儲存模型的路徑,注意這個路徑一定要存在,沒有資料夾則先新建 eval 後面的內容不關心 ‘#’ 後面的內容表示註釋

注意:標籤文件存放的路徑一定要和訓練圖片的路徑關聯,具體參考我原始碼註釋:data.c中fill_truth_detection函式的說明,一時半會解釋不清楚

在這裡插入圖片描述 二、開始訓練吧,騷年! 訓練之前,由於更改了makefile的內容,先命令列:make clean 再make 訓練命令: ./darknet detector train <.data檔案路徑> <.cfg檔案路徑> <預訓練權重路徑,一般為darknet53.74什麼的那個,官網下載> -gpus 0,1,如: ./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.** -gpus 0,1,2,3 -gpus後面指定所使用的GPU編號 如果不出意外,不,你不可能出意外,你已經踏上了YOLOV3 訓練自己檢測資料集的快船,Come on!老鐵 三、加群交流,重要的事情說三遍

敬請期待YOLOV3常見錯誤總結篇,碼字不易,且行且珍惜!