project page: https://pjreddie.com/darknet/yolo/
arxiv: https://arxiv.org/abs/1804.02767
github:https://github.com/pjreddie/darknet
从上边的图片中就可以看出,YOLO v3最主要的提升网络的就算速度。YOLOv3能在22毫秒内完成处理,并取得28.2mAP的成绩。它的精度和SSD相当,但速度要快上3倍。 但是整体模型也变得复杂不少。
与之前yolo版本一样,yolov3的anchor boxes也是通过聚类的方法得到的。yolov3对每个bounding box预测四个坐标值 (tx,ty,tw,th) ( t x , t y , t w , t h ) ,对于预测的cell(一幅图划分成S×S个网格cell)根据图像左上角的偏移 (cx,cy) ( c x , c y ) ,以及之前得到bounding box的宽和高 pw,ph p w , p h 可以对bounding box按如下的方式进行预测:
在训练这几个坐标值的时候采用了sum of squared error loss(平方和距离误差损失),因为这种方式的误差可以很快的计算出来。
作者使用二元交叉熵损失来代替softmax进行预测类别,这个选择有助于把YOLO用于更复杂的领域。Open Images Dataset V4数据集中包含了大量重叠的标签(如女性和人)。如果用的是softmax,它会强加一个假设,使得每个框只包含一个类别。但通常情况下这样做是不妥的,相比之下,多标记的分类方法能更好地模拟数据。
函数 | 均方差 | 二元交叉熵损失 |
---|---|---|
公式 | Lcross−entropy(o,y)=−([ology](1−o)log(1−y)) L c r o s s − e n t r o p y ( o , y ) = − ( [ o l o g y ] ( 1 − o ) l o g ( 1 − y ) ) | LMSE=12(|(|o−y)||22=12(o−y)2 L M S E = 1 2 ( | ( | o − y ) | | 2 2 = 1 2 ( o − y ) 2 |
函数更新梯度的绝对值 | ΔMSE=|o−y|⋅|σ'(wh+b)|⋅|h| Δ M S E = | o − y | ⋅ | σ ′ ( w h + b ) | ⋅ | h | | Δcross−entropy=|y−0|⋅|h| Δ c r o s s − e n t r o p y = | y − 0 | ⋅ | h | |
通过梯度绝对值对比能够发现
ΔMSEΔcross−entropy==|σ'(wh+b)|≤0.25 Δ M S E Δ c r o s s − e n t r o p y == | σ ′ ( w h + b ) | ≤ 0.25
这个最小值0.25,就是斜率y′y′的最小值,直接对y′=y(1−y)=y−y2y′=y(1−y)=y−y2求导等于0,就可以发现y=12y=12的时候斜率最小,为0.25。而且,从sigmoidsigmoid函数可以发现,对于均方差MSE损失,输出越大,梯度越小。比如当真实标注为00的时候,y=σ(wh+b)y=σ(wh+b)越大,sigmoid的值越大,但是sigmoid的梯度越小,这也就导致了 Δcross−entropy Δ c r o s s − e n t r o p y 的梯度大(因为没sigmoid导数这一项),但是 ΔMSE Δ M S E 的梯度小(因为乘以了sigmoid较远的非常小的梯度)。
具体细节可以查看——损失函数梯度对比-均方差和交叉熵
YOLOv3提供了3种尺寸不一的边界框。用相似的FPN(feature pyramid network)网络提取这些尺寸的特征,以形成金字塔形网络。在基本特征提取器中增加了几个卷积层,并用最后的卷积层预测一个三维张量编码:边界框、框中目标和分类预测。在COCO数据集实验中,神经网络分别为每种尺寸各预测了3个边界框,所以得到的张量是N ×N ×[3∗(4+ 1+ 80)],其中包含4个边界框offset、1个目标预测以及80种分类预测。
接着,从前两个图层中得到特征图,并对它进行2次上采样。再从网络更早的图层中获得特征图,用element-wise把高低两种分辨率的特征图连接到一起。这样做能使找到早期特征映射中的上采样特征和细粒度特征,并获得更有意义的语义信息。之后,添加几个卷积层来处理这个特征映射组合,并最终预测出一个相似的、大小是原先两倍的张量。 用同样的网络设计来预测边界框的最终尺寸,这个过程其实也有助于分类预测,因为可以从早期图像中筛选出更精细的特征。
和上一版一样,YOLOv3使用的聚类方法还是K-Means,它能用来确定边界框的先验。在实验中,选择了9个聚类和3个尺寸,然后在不同尺寸的边界框上均匀分割维度聚类。在COCO数据集上,这9个聚类分别是:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116 × 90)、(156 × 198)、(373 × 326)。
这次用了一个新的网络来提取特征,它融合了YOLOv2、Darknet-19以及其他新型残差网络,由连续的3×3和1×1卷积层组合而成,当然,其中也添加了一些shortcut connection,整体体量也更大。因为一共有53个卷积层,所以称它为 Darknet-53!
每个网络都使用相同的设置进行训练,输入256×256的图片,并进行单精度测试。运行环境为Titan X。得出的结论是Darknet-53在精度上可以与最先进的分类器相媲美,同时它的浮点运算更少,速度也更快。和ResNet-101相比,Darknet-53的速度是前者的1.5倍;而ResNet-152和它性能相似,但用时却是它的2倍以上。
Darknet-53也可以实现每秒最高的测量浮点运算。这意味着网络结构可以更好地利用GPU,使其预测效率更高,速度更快。这主要是因为ResNets的层数太多,效率不高。
尝试了常规的Anchor box预测方法,比如利用线性激活将坐标x、y的偏移程度预测为边界框宽度或高度的倍数。但发现这种做法降低了模型的稳定性,且效果不佳。
尝试使用线性激活来直接预测x,y的offset,而不是逻辑激活。这降低了mAP成绩。
尝试使用focal loss,但它使的mAP降低了2点。 对于focal loss函数试图解决的问题,YOLOv3从理论上来说已经很强大了,因为它具有单独的对象预测和条件类别预测。因此,对于大多数例子来说,类别预测没有损失?或者其他的东西?并不完全确定。
在训练期间,Faster RCNN用了两个IOU阈值,如果预测的边框与.7的ground truth重合,那它是个正面的结果;如果在[.3—.7]之间,则忽略;如果和.3的ground truth重合,那它就是个负面的结果。尝试了这种思路,但效果并不好。
“营销号”式写作——YOLOv3:一项渐进式的更新
损失函数梯度对比-均方差和交叉熵