YOLO v3
代码链接:https://github.com/qqwweee/keras-yolo3/
- Yolo-V3-Model(pytorch版本)
《YOLOv3-An Incremental Improvement》
—基于卷积神经网络的目标检测算法
作者:Joseph Redmon ,Ali Farhadi
单位:华盛顿大学
发表会议及时间:arXiv 2018
Submission history
From: Joseph Redmon [view email]
[v1] Sun, 8 Apr 2018 22:27:57 UTC (6,822 KB)
与之前的yolo网络的变化:
缺点:
1.网络变大
2.速度变慢
优点:
3.精度变高
一 论文导读
- Abstract
We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that’s pretty swell. It’s a little bigger than last time but more accurate. It’s still fast though, don’t worry. At 320x320 YOLOv3 runs in 22 ms at 28.2 mAP, as accurate as SSD but three times faster. When we look at the old .5 IOU mAP detection metric YOLOv3 is quite good. It achieves 57.9 mAP@50 in 51 ms on a Titan X, compared to 57.5 mAP@50 in 198 ms by RetinaNet, similar performance but 3.8x faster. As always, all the code is online at this https URL
主要改进
- 1.最大的改进就是网络结构,使其更适合小目标检测
- 2.特征做的更细致,融入多持续特征图信息来预测不同规格物体
- 3.丰富先验框,3种scale,每种3个规格,一共9种
- 4.softmax改进,预测多标签任务
多尺度(不同的尺度,来预测不同大小的物体)
尺度变换的经典方法
- 图像金字塔
二 论文精读
先验框
使用k-means++
算法产生先验框(yolov3默认的聚类中心有9个,每个尺度3个)
初始K值的选择:随机在label boxes中选取K个框
距离度量:d=1-iou (iou在0-1之间)
目标:通过不断更新中心值,使d值最小
按照框大小分为3组每组三个框
13*13
的尺度使用大框,相当于把图片隐式分为了13*13
的gride cell26*26
的尺度使用中框,相当于把图片隐式分为了26*26
的gride cell52*52
的尺度使用小框,相当于把图片隐式分为了52*52
的gride cell
网络结构
对于voc数据集合20类
13*13
尺度预测输出:13*13*75
26*26
尺度预测输出:26*26*75
52*52
尺度预测输出:52*52*75
yolov1预测信息为
7*7*30
yolov3预测信息为13*13*75 + 26*26*75 + 52*52*75
损失函数
三 代码实现
代码链接:https://github.com/qqwweee/keras-yolo3/
- Bounding Box Prediction:
坐标点回归方式
逻辑回归预测confidence - Class Prediction
使用逻辑回归来预测类别 - Predictions Across Scales
多尺度预测 - Feature Extractor
darkennt53 - Training
多尺寸训练数据增强batch normalization
- 用线性激活将坐标x、y的偏移程度预测为边界框宽度或高度的倍数
- 使用线性激活来直接预测x,y的offset
- focal loss
- 借鉴faster rcnn使用负例
- yolov3网络训练
第一阶段预训练Darknent- 53
第二阶段训练整个检测网络
然后使用预训练的权重初始化检测网络的部分权重,操作与yolov1基本相同。
在实际工程中可以尝试两种方法
一种是预训练分类网络,然后在训练检测网络
另一种是直接训练检测网络(需要有大量的数据)
效果一般是经过预训练这种方法会更好。
四 问题思索
- 先验框如何得到
- groud truth 乘以的尺度是多少
- yolov3的损失函数
- label如何制作出来的