目标检测(Object Detection)
本文总结了目标检测的定义、任务以及经典算法,适合入门的友友。
文章目录
本篇参考的文章和博客链接都附在文中或文末,侵删。
一. 目标检测是什么?
目标检测(Object Detection)是计算机视觉领域中的一项重要任务,它主要有两个任务,一是识别,二是定位。识别是确定图像中存在哪些目标,这些目标是我们分类的。定位是指确定边界框(Bounding Box,有时候也叫 Ground Truth Bound)的位置。
二. 目标检测的常见算法
深度学习目标检测方法可以分为Anchor-based(锚框法)和 Anchor-Free(无锚框),其中 Anchor-based 可以分为 one-stage 和 two-stage 两种。
算法时间线:
two-stage
Two-stage 检测包括两个阶段: 1. 生成 可能包含目标的候选区域(Region Proposals) 2. 分类和回归。
第一阶段是通过 Region Proposal Network (RPN) 生成一系列 Region Proposals 。例如,在 Faster R-CNN 中,RPN 会滑动窗口,结合特征图,预测每个位置的边界框和目标得分,从而筛选出一些候选区域。
第二阶段(分类与回归)就是将第一阶段生成的Region Proposals 送入分类器(classifier)和回归器(Regressor)。分类器对候选区域进行分类,判断其属于哪个类别;回归器对region proposals 进行微调,使其更准确地框住目标,也就是更接近 Ground Truth。
One-stage
ones-stage 是直接在特征图上进行目标检测,不需要先生成 Region Proposals ,同时完成分类和边界框回归任务。例如,YOLO(You Only Look Once)算法会在特征图的每个位置直接预测目标类别和边界框,不需要先生成候选区域再进行后续处理。
常见的 two-stage 目标检测的算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN等。two-stage 的有:YOLOv1、YOLOv2、YOLOv3、SSD、RetinaNet 等。
1. R-CNN系列
R-CNN 系列主要包括 R-CNN、Fast-RCNN、Faster-RCNN、Mask-RCNN,下面一一介绍。
1)R-CNN
R-CNN(Region-based Convolutional Neural Networks)是R-CNN系列中的第一个算法,由Ross Girshick在2014年提出,在PASCAL VOC目标检测竞赛中获得冠军。R-CNN的基本思想是通过选择性搜索 (Selective Search) 在图像中生成一系列候选区,然后送入CNN特征提取,并使用SVM分类器对每个区域进行类别判断。最后,使用回归器修正候选区域的位置。
R-CNN 可以总结成四步:
1. Extract region proposals(selective search)
2. Extract Features (CNN)
3. Classification (SVM)
4. Regression (Bounding Box Regression)
选择性搜索 Selective Search
selective search 和核心思想为:图像分割,然后合并相似区域,生成候选框,目的是为了得到较接近真实目标的 regional proposals。
主要算法为:Hierarchical Grouping Algorithm(层次组合算法)Diversification Strategies(多样性策略)。
- Hierarchical Grouping:一张图像中包含的信息非常丰富,图像中的物体有不同的形状、尺寸、颜色、纹理,而且物体间还有层次(hierarchical)关系,并且不同物体之间也存在层次关系,在合并的时候主要考虑物体的层次关系。
- Diversification Strategies:区分物体的策略应该是多样的,可以是物体的颜色,也可以是纹理等,这就需要充分考虑图像物体的多样性(diversity),由此提出了多样性策略,详情可见原文。

非极大抑制 Non-Maximum Suppression(NMS)
在目标检测任务中,通常会有多个边界框与同一个目标物体的实际位置重叠。这些边界框可能有不同的大小、位置和置信度(即模型预测该边界框包含目标物体的概率)。如果不进行处理,就会在同一个目标上得到多个检测结果,导致冗余。
非极大值抑制是在从一系列候选区域中筛选出最佳的检测结果,去除多余的边界框,保留最佳的检测框。顾名思义,就是抑制不是最佳的,保留下来最佳的(检测框)。
非极大值抑制的主要工作流程如下:
- 置信度排序:首先根据检测到的边界框的置信度进行排序,选择置信度最高的边界框作为参考框。
- 计算交并比 IoU(Intersection over Union)。
I o U = a r e a ( A ) ⋂ a r e a ( B ) a r e a ( A ) ⋃ a r e a ( B ) IoU=\frac{area(A)\bigcap area(B)}{area(A)\bigcup area(B)} IoU=area(A)⋃area(B)area(A)⋂area(B)
A为候选框,B为对象的真实边界。IoU 能反映预测的预测值和真实值的相关程度,IoU越大,表示预测的越好。
3. 抑制:如果某个边界框与候选框的 IoU 超过预设的阈值(例如 0.5),则认为这两个边界框检测到的是同一个目标,抑制该边界框(即从候选列表中移除)。
4. 迭代:从剩余的边界框中选择置信度最高的作为新的参考框,重复步骤 2 和 3,直到所有边界框都被处理。
NMS 前后对比图如下:
非极大值抑制,就是从若干候选框中找出最佳的那个,这可以有效地减少冗余的检测结果,保留最佳的检测框。这样可以提高目标检测的精度,减少误检和漏检。
再来回顾一下 R-CNN的结构:

