论文精读
- 摘要
- 精读
- YOLOV3结构解析
- 特征图
- 先验眶
- 置信度与类别解码
- 训练策略与损失函数
- 关键点与创新点
摘要
-
V3比之前版本更大但更精确
-
与SSD一样精确但比SSD快3倍
-
用Titan X 实现57.9AP,用时51ms
-
比RetinaNet快3.8倍
精读
YOLOV3结构解析
-
卷积层:通过调整卷积步长控制输出特征图的尺寸.所以对输入图片没有特别的限制
-
金字塔特征图:小尺寸特征图用于检测大物体,大尺度特征图检测小物体
-
借鉴Resnet:将输入的特征图与输出特征图对应维度进行相加
-
借鉴DenseNet:将特征图按照通道维度直接进行拼接
特征图
-
每个特征图的格子中,都配置3个不同的先验眶,所以最后三个特征图,这里reshape为8X8X3X85,16X16X3X85,32X32X3X85
-
检测框位置(4维),检测置信度(1维),类别(80维),加起来正好85维
先验眶
-
V3沿用了V2中关于先验眶的技巧,并用kmeans对数据集中的标签框进行聚类,得到类别中心点的9个框,作为先验眶.
-
有了先验框与输出图,就可以解码检测狂框x,y,w,h.
置信度与类别解码
-
置信度在输出85维中固定一位,由sigmoid函数解码即可,解码后数值区间在[0,1]中
-
COCO数据集有80个类别,所以类别数在85维输出中占了80维,每一维独立代表一个类别的置信度。使用sigmaid激活函数替代了Yolov2中的softmax,取消了类别之间的互斥,可以使网络更加灵活。
-
三个特征图一共可以解码出8x8x3+16x16x3+32x32 x3=40322个box以及相应的类别、置信度。这4032个box,在训练和推理时,使用方法不一样:训练时4032个box全部送入打标签函数,进行后一步的标签以及损失函数的计算。推理时,选取一个置信度阈值,过滤掉低阈值box,再经过nms(非极大值抑制),就可以输出整个网络的预测结果了。
训练策略与损失函数
- 预测框:正例(positive)、负例(negative)忽略样例(ignore)先验框数量:
- 416输入:10647个
- 256输入:4032个
- 正例:取一个ground truth,与4032个框全部计算I0U,最大的为正例。正例产生置信度loss、检测框loss、类别loss。ground truth box为对应的预测框的标签。
- 负例:与全部groundtruth的I0U都小于阈值(0.5),则为负例。负例只有分类置信度产生loss,分类标签为0,边框回归不产生loss。
- 忽略样例:正例除外,与任意一个groundtruth的I0U大于阈值(论文中使用0.5),则为忽略样例。忽略样例不产生任何loss。
- x、y、w、h使用MSE作为损失函数,也可以使用smooth Ll loss
- 分类损失使用二元交叉熵
关键点与创新点
- 特征图解码
- 快速高效的检测方式
- 结合检测与识别为一体
- 3个尺度的特征图
- 置信度与类别解码