YOLOv3: An Incremental Improvement 整体介绍及部分细节讲解(部分基于飞桨课程)
本篇笔记部分基于飞桨课程:https://aistudio.baidu.com/aistudio/education/group/info/1297
一、整体总结
yolov3网络输出分候选框回归、objectness(是否有目标)检测、候选框内物体类别三部分。
其中候选框回归部分的损失采用的是平方误差损失的和,objectness检测采用的是logistic regression,类别检测采用的是logistic分类器,训练时用的binary cross-entropy loss。
主要就是快(不是两阶段的,而且用了Darknet,没用ResNet),同时效果也还ok。
yolov3的网络结构如图。
二、论文笔记
- 候选框回归与RCNN系列相似。如果想要了解原理可以看一文读懂Faster RCNN的2.4节bounding box regression原理。
其中是网络输出,用于矫正候选框,分别是候选框中心点坐标(左上角为(0,0))和候选框宽高。 - 采用平方误差损失的和作为候选框回归的损失
- 候选框回归梯度计算公式:
- 用logistic regression为每个bounding box预测objectness score(是否包含物体)
A. 一个bouding box prior比其他bounding box prior与真值目标之间的重叠都大,那么该bounding box的objectness score为1。
B. 某个框与真值框重叠大于阈值,但不是最好的框,那么忽略该框的预测,其中阈值threshold为0.5.
C. 每个真值框只对应一个bounding box prior,如果一个bounding box prior没有对应真值目标,那么该框就不算入候选框回归和分类的损失,只算入objectness损失。 - 类别预测部分采用独立的logistic分类(针对multilabel的情况,也就是有多个label,比如woman和person的情况,不采用softmax),训练过程中,用binary cross-entropy loss。
- 用了类似特征金字塔的结构来预测3个不同尺度(大、中、小)的框。
- 特征提取器后加了几个conv层,最后一层输出3-d tensor,这个张量包括boudingbox回归结果、objectness和类别预测。以COCO为例,每个尺度预测3个框,所以输出tensor大小为,4个bounding box回归结果,1个objectness结果,80个类别预测结果。
- yolov3的结构大概如图所示。将2层之前的特征图做2x的上采样,同时取网络之前的更早的特征图,用连接的方式将其与上采样特征进行融合。这样让我们能够从上采样特征中得到更有意义的语义信息,同时从更早的特征图中获取细粒度的信息。之后加了一些conv层来处理这个融合的特征图,之后预测了一个相似的3-d tensor,不过尺度扩大了一倍。之后再采用一遍以上操作来得到最大尺度的结果。
- 采用k-means聚类的方式来决定bounding box prior。将所有图片中真值框大小做聚类,最后聚出了9个簇,这9个簇,之后将这9个簇平均分在3个尺度上。在COCO数据集上,这9个簇分别是。
- 特征提取器:Darknet-53(因为有53层conv)。结构如图。这个结构比Darknet-19要更强大,同时还比ResNet101和152效率高。
- 每个网络训练时设置都相同,测试时是。????
- 训练时在整张图像上训练,且没有采用hard negative mining之类的处理。采用了多尺度训练、数据增强、批归一化等标准的处理。用Darknet框架训练和测试。
- yolov3检测小目标的水平提高了,但是在检测中尺度和大尺度目标上效果仍不是很好。
- 作者认为目标框的定位不是很重要,能定位就行,为目标框分类比较重要。VOC中IoU阈值被故意设置的很低,从而考虑了真值数据的目标框的不准确性(可能标错)。COCO数据集的候选框画的更好了,但是降低了分类准确率(我认为作者说这些主要是因为yolov3的AP在COCO指标上不是很好)。
后记:
这篇论文写的十分俏皮加随意。
大概这就是大佬吧。
如果是一个学术界的没有名气的小白这么发论文,估计早就被reject了。