YOLOv3訓練自己的數據(GPU版本)

1、下載工程

兩種方式:

1.1 通過git克隆

    git clone https://github.com/pjreddie/darknet.git

1.2 到GitHub上直接下載

    有時候服務器上內網限制,克隆不下來,不知道原因是啥,有可能是公司內網限制了,本人通過這種方式下載的工程

    https://github.com/pjreddie/darknet

2、編譯工程

    解壓工程

    改配置文件:

    我想要GPU支持的版本,所以在編譯工程前需要先修改Makefile文件,根據自己需求改,GPU版本的將GPU=1,CPU版本的設置成GPU=0


編譯:    

cd darknet-master/

make

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

make clean

make

 最終成功的信號,編譯後出現下列信息(從官網上覆制的,我自己的界面沒保存下來)

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm.... 

3、準備數據

第一步:labels製作

    yolov2的數據分爲兩部分:labels 文件夾和圖片文件夾,labels裏存放的是對應圖片的目標信息,一張圖片對應一個.txt目標信息文件。labels文件夾和圖片文件夾必須放在同一目錄下。


    但是我發現yolov3好像略有不同,每張圖片的labels文件必須和圖片放在同一目錄下。像下圖這樣。(至少我是隻有這樣存放才成功跑起來,還有沒有其他辦法不確定)


   標註文件.txt裏的數據格式是這樣的:


具體的每一個值的計算方式是這樣的:假設一個標註的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結果裏的順序


第二步:

劃分訓練數據和測試數據:

我將標註數據集裏的80%作爲訓練數據集,20%作爲驗證數據集

分別將它們的圖片的路徑存放到train.txt和val.txt文件中,這兩個文件的路徑沒有嚴格要求,放在任意自己覺得舒服的位置,後面在工程的.data文件中指定這兩個文件的路徑就好。


裏面的格式如下所示,每行存放一張圖片的絕對路徑,爲了安全可見,我圖片的絕對路徑中間一部分我馬賽克了


4、編輯cfg/XX.data 文件(XX按自己的需求自取名字),在訓練時工程來這個文件中找到訓練數據和驗證數據的路徑

classes= 1
train  = <path-to-voc>/train.txt
valid  = <path-to-voc>2007_test.txt
names = data/voc.names
backup = backup

classes:類別數

train:前面說的訓練數據train.txt的路徑

valid:前面說的驗證數據val.txt的路徑

names:指向存放類別名的文件,自己訓練數據的類別名就放到這個指定的文件中,自己新建一個.names文件,一行放一個類名

backu:模型存放的路徑


5、更改模型的參數配置文件

    如果是訓練模型需要修改下列這些地方:

    1)把Training的參數設置打開,Testing的參數設置關閉

                                                                                                                               

   2)改所有yolo層前一層filters大小,即最後一層卷積層,計算公式在論文中有提到過,N爲卷積核的size(不確定),3是mask的參數,4表示四個參數(預測boundingbox的:x,y,w,h),1表示置信度

我有一個類別,size爲1,所以:1*1*[3*(4+1+1)]=18


3)改yolo層的classes數

2)、3)總的需要改3的地方

5、跑模型

我認爲應該像這樣啓動訓練過程,但是報錯

 ./darknet detector train cfg/dog.data cfg/dog.cfg backup/dog.backup -gpu 0


只有不指定模型存放路徑和模型名字纔不報錯,能跑起來,

./darknet detector train cfg/pigface_front.data cfg/pigface_front.cfg

即使跑起來,後面還是遇到了其他問題,繼續解決中

。。。。。還在努力中

6、踩到的坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章