說明
1.這篇文章是在我上篇文章的基礎上繼續往下做,上篇博客,上篇博客在樹莓派4B上實現了目標檢測,這篇文章將實現在筆記本上行人檢測權重,再放到樹莓派裏面。
2.我的筆記本配置系統Ubuntu16.04+cuda8.0+cudnn5.1
硬件7代cpu,顯卡gtx1050,
3. 一共訓練30000次,訓練速度很快,10000次只要半小時左右就完成了,測試檢測結果很好
4.參考 https://github.com/pascal1129/yolo_person_detect
1. 下載YOLO
git clone https://github.com/AlexeyAB/darknet.git
cd darknet/
wget https://pjreddie.com/media/files/yolov3-tiny.weights
權重文件直接下載速度挺慢,可以使用迅雷打開鏈接下載。
我下載了所有權重文件放在百度網盤了,需要的可以根據需要下載
鏈接:https://pan.baidu.com/s/18UCY-6-J9-SBOHCPZLvuAA
提取碼:dhp6
編譯測試
爲了使用GPU修改makefile文件,修改開頭兩行如下,我沒有裝opencv,裝了的可以按照自己配置設置參數,opencv就是將檢測結果顯示出來,沒裝就會保存到目錄下,手動查看。
GPU=1
CUDNN=1
運行測試
sudo ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
行人檢測訓練
製作數據集
使用voc2007和voc2012數據集,也可以只用一個。
下載地址,官網很慢,推薦複製鏡像站鏈接,去迅雷下載,速度很快。
官網: http://host.robots.ox.ac.uk/pascal/VOC/
鏡像站:https://pjreddie.com/projects/pascal-voc-dataset-mirror/
行人檢測就要抽取數據集中所有的人組成新的數據集,已經有人寫好所有制作的Python文件。
git clone https://github.com/pascal1129/yolo_person_detect.git
下載完畢可以放在darknet目錄下。
我使用的是voc2007和voc2012數據集,如圖,就將數據集的vocdevkit文件放在這個位置
分別運行2007和2012抽取行人的代碼,再運行voc_lable,py,轉換成YOLO支持的格式
生成三個txt文件,裏面存放的是數據集的地址。
是訓練之後轉移到樹莓派上,可以不需要測試集
cat 2007_train.txt 2012_train.txt > train.txt
數據集製作完畢
修改yolov3-tiny文件
在cfg目錄下可以找到yolov3-tiny.cfg,打開修改
batch, sub按需修改
一共二個YOLO層,均需要修改:
classes=1
filters=18 3*(1+1+4)=18
# filters=(classes + coords + 1)*<number of mask>
修改voc.names
在date目錄下找到voc.name
person
配置cfg/voc.data
將裏面的路徑改成自己數據集所在位置,這是我的
classes= 1
train = /home/hua/darknet/yolo_person_detect-master/make_yolo_dataset/YOLO_VOC2007_2012/train.txt
valid = /home/hua/darknet/yolo_person_detect-master/make_yolo_dataset/YOLO_VOC2007_2012/2007_test.txt
names = data/voc.names
backup = /home/hua/darknet/backup/
在darknet裏面新建一個backup文件夾,用來存放訓練好的權重
都改完之後,make
訓練
首先下載一個預訓練的權重,tiny版使用的是yolov3-tiny.conv.15
wget https://pjreddie.com/media/files/yolov3-tiny.conv.15
下載很慢,我下載了放在網盤裏,需要的自取
啓動訓練
sudo ./darknet detector train cfg/voc.data cfg/yolov3-tiny.cfg yolov3-tiny.conv.15 -gpus 0
每訓練1000次保存一個權重,在backup目錄
可以隨時停止,下一次訓練可以繼續
只要將上面的預訓練權重換成生成的權重就可以繼續訓練
訓練過程不出現大量的nan,就訓練成功了
測試
訓練的差不多,可以測試一下,能夠顯示運行時間,保存檢測後的圖
sudo ./darknet detector test cfg/voc.data cfg/yolov3-tiny.cfg backup/yolov3-tiny_last.weights data/person.jpg
我的測試結果
計算map和recall
sudo ./darknet detector map cfg/voc.data cfg/yolov3-tiny.cfg backup/yolov3-voc_last.weights
sudo ./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
我訓練了30000次,測試的map爲70.68,結果還不錯
樹莓派上測試
將權重文件直接複製到樹莓派上,和訓練時一樣修改好各文件,就可以實現行人檢測。