SPP-Net (SPP: Spatial Pyramid Pooling)
SPP_Net原论文链接
由于SPP-Net 算法上的优化在后来的算法,如 fast R-CNN,faster R-CNN,以及YOLO系列产品上均有体现,在介绍 其他算法之前,这里先介绍一下 SPP-Net。
SPP-Net是2015年由Kaiming He, Jian Sun等提出的。我们知道R-CNN有处理速度、输入图像灵活性以及特征提取效率问题。SPP-Net就是用于解决这些问题的。
- 加速特征提取
R-CNN与SPP-Net对比:
在 R-CNN 中,每个候选区域(Region Proposal)都需要单独提取特征。具体来说,R-CNN 会对每个区域提议进行尺寸归一化(通常是缩放到 227x227),然后通过 CNN 网络逐个计算特征。
SPP-Net 是先对整个图像进行卷积操作,只需要提取一次全图的特征,而不是每个候选区域都重复卷积计算。然后,在最后的卷积层上使用空间金字塔池化(SPP),在不同大小的候选区域上应用池化操作,以获得定长的特征向量。这一改进大幅减少了冗余的计算,使得整个过程显著加快

- 允许输入任意尺寸的图像
R-CNN 要求所有输入的regional proposals 都必须被缩放到固定的尺寸,这种强制压缩会导致图像失真,特别是对于大小不一的目标对象。
SPP-Net 关键在于使用空间金字塔池化层(SPP),它可以将不同尺寸的输入区域池化到相同的输出大小(论文中用了 1x1、2x2、4x4 尺度的SPP,这也能捕获多尺度的信息)。这样一来, SPP-Net 可以直接处理任意大小的输入图像和候选区域,无需强制压缩,这样可以更好地保留图像的细节信息。
2) Fast R-CNN
Fast R-CNN 原文链接
Fast R-CNN 将整个图像作为输入,使用卷积神经网络(CNN)进行特征提取,然后将特征映射到候选区域。这样,Fast R-CNN可以共享卷积层的计算,大大提高了检测速度。同时,Fast R-CNN还引入了ROI Pooling,使得不同尺寸的regional proposals 都有相同的特征输出。
ROI (Region of Interest) Pooling
ROI Pooling是将regional proposal 分割成 nm 块,对每块提取最大值,这样,不管输出框多大,输出都是 nm 个值,ROI Pooling 是SPP的一个特例。
ROI Pooling 过程如下:
对于一张输入的图像,先取 Regional Proposal (大黑框),再分割 2*2 个 pooling sections,对每个section 取 max pooling,得到output。
Output:
3)Faster R-CNN
Faster R-CNN 原文链接
Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16 为 backbone,推理速度在GPU上达到5FPS(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。
特点:比Fast R-CNN 更快、精度更高。Fast R-CNN 还是用 selective search 获得 regional proposals,这一算法复杂度高,而 Faster R-CNN引入了区域建议网络(Region Proposal Network, RPN),替代选择性搜索。RPN 是一个轻量级的网络,可以直接在特征图上生成regional proposals,大大减少了生成regional proposals的时间。
2.YOLO 系列(You Only Look Once)
未完待续
参考文章或博客:
Dive Into Deep Learning
深度学习之目标检测Fast-RCNN模型算法流程详解说明(超详细理论篇)
理解 Selective Search
万字长文解析:计算机视觉领域的目标检测与图像分割
ROI (Region of interest pooling) Pooling 层详解
R-CNN系列
更多推荐

所有评论(0)