浅析YOLO V3
YOLO V3: An Incremental Improvement
作者:Joseph Redmon and Ali Farhadi
单位:University of Washington
发表会议及时间:TECH REPORT 2018
一 目标检测任务及发展脉络
基于深度神经网络的目标检测
- 双阶段(two-stage):第一级网络用于
候选区域提取
;第二级网络用于对提取的候选区域进行分类和精确坐标回归
,例如RCNN系列。 - 单阶段(one-stage):摒弃了候选区域提取这一步骤,只用一级网络就完成了分类和回归两个任务,例如YOLO和SSD
- Anchor Free:取消anchor生成机制,加快了速度,代表算法:CenterNet CornerNet Fcos等
二 YOLO的发展历史
- 创造性的将识别和定位合二为一
- 由于其检测速度极快,在实际应用中十分受欢迎
三 YOLO的原理
- 一次性输出所有检测到的目标信息,包括类别和位置
- 一个区域浓缩为一个多维度的点(1X1XN维)
- 每个1X1的点生成3个锚框anchor(或者其他值)
- 综合所有锚框,与标签进行比较,计算loss
每个1X1的格子都预测出B个boundingBox,这个boundingBox都有5个量,分别是:框的中心位置和他的高和宽,以及是否有目标的置信度,每个框还要负责预测这个框中的物体是什么类别
例如:
如果我们有SXS个框,每个框的bbox有B个,分类器可以识别出C中不同的物体,那么整个维度就是:
SXSX(BX(5+C))
四 核心点
- YOLOV3比之前版本更大但更精确
- 和SSD一样精确但比SSD快3倍
- 用TitranX时实现57.9AP,用时51ms
- 比RetinaNet快3.8倍
大尺度用来检测小目标,以为感受野比较小,小尺度用来检测大目标
YOLOV3 的主干网络
DarkNet53,如下图。
DarkNet53处理速度每秒78张图,比DarkNet19慢不少,但是比同精度的ResNet快很多
网络结构解析
- 只有卷积层:通过调节卷积步长控制输出特征图尺寸,所以对于输入图片尺寸没有特别限制。
- 金字塔特征图:小尺寸特征图用于检测大尺寸物体,而大尺寸特征图用于检测小尺寸物体
- 借鉴ResNet:将输入的特征图,与输出特征图对应维度进行相加
- 借鉴DenseNet:将特征图按照通道维度直接进行拼接
YOLO输出特征图解码
- 根据不同的输入尺寸,会得到不同大小的输出特征图
- 每个特征图的每个格子中,都配置3个不同的先验框,所以最后三个特征图,这里reshape为
8X8X3X(5+80)
,16X16X3X(5+80)
,32X32X3X(5+80)
- 检测框位置4维,检测置信度1维,类别80维都在其中,加起来正好85维
先验框
YOLOV3沿用了V2中关于先验框的技巧,并且使用k-means对数据集中的标签框进行聚类,得到类别中心点的9个框,作为先验框
有了先验框与输出特征图,就可以接码检测框X,Y,W,H
置信度和类别
- 置信度在输出85维中占固定一位,有sigmode函数解码,解码之后数值区间在[0,1]中
- COCO数据集有80个类别,所以类别数在85维占了80维,每一维独立代表一个类别的置信度,使用sigmode激活函数替代了YOLOV2中的SoftMax,取消类别之间的互斥,可以使网络更加灵活。
- 三个特征图一共可以解码出8 × 8 × 3 + 16 × 16 × 3 + 32 × 32 × 3 = 4032 个box以及 相应的类别、置信度。这4032个box,在训练和推理时,使用方法不一样:
- 训练时4032个box全部送入大标签函数,进行后一步的标签以及损失函数的计算
- 推理时,选取一个置信度域值,过滤掉低域值的box,再经过nms(非极大值抑制),就可以输出整个网络的预测结果了
训练策略
- 预测框:正例、负例、忽略样例子
- 正例:取一个ground truth,与4032个框全部计算IOU,最大的为正例 ,正例产生置信度loss、检测框loss、类别loss。ground truth box为对应的预测框的标 签。
- 负例:与全部ground truth的IOU都小于阈值(0.5),则为负例。负例只有分类 置信度产生loss,分类标签为0,边框回归不产生loss。
- 忽略样例:正例除外,与任意一个ground truth的IOU大于阈值(论文中使用 0.5),则为忽略样例。忽略样例不产生任何loss。