1. 程式人生 > >yoloV3一步步訓練自己的數據

yoloV3一步步訓練自己的數據

圖片 cto file 目錄 好的 下載 ima 配置 自動

YOLOV3的主頁:

https://pjreddie.com/darknet/yolo/

運行主頁上的代碼得到:

技術分享圖片

首先使用一個開源的神經網絡框架Darknet,使用C和CUDA,有CPU和GPU兩種模式。

技術分享圖片

1、下載darknet

編輯Makefile文件:

技術分享圖片

2、編譯:

make

如果遇到缺失包報錯,將缺失的包裝上去以後重新編譯,重復下列兩個操作,直到所有包都裝好

make clean

make

安裝好DarkNet之後,在darknet的子目錄cfg/下已經有了一些網絡模型的配置文件,在使用之前,需要下載好預訓練好的權重文件yolo.weights(1.0 GB).

如果運行paper中的代碼,則下載yolov3.weights後,運行以下命令就可以檢測:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

或者這個命令
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
如果想檢測多張圖片,需要預先載入預訓練的模型:
技術分享圖片

3、數據制作

制作VOC數據集:

技術分享圖片

根據上面的鏈接下載數據,得到

技術分享圖片

具體的每一個值的計算方式是這樣的:假設一個標註的boundingbox的左下角和右上角坐標分別為(x1,y1)(x2,y2),圖像的寬和高分別為w,h

技術分享圖片

歸一化的中心點x坐標計算公式:((x2+x1) / 2.0)/ w

歸一化的中心點y坐標計算公式:((y2+y1) / 2.0)/ h

歸一化的目標框寬度的計算公式: (x2-x1) / w

歸一化的目標框高度計算公式:((y2-y1)/ h

如果圖片的高度、寬度未知,可以通過cv2讀取。

imginfo = cv2.imread(img_dir + img_name + ‘.jpg‘).shape

imginfo裏存的是圖像的[h, w,通道數] ,這一需要註意imginfo結果裏的順序

可以使用voc_label.py自動獲取標簽集合。

技術分享圖片

總共20個類,運行以上腳本,得到了訓練集的路徑名稱和對應的標簽。

這個腳本主要是將訓練集的路徑寫到test.txt中,並將xml中的label設置成訓練需要的格式。

構建訓練集:

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

構建好數據集,修改cfg/voc.data
技術分享圖片

train指定訓練集的路徑,valid指定測試集的路徑,names的文件中指定了該數據集標註的檢測的類別,內容為:

技術分享圖片

下載darknet53作為預訓練的模型:

wget https://pjreddie.com/media/files/darknet53.conv.74
訓練模型:
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
如果想使用多GPU,則使用以下的命令:
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3
如果想暫停訓練,並且從斷點開始訓練則:
./darknet detector train cfg/coco.data cfg/yolov3.cfg backup/yolov3.backup -gpus 0,1,2,3
技術分享圖片
其中 cfg/yolov3-voc.cfg設置了網絡的結構
總結——使用自己的數據訓練yolo模型:
1、下載數據集制作數據訓練集的格式train.txt(或者自己寫下載數據集的腳本)
技術分享圖片
測試數據集:
技術分享圖片

標簽數據集:

技術分享圖片

技術分享圖片

2、設置cfg/xxx.data,檢測的類別數,訓練集路徑,測試集路徑,檢測類別

3、修改cfg模型設置:

技術分享圖片

3、下載預訓練的模型,並且訓練

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

yoloV3一步步訓練自己的數據