论文(三)YOLOv3详解

YOLOv3详解


YOLOv3详解

YOLO v3主要有几个改进点,还是非常赞的:

参考:https://www.zhihu.com/question/269909535

1、类别预测方面主要是将原来的单标签分类改进为多标签分类,因此网络结构上就将原来用于单标签多分类的softmax层换成用于多标签多分类的逻辑回归层。首先说明一下为什么要做这样的修改,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类,需要用逻辑回归层来对每个类别做二分类。

2、采用多个scale融合的方式做预测。原来的YOLO v2有一个层叫:passthrough layer,假设最后提取的feature map的size是13*13,那么这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。当时这么操作也是为了加强YOLO算法对小目标检测的精确度。这个思想在YOLO v3中得到了进一步加强,在YOLO v3中采用类似FPN的upsample和融合做法(最后融合了3个scale,其他两个scale的大小分别是26*26和52*52),在多个scale的feature map上做检测,对于小目标的检测效果提升还是比较明显的。虽然在YOLO v3中每个grid cell预测3个bounding box,看起来比YOLO v2中每个grid cell预测5个bounding box要少,其实不是!因为YOLO v3采用了多个scale的特征融合,所以boundign box的数量要比之前多很多,以输入图像为416*416为例:(13*13+26*26+52*52)*3和13*13*5相比哪个更多应该很清晰了。

3、关于bounding box的初始尺寸还是采用YOLO v2中的k-means聚类的方式来做,不过数量变了。这种先验知识对于bounding box的初始化帮助还是很大的,毕竟过多的bounding box虽然对于效果来说有保障,但是对于算法速度影响还是比较大的。作者在COCO数据集上得到的9种聚类结果:(10*13); (16*30); (33*23); (30*61); (62*45); (59*119); (116*90); (156*198); (373*326),这应该是按照输入图像的尺寸是416*416计算得到的。

4、网络结构(Darknet-53)一方面基本采用全卷积(YOLO v2中采用pooling层做feature map的sample,这里都换成卷积层来做了),另一方面引入了residual结构(YOLO v2中还是类似VGG那样直筒型的网络结构,层数太多训起来会有梯度问题,所以Darknet-19也就19层,因此得益于ResNet的residual结构,训深层网络难度大大减小,因此这里可以将网络做到53层,精度提升比较明显)。Darknet-53只是特征提取层,源码中只使用了pooling层前面的卷积层来提取特征,因此multi-scale的特征融合和预测支路并没有在该网络结构中体现。

其他方面基本上和YOLO v2没有太大差别。

关于yolov3的一些总结:

参考:https://zhuanlan.zhihu.com/p/367395847

1. 结合ResNet骨干网络发现,三个分支输出特征图的大小分别为32倍下采样、16倍下采样和8倍下采样的大小,这样做有什么好处?

在特征提取骨干网络中,下采样倍数越多,感受野越大。所以32倍下采样特征图中,每个点的感受野是最大的,映射到原图可以看到更大的区域,所以用于预测大目标,16倍和8倍下采样同理。

2. 边框预测公式中tx ty为什么要sigmoid?

预测的tx和ty可能会比较大,tx,ty>1。用sigmoid将tx,ty压缩到(0,1)区间内,可以有效的确保目标中心处于执行预测的网格单元中,防止偏移过多。

举个栗子,我们一直都说网络不会预测边界框中心的坐标而是预测与预测目标的grid cell左上角相关的便宜tx,ty。例如在图2中,某目标的中心点偏移值预测假设为(0.4,0.7),Cx=3,Cy=3,该物体的在feature map中的中心实际坐标显然是(3.4,3.7),此时是正常的。但若预测出的tx和ty大于1,如(1.6,0.8),则物体的在feature map中的中心实际坐标显然是(3.6,3.8),注意此时物体中心在这个所属grid cell外面了,但(3,3)这个grid cell却检测出这个单元格内含有目标的中心(YOLO系列是物体中心点落在哪个grid cell,那么就由哪个grid cell进行预测),这样就矛盾了,因为左上角为(3,3)的grid cell负责预测这个物体,这个物体中心必须出现在这个grid cell中,所以一旦tx和ty大于1就会出现矛盾,因此必须进行归一化,也就是通过sigmoid函数将tx和ty显示在(0,1)。

3. 边框预测公式中tw和th为什么指数?

tw,th是log尺度缩放到对数空间了,需要指数回来,具体下文解释。

再次重复,网络预测出偏移值后,若在推理阶段,根据边框预测公式得到最终的坐标值即可。不同的是,在训练阶段,我们需要计算损失,然后反向传播更新网络参数,所以我们需要了解YOLOv3的损失函数。

4. Ground Truth的计算

既然网络预测的是偏移值,那么在计算损失时,也是按照偏移值计算损失。现在我们有预测的值,还需要真值Ground Truth的偏移值

Ground Truth的tw,th是log尺度缩放到对数空间了,所以在预测时需要指数回来。这就是答案。

5. 为什么在计算Ground Truth的tw,th时需要缩放到对数空间?

tw和th是物体所在边框的长宽和anchor box长宽之间的比率。不直接回归bounding box的长宽,是为避免训练带来不稳定的梯度。将尺度缩放到对数空间,因为如果直接预测相对形变tw 和 th,那么要求tw,th>0,因为框的宽高不可能是负数,这样的话是在做一个有不等式条件约束的优化问题,没法直接用SGD来做,所以先取一个对数变换,将其不等式约束去掉就可以了。

6. 正负样本的确定

一个尺度的feature有三个anchors,那么对于某个ground truth框,究竟是哪个anchor负责匹配它呢?

  • 与yolov1一样,对于训练图片中的ground truth,若其中心点落在某个cell内,那么该cell内的3个anchor box负责预测它,具体是哪个anchor box预测它,需要在训练中确定,即由那个与ground truth的IOU最大的anchor box预测它,而剩余的两个anchor box不予该GT框匹配。(YOLOv3需要假定每个cell至多含有一个ground truth,而在实际上基本不会出现多于1个的情况。)

  • 每个GT目标仅与一个anchor相关联,与GT匹配的anchor box计算坐标误差、置信度误差(此时target为1)以及分类误差,而其他anchor box只计算置信度误差(此时target为0)。

  • 对于重叠大于等于0.5的其他预测框,忽略,不算损失

总的来说,正样本是与GT的IOU最大的框。负样本是与GT的IOU<0.5的框。忽略的样本是与GT的IOU>0.5 但不是最大的框。

 

 

 

 

 

 

 

 

你可能感兴趣的:(论文阅读-专业知识积累)