“ 作为目标检测的鸿篇巨制YOLOV3,用来做安全帽检测非常合适”
01
—
Yolov3简介
Yolo_v3使用了darknet-53的前面的52层(没有全连接层),yolo_v3这个网络是一个全卷积网络,大量使用残差的跳层连接,并且为了降低池化带来的梯度负面效果,作者直接摒弃了POOLing,用conv的stride来实现降采样。在这个网络结构中,使用的是步长为2的卷积来进行降采样。为了加强算法对小目标检测的精确度,YOLO v3中采用类似FPN的upsample和融合做法(最后融合了3个scale,其他两个scale的大小分别是26×26和52×52),在多个scale的feature map上做检测。作者在3条预测支路采用的也是全卷积的结构,其中最后一个卷积层的卷积核个数是255,是针对COCO数据集的80类:3*(80+4+1)=255,3表示一个grid cell包含3个bounding box,4表示框的4个坐标信息,1表示objectness score。
具体的网络结构介绍可以参见:
https://blog.csdn.net/litt1e/article/details/88907542
model.summary()可以看到整个参数大小
02
—
数据集介绍
关于安全帽的数据集,可以通过网络爬取,也可以通过其他途径获取,剩下的就是数据打标了,这是一个体力活,具体的打标教程网上也可以找到很多,基本都是LabelImg,具体可以参见:
https://www.jianshu.com/p/ff99d430150f
我这边使用的数据集是已经打标好了的
03
—
训练集和测试集的制作
Yolov3使用的数据集格式是遵循VOC数据集的格式,所以需要根据如下目录做好训练集和测试集
关于两个数据集的目录,可以手工创建,也可以通过脚本来进行创建
import os
from shutil import copyfile
#根据tarin.txt和test.txt将数据集分为标准数据集
train_text_path = '/home/test/Lewis_Workspace/VOC2028/ImageSets/Main/train.txt'
test_text_path = '/home/test/Lewis_Workspace/VOC2028/ImageSets/Main/test.txt'
#图片存放地址
image_path = '/home/test/Lewis_Workspace/VOC2028/JPEGImages'
#xml文件存放地址
xml_path = '/home/test/Lewis_Workspace/VOC2028/Annotations'
#输出的目录
outdir = '/home/test/Lewis_Workspace/VOC2028'
#创建各级文件夹
test_xml_out = os.path.join(outdir,'VOC/test/VOCdevkit/VOC2028/Annotations')
os.makedirs(test_xml_out)
os.makedirs(os.path.join(outdir,'VOC/test/VOCdevkit/VOC2028/ImageSets/Layout'))
os.makedirs(os.path.join(outdir,'VOC/test/VOCdevkit/VOC2028/ImageSets/Main'))
os.makedirs(os.path.join(outdir,'VOC/test/VOCd