使用YOLOV3-tiny训练行人检测器并移植到树莓派4B上实现

说明

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)*

修改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,就训练成功了

测试

训练的差不多,可以测试一下,能够显示运行时间,保存检测后的图
使用YOLOV3-tiny训练行人检测器并移植到树莓派4B上实现_第1张图片

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,结果还不错

树莓派上测试

将权重文件直接复制到树莓派上,和训练时一样修改好各文件,就可以实现行人检测。
使用YOLOV3-tiny训练行人检测器并移植到树莓派4B上实现_第2张图片

你可能感兴趣的:(树莓派,python)