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、踩到的坑