YOLOv3: An Incremental Improvement 论文笔记

YOLOv3: An Incremental Improvement

论文链接: https://arxiv.org/abs/1804.02767

一、Problem Statement

Just a bunch of small changes that make it better。

二、Direction

作者优化的方向:

  1. Bounding Box Prediction
  2. Class Prediction
  3. Predictions Across Scales
  4. Feature Extractor

三、Method

先整体看一下YOLOv3的整体框架:

在YOLOv3中,作者输出了三个特征图,第一个特征图下采样32倍,第二个特征图下采样16倍,第三个下采样8倍。
在每个特征图的每个grid cell中,都配置3个不同的anchor。但是对于每个特征图,anchor的大小时不一样的。
所以总共有9个不同的anchor分别用于3个特征图,分别为:
(10 x 13), (16 x 30), (33 x 23), (30 x 61), (62 x 45), (59 x 119), (116 x 90), (156 x 198), (373 x 326)。

假设输入的图像尺寸为416X416,输出的特征图为13 x 13 x 255、26 x 26 x 255、 和 52 x 52 x 255。
特征图尺寸越小,感受野越大。所以这些输入,分别用作了检测大目标,中目标,小目标。接下来把这三层分别进行1x1, 3x3的卷积,
改变通道数的同时,继续提高非线性程度,提高精度,最终將通道数变成我们想要的255。
目前我们可以得到三个Tensor,分别为(batchSize, 13,13,255), (batchSize, 26,26,255), (batchSize, 52,52,255)。为什么我们需要255这个值呢?
以13x13的特征图为例子,将图片分成了13x13个部分。如果一个物体的中心落在这个格子中,那么这个格子就要负责检测出这个物体。
每一个格子会产生3个anchor对应的值,每个anchor有85个值,分别为四个坐标,一个score(表示这里有目标的概率),80个类别概率。
那么对于一个grid cell,总共需要预测出3*85=255个数。
下面详细讲一下四个坐标的预测和score的预测。

1、 优化Bounding Box 预测:

YOLOv3依旧延续使用YOLOv2 Bounding Box 的预测方法。
我们首先来考虑一下总共得到了多少个anchor,分为三层,特征图大小为13的那层对应13x13x3=507,
特征图大小为26的那层对应26x26x3=2028,特征图大小为52的那层对应52x52x3=8112。那么anchor的计算太大了,
作者进行了优化。先筛选anchors, 把不用的anchors先去掉,然后再进行预测。这一步的筛选根据上面的score以及
ground truth与anchor的重叠程度决定的,即IoU。Anchor与ground truth中没有交集的先省略掉。然后YOLOv3利用logistic regression
对每一个anchors预测一个目标性分数(objectness score),即这块位置时目标的可能性有多大。这个分数介乎0-1之间,如果anchor与ground truth 之间重合且比其他anchors都好,这个值就为1,
但如果这个anchor确实与ground truth重合了一定程度(超过设定的threshold=0.5),我们就忽略这些预测。
我们只为一个ground truth object分配一个anchor,其他没有被分配到的不会计算坐标和类别的损失,只有objectness score。 在训练Bounding Box的时候采用的是平方和距离误差损失(sum of squared error loss)。
其他两个objectness score 和 类别loss 都用交叉熵损失。

上面说了网络会输出预测四个坐标 t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th。为了得到真实图像上的Bounding Box, 需要根据每一个cell(YOLO把图像分割成很多个cell)距离原图像左上角偏移 ( c x , c y ) (c_x, c_y) (cx,cy),目标先验框(anchors)的宽和高 p w , p h p_w, p_h pw,ph,得出所预测的值为:

b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h b_x=\sigma(t_x)+c_x \\ b_y=\sigma(t_y)+c_y \\ b_w=p_we^{t_w} \\ b_h=p_he^{t_h} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth

举个例子:
假如经过sigmoid function后预测输出值为: ( t x , t y , t w , t h ) = ( 0.2 , 0.1 , 0.2 , 0.32 ) (t_x,t_y,t_w,t_h)=(0.2,0.1,0.2,0.32) (tx,ty,tw,th)=(0.2,0.1,0.2,0.32);
当前cell的相对于特征图左上角的坐标为(1,1), anchor box 预设的宽和高为 p w = 3.19275 , p h = 4.00944 p_w=3.19275, p_h=4.00944 pw=3.19275,ph=4.00944,则有:

b x = 0.2 + 1 = 1.2 b y = 0.1 + 1 = 1.1 b w = 3.19275 ∗ e 0.2 = 3.89963 b h = 4.00944 ∗ e 0.32 = 5.52151 b_x=0.2+1=1.2\\ b_y=0.1+1=1.1\\ b_w=3.19275*e^{0.2}=3.89963 \\ b_h=4.00944*e^{0.32}=5.52151 bx=0.2+1=1.2by=0.1+1=1.1bw=3.19275e0.2=3.89963bh=4.00944e0.32=5.52151

上面的计算的距离都是基于13X13的特征图而言的,其单位是grid cell的边长。
假设输入的图像尺寸为416X416, 则每个grid cell 的边长为 416/13=32。 將上述位置换算到以像素为单位:

b x = 1.2 ∗ 32 = 38.4 b y = 1.1 ∗ 32 = 35.2 b w = 3.89963 ∗ 32 = 124.78 b h = 5.52151 ∗ 32 = 176.68 b_x=1.2*32=38.4 \\ b_y=1.1*32=35.2 \\ b_w=3.89963*32=124.78 \\ bh=5.52151*32=176.68 bx=1.232=38.4by=1.132=35.2bw=3.8996332=124.78bh=5.5215132=176.68

这样就得到了一个在原图上以(38.4, 35.2)为中心,宽高为(124.78,176.68)的Bounding Box。

2、 Class Prediction:

clas prediction 不再使用 softmax,而是用独立的logistic classifiers, 就是binary cross-entropy loss.

3、 Predictions Across Scales

使用FPN实现多尺度检测和仍然使用k-means聚类去决定anchors。

4、 Feature Extractor

使用Darknet-53,构建更深的特征提取网络。

四、Conclusion

YOLO仍然对小目标的检测性能比较差。作者也尝试使用Focal Loss 但效果不太好,可能是因为YOLOv3已经有objectness predictions 和 conditional class prediction的原因。

Reference

  1. https://blog.csdn.net/litt1e/article/details/88907542
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值