本人小白,文章对YOLOV3用于危险品测试的代码(基于keras)进行简单解读与记录,最后实现了简单的检测测试。
1.代码整体结构

2.关键文件功能
2.1front文件夹
字体设置文件
2.2goods-train文件夹

yolov3.h5:权值文件
yolov3-voc.cfg:构建yolov3检测模型的整个超参文件,从零训练不需要修改,预训练好的权重训练需要修改,以下为修改步骤。
ctrl+f搜yolo,共3出需要修改:
- filters: 3*(5+len(classes))
- classes: len(classes) = x,x为识别种类个数
- random:原来是1,显存小改为0
yolov3-voc_final.weights:训练生成的权重文件,需要和cfg用convert.py转换成.h5文件方可使用
2.3yolo3文件夹

其中model.py对YOLOV3的模型进行封装,utils.py在模型训练进行数据处理工具文件。
2.4其他py文件
convert.py:用于将darknet下训练的权重转化为keras权重使用
mian.py:加载gui界面测试图片
train.py:训练yolo模型并保存权重
voc_annotation.py:训练时调用,将xml标签文件生成txt文件方便后续处理,txt文件用作kmeans.py输入进行聚类生成anchors
yolo.py:用于融合所有组件生成yolo类,包含一些方法如anchor文件位置、类别文件位置、score阈值、IOU阈值、输入图像尺寸、gpu数量
yolo_camera.py:创建YOLO类,调用摄像头进行检测测试
python yolo_camera-net.py:调用网络摄像头识别
python yolo_video.py:视频检测, 视频存在video文件夹下面
yolo_image.py:测试,图片检测
yolo_video.py:测试,视频检测
3.测试实现
环境:win10+pycharm+keras2.1.5+tensorflow1.13.1
3.1预训练模型
如果是coco检测则需要下载权重文件yolov3.weights并用convert.py将其转换成.h5文件。本文直接加载goods-train下的yolov3.h5以及model_data下anchors与classes进行测试。其中anchors为yolo的9个anchors,由作者在voc数据集上聚类得到anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326。按顺序从小到大,后面每三组调用分别对于yolo三个尺度特征。classes为数据集类。
3.2测试
mian.py可以直接使用GUI界面进行图片与摄像头的检测
yolo_image.py需要将测试图片放在images文件夹下,结果生成到result文件夹,测试结果:

这两张图看上去还不错,但仍然有改进的地方,比如nms算法阈值设置,以及使用的anchors直接是voc数据集聚类而来的9个anchors,对于危险品数据集不一定很适用,在危险品数据集上重新聚类效果可能会更好。上文只是对yolo代码的简单解读以及测试,下一篇文章将记录如何用yolov3训练自己的数据集。yolov3实现训练自己数据集