一. 参考资料
《YOLO目标检测》 by 杨建华博士
二. 背景
2.1 目标检测发展简史
2014年,RCNN问世,R-CNN的思路是先使用一个搜索算法从图像中提取出若干感兴趣区域(region of interest,RoI),然后使用一个卷积神经网络(convolutionalneural network,CNN)分别处理每一个感兴趣区域,提取特征,最后用一个支持向量机来完成最终的分类,如下图所示。
RCNN被称为两阶段检测范式,主要问题在于检测速度较为缓慢,基于此方面的改进有提出Fast R-CNN和Faster R-CNN。
2015年,YOLO(You Only Look Once)问世。不同于R-CNN的两阶段检测范式,YOLO的作者团队认为,提取候选区域(定位)和逐一识别(分类)完全可由一个单独的网络来同时完成,无须分成两个阶段,不需要对每一个特征区域进行依次分类,从而能够减少处理过程中的大量冗余操作,如下图所示。
在这样的设计理念下,YOLO凭借着其在TITAN X型号的GPU上以每秒处理超过40张图像的检测速度(即40 FPS)超越了当时所有的通用目标检测器。尽管YOLO的检测性能要略逊于当时最新的Faster R-CNN检测器,但其显著的速度优势使其成为一个可以满足实时检测需求的通用目标检测器。
2.2 目标检测网络框架
一个常见的目标检测网络往往可以分为三大部分:主干网络(backbone network)、颈部网络(necknetwork)和检测头(detection head)。
- 主干网络。主干网络是目标检测网络中最核心的部分,其关键作用就是提取输入图像中的高级特征,减少图像中的冗余信息,以便于后续的网络去做深入的处理。在大多数情况下,主干网络选择的成败对检测性能的影响是十分巨大的。
- 颈部网络。颈部网络的主要作用是将由主干网络输出的特征进行二次处理。其整合方式有很多,最为常见的就是特征金字塔网络(feature pyramid network,FPN)[插图],其核心是将不同尺度的特征进行充分的融合,以提升检测器的多尺度检测的性能。除此之外,还有很多单独的、可即插即用的模块,如RFB[插图]、ASPP[插图]和YOLOv4[插图]所使用的SPP模块等,这些模块都可以添加在主干网络之后,以进一步地处理和丰富特 征信息,扩大模型的感受野。
- 检测头。检测头的结构相对简单,其主要作用就是提取类别信息和位置信息,输出最终的预测结果。在某些工作里,检测头也被称为解码器(decoder),这种称呼不无道理,因为检测头的作用就是从前两个部分所输出的特征中提取并预测图像中的目标的空间位置和类别,它相当于一个解码器。
2.3 目标检测网络框架浅析
- 主干网络:大家一般采用在Image Net上预训练的方法,研究者们将在ImageNet数据集上训练好的分类网络做一些适当的调整—去掉最后的global avgpooling层和Softmax层后,将其作为目标检测网络中的主干网络,可以有效加快收敛速度,常用的主干网络有VGG,ResNet,DarkNet,MobileNet,ShuffleNet等。
- 颈部网络:主干网络毕竟是从图像分类任务中迁移过来的,在大多数情况下,这些网络的设计很少会考虑到包括目标检测、语义分割等下游任务,它们提取的特征也就有可能不太适合目标检测任务
- 特征金字塔网络:特征金字塔网络(feature pyramid network,FPN)是目前目标检测领域最有名的结构之一,几乎是当下目标检测网络的标准配置,其多尺度特征融合与多级检测思想影响了后续许多目标检测网络结构。FPN认为网络中的不同大小的特征图所包含的信息是不一样的,即浅层特征图包含更多的位置信息,且分辨率较高,感受野较小,便于检测小物体;而深层特征图包含更多的语义信息,且分辨率较低,感受野较大,便于检测大物体。因此,FPN设计了一种自顶向下的融合方式,将深层的特征不断融合到浅层特征中,通过将浅层与深层的信息进行融合,可以有效地提升网络对不同尺度物体的检测性能。图1-5展示了特征金字塔网络的结构。
- 空间金字塔池化模块:空间金字塔池化模块是由YOLOv3工作的作者团队所设计的SPP结构,包含4条并行的分支,且每条分支用了不同大小的池化核。SPP结构可以有效地聚合不同尺度的显著特征,同时扩大网络的感受野,进而提升模型的性能。SPP模块是一个性价比很高的结构,被广泛地应用在YOLOv4、YOLOv6和YOLOv7等工作中。图1-6展示了SPP模块的网络结构。
- 检测头:大多数的检测框架所采用的技术路线都是在处理好的特征图上,通过部署数层卷积来完成定位和分类。
三. 常用的数据集&下载方法
3.1 VOC数据集
PASCAL VOC(PASCAL Visual Object Classes)数据集[插图]是目标检测领域中的经典数据集,该数据集中共包含20类目标,一万多张图像。该数据集中最为常用的是VOC2007和VOC2012数据集。通常,VOC2007的train/val数据与VOC2012的train/val数据会被组合在一起用于训练网络,共包含16551张图像,而VOC2007的test数据则作为测试集来验证网络的性能,共包含4952张图像。
数据集下载可以参考这个blog,voc2007,voc2012数据集快速下载方法_voc拓展数据集下载-CSDN博客
3.2 COCO数据集
MS COCO(简称COCO)数据集是微软公司于2014年公布的大型图像数据集,包含诸如目标检测、图像分割、实例分割和图像标注等丰富的数据标签,是计算机视觉领域最受关注、最为重要的大型数据集之一。相较于VOC数据集,COCO数据集包含更多的图像,场景更加丰富和复杂,用于训练的图像数量高达11万余张,包含80个类别,远远大于VOC数据集。COCO数据集不仅所包含的图像更多,而且更重要的是,COCO数据集的图像具有更加贴近自然生活、场景更加复杂、目标尺度多变、光线变化显著等特点,这些特点不仅使得COCO数据集极具挑战性,同时也赋予了检测算法良好的泛化性能,使得在该数据集上训练好的检测器可以被部署到实际场景中。