環境配置如下:
系統配置 | 命令 |
---|---|
Ubuntu:18.04 | cat /etc/issue |
python:2.7.15 | python |
OpenCV:3.2.0 | pkg-config --modversion opencv |
實現命令如下:
Yolov3的原理另一篇博客中有所介紹,這裏大致列下實現流程以及訓練自己數據集過程:
一、跑官方demo
- 下載darknet,也就是YOLO:
git clone https://github.com/pjreddie/darknet
cd darknet
make
make成功後會顯示如下信息:
make前後對應的工程文件夾下的內容也有所不同:
- 編譯完成之後,執行darknet
- 下載預訓練模型(yolov3.weights)
wget https://pjreddie.com/media/files/yolov3.weights - 運行demo
./darknet detect cfg/yolov3.cfg backup/yolov3.weights data/dog.jpg
效果圖:
二、訓練自己的數據集
1.由於使用的無GPU版本,第一步所有的makefile文件配置全部忽略。
2.創建數據集文件目錄:
在/home/mtd/work_project/darknet/data目錄下新建文件夾MyData,在該文件夾新建如下三個文件夾:
Annotations—存放所有訓練圖片對應的xml文件
ImageSets—在該文件夾下新建Main文件夾,然後在Main下創建兩個.txt文件(存放圖片的名稱,不帶後綴),分別爲train.txt(訓練集)和val.txt(驗證集)
這兩個txt文件中的圖片名可以通過如下python代碼Write_ImgName.py生成,注意代碼中的文件路徑,文件路徑不能爲中文,有中文存在編譯會報錯。
JPEGImages—存放所有的訓練圖片
Write_ImgName.py代碼如下:
import os
from os import listdir,getcwd
from os.path import join
if __name__=='__main__':
source_folder='/home/.../darknet/data/MyData/JPEGImages'
dest='/home/.../darknet/data/MyData/ImageSets/Main/train.txt'
dest2='/home/.../darknet/data/MyData/ImageSets/Main/val.txt'
file_list=os.listdir(source_folder)
train_file=open(dest,'a')
val_file=open(dest2,'a')
for file_obj in file_list:
file_path=os.path.join(source_folder,file_obj)
file_name,file_extend=os.path.splitext(file_obj)
file_num=int(file_name)
if(file_num<40):
train_file.write(file_name+'\n')
else:
val_file.write(file_name+'\n')
train_file.close()
val_file.close()
print('Finishing')
- 生成2.中對應的train.txt和val.txt,可通過上述python腳本生成:
- 運行voc_label.py生成2019_train.txt和2019_val.txt這兩個文件。
- 下載與訓練權重:
wget https://pjreddie.com/media/files/darknet53.conv.74 - 整理所有文件到對應的地方:
其實最終需要的文件只有*.jpg/.txt/2019_train.txt/2019_val.txt/darknet53.conv.74
在mytrain文件夾下新建文件夾obj和weights:
obj—存放.jpg和*.txt
weights—存放訓練後的權重文件
7.修改對應文件
(1) ./data/voc.names:
每一行對應一種類型,根據自己的情況自行修改
(2) 修改cfg/voc.data:
其中的classes/train/valid等根據自己的具體情況進行修改。
(3) cfg/yolov3-voc.cfg
下面三處也需要修改:
8.開始訓練
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 | tee train_yolov3-voc.log(linux下 保存訓練日誌log)
9、對訓練模型進行測試
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_200.weights voc/0002.jpg
yolov3-voc_200.weights: 表示訓練出來的權重文件
voc/0002.jpg: 表示測試圖片的路徑
10、生成預測結果
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights result
結果生成在results文件夾下
11、計算召回率(recall)
./darknet detector recall cfg/voc.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights