【深度学习进阶】02目标检测理论:一阶段方法YOLO v1-v3、SSD、RetinaNet、FCOS网络对比分析

上一节01部分介绍了目标检测任务中Faster R-CNN系列的三个Two-Stage算法以及FPN结构(参见这里)。该类方法是基于Region Proposal的算法,需要使用启发式方法(SS算法)或者CNN网络(RPN)产生候选框,然后再在候选框上实现分类和回归。 

本文将介绍目标检测任务中的另一类方法,相比于两阶段,该类算法去掉了区域提议网络,仅仅使用一个CNN网络直接预测不同目标的类别和位置。该类算法速度快,并且实现了端到端的预测,复杂度也比较低。

1. YOLO(2015,you only look once)

  • 最早的单阶段算法之一
  • DarkNet结构的主干网络产生特征图
  • 全连接层产生全部空间位置的预测结果,每个位置包含C维分类概览和B组边界框预测

1.1 网络设计思路

  • 将一幅图像分成S*S个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object(对应预测图上S*S个像素位置)
  • 每个网格预测B个bounding box,及其1个置信度confidence score,以及C个类别分数
    • 💡置信度反映是否包含object以及在包含object情况下位置的准确性
    • 缺陷1:每个网格预测B个box,但是最终只选择IoU最高的box作为物体检测输出,即每个网格最多只预测出一个物体。当物体占画面比例较小,检测效果差
  • 网络结构:YOLO借鉴了GoogleNet分类网络结构。但未使用inception模块,而是使用1*1卷积层(此处1*1卷积层的存在是为了跨通道信息整合)+3*3卷积层简单替代。
    • 最后一层采用全连接层进行类别输出,预测输出相关见3.2内容
      • 缺陷2:这就导致了,测试过程中YOLO模型仅支持与训练图像分辨率相同的输入。其他分辨率需要缩放
    • 注释:没有标注stride的层,默认步距为1

1.2 YOLO预测输出

  • 经YOLO预测输出为7*7*30的张量(30为深度),这要求原始图像尺寸固定,448*448

  •  测试阶段,既给出了它为某一目标的概率,又给出了预测目标边界框与真实目标的重叠程度

1.3 YOLO损失函数

  • bounding box损失
    • B个bbox中与GT具有最高IoU的一个进行坐标误差的反向传播,其余不进行.
  • 注意宽和高的误差求解方式,都进行了一个开根号的处理,为什么要这么做呢?
  • 首先假设对于大目标和小目标而言,真实的目标边界框和预测的边界框都有一个相同的偏移(w,h),对于小目标而言IoU变小的很明显,预测结果比较差,但是对于大目标的预测结果还算可以
  • 也就是说,无论是大目标还是小目标,我们偏移相同的距离,误差都是一样的,很明显这不是我们想要的结果。我们希望,对于小目标而言,误差更大一点,所以开根号

  • confidence损失:有目标和没有目标情况
  • classes损失:仅计算有目标的情况,若网格中没有目标,则不对分类误差进行反向传播

 1.3 YOLO的优点和缺点

  • 快!在Pascal VOC数据集上,使用自己设计的DarkNet结构可以达到实时速度,使用相同的VGG可以达到3倍于Faster RCNN的速度
  • 不依赖锚框,直接回归边界框

  •  由于每个格子只能预测1个物体,因此对重叠物体、尤其是大量重叠的小物体容易漏检
  • 直接回归边界框有难度,回归误差较大

2. YOLO v2网络

v1和v2的详细对比在这篇博文中:目标检测理论:YOLO v1和YOLO v2网络

  • 主要有两点改进:①新的DarkNet-19结构的主干网络,加入BN层

  • 加入锚框,并使用聚类方法设定锚框尺寸

3. YOLO v3网络

YOLO v3网络详解见这篇博文:【】本小节简要总结该网络的改进之处

  •  主干网络加入残差结构 → DarkNet 53
  • 加入类FPN结构,基于多尺度特征图预测

4. SSD网络(2016,ECCV)

4.1 Faster RCNN存在问题

  • 对小目标的检测效果很差(在某一特征层上进行预测)
  • 模型太大,检测速度慢(需要在RPN部分和Fast R-CNN部分分别进行预测)

4.2 SSD网络亮点

  • 在不同特征尺度上预测不同尺度的目标(浅层特征层可以检测小目标,因为感受野小,反之亦然)
  • 整个网络类似于VGG16,端到端实现分类与回归
  • 真正的实时。对于输入尺寸300x300的网络使用Nvidia Titan X在VOC 2007测试集上达到74.3%mAP以及59FPS,对于512x512 的网络,达到了76.9%mAP超越当时最强的Faster RCNN(73.2%mAP)

4.3 网络细节部分

  • 虚线框为VGG16的前5层,不同的是Conv5的最后一个maxpooling5为2*2, s2,这里改成了3*3, s1,因此经过该maxpooling5的特征图尺寸不变
  • 搭建过程中注意,后面几层卷积中,s=1时,padding=0;s=2时,padding=1

4.4 Default Box的确定

  • 类似于Anchor Box,这里的Default Box将它们分别放置在不同的特征层上
  • scale和aspect两个参数,最终获得9732个框

4.5 SSD网络预测部分

  • 对于每一个预测特征层m*n*p,使用一个3*3*p的kernel卷积,卷积核个数为(c+4)k,c为类别个数,k为box个数
  • 目标类别分数预测:ck(每个default box共c个参数)
  • 边界框回归参数预测:4k(每个default box共4个参数)(区别于Fast R-CNN,每一个box 4c个参数)

4.6 正负样本选取

  • Box与GT-Box匹配最大的IoU,设为正样本
  • 对于任意Box与GT-Box的IoU>0.5,设为正样本
  • 负样本:8732-正样本=负样本,但不全用,因为会造成样本不平衡
    • 计算最大的confidence loss,作为负样本
    • 最终保证正负样本比例1:3

4.7 损失的计算

  • 类别损失

  • 定位损失

5. RetinaNet网络(2017,CVPR)

 在此之前,目标检测领域普遍以YOLO系列、SSD算法为首的one-stage算法准确率不如以Faster RCNN为代表的two-stage算法。RetinaNet直接省略掉了第二阶段,将RPN网络直接完成了整套的目标检测任务。它的网络结构其实就是FPN网络提取多尺度的特征,然后在多尺度特征的基础上连接检测头,对目标的分类和位置回归进行预测

5.1 RetinaNet网络结构

类似FPN结构,但有三点不同:

  • FPN从C2层生成P2,但RetinaNet没有使用C2,因为P2会小号更多的空间和计算量
  • FPN中P6层是P5通过maxpooling得到的,RetinaNet通过卷积层下采样(s*3, s2)
  • FPN是P2-P6,RetinaNet是P3-P7

5.2 Box的scale和ratios

  • FPN中每一个预测特征层都只使用了一个scale和3个ratios
  • RetinaNet针对每一个预测特征层使用了3个scale和3个ratios

5.3 RetinaNet网络预测器结构

  • 权值共享:针对P3-P7使用同一个预测器

5.4 RetinaNet损失计算

  • 核心理论:Focal Loss(YOLO v3 SPP中有具体介绍)

参考来源:

【OpenMMLab 公开课】目标检测与 MMDetection 下

深度学习在图像处理中的应用(tensorflow2.4以及pytorch1.10实现)_太阳花的小绿豆的博客-CSDN博客_深度学习在图像处理中的应用
GitHub - WZMIAOMIAO/deep-learning-for-image-processing: deep learning for image processing including classification and object-detection etc.

目标检测网络之 YOLOv3 - 康行天下 - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值