YOLOv1 https://blog.csdn.net/xue_csdn/article/details/105949984
YOLOv2 https://blog.csdn.net/xue_csdn/article/details/105950349
YOLOv3相对于v1和v2的改进之处:
- backbone变为darknet-53
- output:多尺度预测
- softmax变为logistic classifiers
1、backbone结构
YOLOv3的backbone是darknet-53,利用53个卷积层(其实是52个,作者可能是把最后的全连接层也包含进去)
- darknet-53最大的改进是增加了5个Residual块,即利用了ResNet原理
- 下采样。在YOLOv2中通过max pooling使输入从416×416缩小32倍到13×13,而在YOLOv3中没有max pooling,利用卷积的stride=2来实现,同样缩小32倍,所以输入需要是32的倍数。
- 输入是256×256×3
2、输出
(图的来源:https://blog.csdn.net/leviopku/article/details/82660381)
也就是论文中的跨尺度预测Predictions Across Scales。借鉴了特征金字塔网络FPN(feature pyramid networks),用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体。y1,y2和y3的深度都是255,边长的规律是13:26:52
YOLOv3 提供了 3 种不同尺寸的边界框(其实就是每个cell对应3种不同大小的bbox来预测),系统用这种思想提取这些尺寸的特征,以形成金字塔形网络(pyramid network)。在基本特征提取器中增加了几个卷积层,并用最后的卷积层预测一个三维张量编码bbox,对象和类别。COCO数据集下,得到的张量为:N*N*[3*(4+1+80)],4个边界框偏移量,1个目标性预测和80个类别预测。
v3用上采样的方法来实现这种多尺度的feature map,可以结合图1和图2右边来看,图1中concat连接的两个张量是具有一样尺度的(两处拼接分别是26x26尺度拼接和52x52尺度拼接,通过(2, 2)上采样来保证concat拼接的张量尺度相同)。作者并没有像SSD那样直接采用backbone中间层的处理结果作为feature map的输出,而是和后面网络层的上采样结果进行一个拼接之后的处理结果作为feature map。为什么这么做呢? 我感觉是有点玄学在里面,一方面避免和其他算法做法重合,另一方面这也许是试验之后并且结果证明更好的选择,再者有可能就是因为这么做比较节省模型size的。这点的数学原理不用去管,知道作者是这么做的就对了。
3、分类预测Class Prediction
每个边界框都会使用多标记分类来预测框中可能包含的类。本论文用独立的逻辑分类器代替softmax,在训练过程中,我们用二元交叉熵损失来预测类别。
这个方法有助于我们把YOLO用于更复杂的领域,如Open Images Dataset 。这个数据集中包含了大量重叠的标签(如女性和人)。如果我们用的是softmax,它会强加一个假设,使得每个框只包含一个类别,但通常情况下这样做是不妥的。多标记的分类方法能更好地模拟数据。
4、 bbox预测Bounding Box Prediction
和YOLOv2一样,采用尺度聚类作为anchor box来预测bbox
在训练期间 利用均方和误差,如果预测坐标的ground truth是tˆ,那相应的梯度就是ground truth值和预测值的差:tˆ-t*
因此ground truth值很容易被求出。
YOLOv3用逻辑回归预测每个边界框的objectness score。如果当前预测的bbox比之前的更好地与ground truth对象重合,那objectness score就是1。如果当前的预测不是最好的,但它和ground truth对象重合超过一定阈值(应该是IOU的值),神经网络会忽视这个预测。这个阈值设为0.5。每个ground truth对象分配一个bbox,如果bbox并未分配给ground truth对象,那它只是检测错了对象,而不会对坐标或分类预测造成影响。
(未完......)
参考:https://blog.csdn.net/leviopku/article/details/82660381
https://zhuanlan.zhihu.com/p/49556105