yoloV3一步步訓練自己的數據
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一步步訓練自己的數據