一文带你看懂目标检测!(四万字超全超详细版)

博主最近在学习无人船舶水面检测的相关内容,需要用到目标检测的知识。于是博主从零开始(其实有一定深度学习的基础)学习2D目标检测的知识。


目录

一、前言

1.1 什么是目标检测

1.2 目标检测的任务

1.3 目标检测的核心任务

1.4 目标检测算法分类

1.5 目标检测的应用

1.6 检测任务评估指标

1.6.2 平均精确率(mean Average Precision,mAP)

1.6.3 交并比(Intersection over Union,IoU)

1.7 名次解释

1.7.1 端对端

1.7.2 非最大抑制(Non-Maximum Suppression)

1.7.3 感兴趣区域(Region of Interest,RoI)

1.7.4 anchor box

1.7.5 每秒进行十亿次运算次数(Billion Float Operation Per Second,BFLOPS)

1.7.6 骨干网络(Backbone)、中间部件(Neck)、检测头(Head)

1.7.7 特征金字塔网络(Feature Pyramid Network,FPN)

1.7.8 滑动窗口

1.7.9 选择性搜索(Selective Search,SS)

1.7.9.1 什么是选择性搜索

1.7.9.2 选择性搜索流程

1.7.9.3 选择性搜索的优点

1.8 数据表示

1.8.1 向量(vector)

1.8.2 张量(tensor)

1.9 效果评估

1.9.1 分类子问题评估

1.9.2 定位子问题评估

1.10 损失函数

1.11 多尺度检测

1.12 特征融合

二、传统目标检测算法

2.1 图像处理的任务分类

2.2 传统目标检测算法流程

2.2.1 区域选择

2.2.2 特征提取

2.2.3 目标分类

2.3 传统目标检测算法的问题

三 、RCNN系列

3.1 RCNN

3.1.1 介绍

3.1.2 算法流程

3.1.3 候选区域特征提取

3.1.4 候选区域对应特征分类(SVM)

3.1.5 使用回归器精细修正候选框位置

3.1.6 分类器的选择

3.1.7 R-CNN的缺点

3.2 Fast R-CNN

3.2.1 介绍

3.2.2 算法流程

3.2.3 Softmax分类器

3.2.4 边界框回归器(bbox regressor)

3.3 Faster R-CNN

3.3.1 介绍

3.3.2 算法流程

3.3.3RPN(区域建议网络)

3.3.4 RPN损失函数

3.4 三种算法比较

四、SSD

4.1 介绍

4.2 算法结构

4.2.1 卷积层

4.2.2 目标检测层

4.2.3 筛选层

4.3 多尺度特征预测不同尺度目标

4.4 Default box和Prior box(先验框)

4.5 训练过程

4.6 损失函数

4.7 优缺点

五、YOLO系列

5.1 YOLOv1

5.1.1 介绍

5.1.2 网络结构

5.1.3 实现细节

5.1.3.1 检测方法

5.1.3.2 损失函数

5.1.4 优缺点

5.2 YOLOv2

5.2.1 介绍

5.2.2 网络结构

5.2.3 实现细节

5.2.3.1 Batch Normalization

5.2.3.1 Anchor box机制

5.2.3.3 Convolution with Anchor boxes

5.2.3.4 聚类方法选择Anchors

5.2.3.5 Fine-Grained Features

5.2.4 性能表现

5.3 YOLOv3

5.3.1 介绍

5.3.2 网络结构

5.3.3 改进之处

5.3.3.1 多尺度预测

5.3.3.2 损失函数

5.3.3.3 多标签分类

5.3.3.4 性能表现

5.4 YOLOv4

5.4.1 介绍

5.4.2 网络结构

5.4.2.1 CSPDarknet53

5.4.2.2 SPP

5.4.2.3 PANet

5.4.2.4 YOLOv3 Head

5.4.3 Tricks总结

5.4.3.1 免费包

5.4.3.2 特价包

5.4.4 改进方法

5.4.4.1 Mosaic

5.4.4.2 SAT

5.4.4.3 CMBN

5.4.4.4修改后的SAM

5.4.4.5 修改后的PAN

5.4.5 性能表现

5.5 YOLOv5

5.5.1 介绍

5.5.2 网络结构

5.5.2.1 输入

5.5.2.2 骨干网络(Backbone)

5.5.2.3 Neck

5.5.2.4 检测头(Head)

5.5.3 改进方法

5.5.3.1 自适应锚框计算

5.5.3.2 自适应会读填充

5.5.3.3 损失函数

5.5.4 性能表现

5.6 YOLOv8

5.6.1 介绍

5.6.2 网络结构

5.6.3 改进方法

5.6.3.1 Backbone

5.6.3.2 PAN-FPN

5.6.3.3 Decoupled-Head

5.6.3.4 Anchor-Free

5.6.3.5 损失函数

5.6.3.6 样本匹配

5.6.4 性能表现

5.7 YOLOv9(2024)

5.7.1 介绍

5.7.2 网络结构

5.7.3 改进之处

5.7.3.1 可编程梯度信息(PG)

5.7.3.2 GELAN

5.7.4 性能表现

5.8 YOLOv10和YOLOv11


一、前言

1.1 什么是目标检测

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标或物体,并确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题

1.2 目标检测的任务

计算机视觉中关于图像识别有四大类任务,它们分别是:

(1)分类——Classification:解决“是什么”的问题,即输入的图片或视频中包含什么类别的目标;

(2)定位——Location:解决“在哪里”的问题,即定位出这个目标的具体位置;

(3)检测——Detection:解决“在哪里”和“是什么”的问题,即定位出这个目标的位置并识别出这个目标的类别;

(4)分割——Segmentation:分为实例分割(Instance-Level)和场景分割(Scene-Level),解决每一个像素属于哪个目标或场景的问题。

如上面两张图所展示的内容,第一张为单目标的图像,第二张为多目标的图像。分类任务只回答物体类别是什么的问题,定位任务回答物体在哪里的问题,通常会以边界框(图中红色边框)框柱物体表示其位置,而检测=分类+定位,分割则将每个物体以不同颜色边界与背景分离开。

所以,目标检测是一个分类、回归问题的叠加。

1.3 目标检测的核心任务

目标检测主要有四项核心任务:

1、分类问题:即图片(或某个区域)中图像属于哪个类别;

2、定位问题:目标可能出现在图像的哪个位置;

3、大小问题:目标具有各种的大小;

4、形状问题:目标的形状各异。

1.4 目标检测算法分类

这里主要介绍基于深度学习的目标检测算法,主要分为两类:单阶段(One stage)和两阶段(Two stage)。

上图展示了两种算法的检测流程。

1)单阶段

单阶段算法对输入直接通过网络提取特征,再进行分类和位置的预测。

流程:特征提取——>分类/定位回归

常见单阶段目标检测算法有:Single Shot MultiBox Detector(SSD)、YOLO系列和RetinaNet等。

2)两阶段

两阶段算法经过输入后首先进行区域生成,该区域成为Region Proposal(RP),这个区域为可能包含待检测物体的预选框,再进行卷积神经网络进行样本分类。

流程:特征提取——>生成RP——>分类/定位回归

常见两阶段目标检测算法有:R-CNN(Region Convolutional Neural Network)、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。

1.5 目标检测的应用

1)人脸检测

智能门控、员工考勤签到、智慧超市、人脸支付、车站机场实名认证、公共安全

2)行人检测

智能辅助驾驶、智能监控、在岗检测、区域入侵检测、安全帽/安全带检测

3)车辆检测

自动驾驶、辅助驾驶、智能交通、违章检测、关键通道检测、车流量统计

4)遥感检测

大地遥感(土地使用、公路、水渠、河流监控)、农作物监控、军事检测

5)工业质检

流水生产线产品检测、精细产品计数、产品内部探伤检测

1.6 检测任务评估指标

1.6.1 准确率、精确率、召回率

下面通过一个示例进行介绍:

假设一个班级有100个学生,其中男生70人,女生30人。如下图,蓝色矩形表示男生,橙色矩形表示女生。又假设,我们不知道这些学生的性别,只知道他们的身高和体重。我们有一个程序(分类器),这个程序可以通过分析每个学生的身高和体重,对这100个学生的性别分别进行预测。最后的预测结果为,60人为男生,40人为女生,如下图。这里我们将男生视作正样本,女生视作负样本。

TP:实际为男生,预测为男生;

FP:实际为女生,预测为男生;

FN:实际为男生,预测为女生;

TN:实际为女生,预测为女生;

准确率(Accuracy) = (TP + TN) / 总样本 =(40 + 10)/100 = 50%。 定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。

精确率(Precision) = TP / (TP + FP) = 40/60 = 66.67%。它表示:预测为正的样本中有多少是真正的正样本,它是针对我们预测结果而言的。Precision又称为查准率。

召回率(Recall) = TP / (TP + FN) = 40/70 = 57.14% 。它表示:样本中的正例有多少被预测正确了, 它是针对我们原来的样本而言的。Recall又称为查全率

1.6.2 平均精确率(mean Average Precision,mAP)

计算公式: mAP=所有类别AP之和/类别总个数=\frac{AP_{1}+AP_{2}}{2}

如上表所示,通过计算得到行人、汽车和骑行者的AP后,通过上述公式计算得到mAP。

1.6.3 交并比(Intersection over Union,IoU)

交并比反映的是两个区域的重叠程度overlap:候选区域和标定区域的IoU值。

计算公式: IoU=\frac{Area\: of\: Overlap}{Area\: of\: Union}=\frac{A\cup B}{A\cap B}

如上图所示,方块A和方块B的区域值分别为0.5和0.7,他们的重叠区域值为0.3,则通过公式计算得到的IoU值为\frac{0.3}{0.5+\left ( 0.7-0.3 \right )}=\frac{0.3}{0.9}=\frac{1}{3}

通常我们会设置一个阈值,IoU大于阈值的图像即为正样本(类别正确)。一般阈值设为0.5.

1.7 名次解释

1.7.1 端对端

也称端到端,One to One。即为输入仅经由一个模型后产生最终的输出。

如图所示,输入经过模型A得到输出即为端到端的模式,若经过了模型B、模型C……则为非端到端的模式。

1.7.2 非最大抑制(Non-Maximum Suppression)

在预测的边界框中,可能存在多个相互重叠框,代表同一个目标。为了消除冗余的边界框,一些算法会使用非最大抑制算法,根据置信度和重叠程度筛选出最佳的边界框。

如图所示,对同一个物体的预测结果包含三个概率分别为0.8/0.9/0.95,经过非极大值抑制后,仅保留概率最大的预测结果即最终输出为概率0.95的边界框。

还有一种情况就是找到所有预测框中得分最高的目标,然后计算其他目标与该目标的IoU值,删除所有IoU值大于给定阈值的目标。(IoU值越大,表示候选框重叠程度越大,为同一目标的可能性越大)。

1.7.3 感兴趣区域(Region of Interest,RoI)

从被处理的图像以方框、圆、椭圆或不规则等方式勾勒出需要处理的区域,成为感兴趣区域RoI。主要是遍历图像,找出可能出现的物体或检测目标的输出区域。通常采用SS(Selective Search)算法。

1.7.4 anchor box

锚框。用于训练和预测,选择锚框和真实框交并比大的用作训练和预测。

1.7.5 每秒进行十亿次运算次数(Billion Float Operation Per Second,BFLOPS)

描述硬件运算性能的单位。类似的还有每秒浮点运算次数(Floating Point Operation Per Second,FLOPS),可以理解为计算速度,用于衡量硬件性能的指标;浮点运算数(Floating Point Operation,FLOPs),理解为计算量,可以用来衡量算法/模型的复杂度。

在一个模型进行前向传播的时候,会进行卷积、池化、BatchNorm、RELU、Upsample等操作。这些操作都会有其对应算力消耗,其中,卷积的计算力消耗所占比重最高。

1.7.6 骨干网络(Backbone)、中间部件(Neck)、检测头(Head)

物体检测器(Object detector)的结构分为这三个部分。

如图所示,输入图像经过Backbone进行特征提取后传入Neck,细化特征后传入检测头Head,完成预测后输出特征图。

Backbone负责从输入图像中提取有用的特征。通常由一个卷积神经网络(CNN)组成,在大规模的图像分类任务重进行训练,如ImageNet。骨干网络在不同尺度上捕捉层次化的特征,在较早的层中提取低层次的特征(如边缘和纹理),在较深的层中提取高层次的特征(如物体部分和语义信息)。

Neck是连接Backbone和Head的一个中间部件。英文翻译为脖颈,恰似人体连接头部和身体的器官。它主要用于聚集并细化骨干网络提取的特征,通常侧重于加强不同尺度的空间和语义信息。颈部可能包括额外的卷积层、特征金字塔网络或其他机制,以提高特征的代表性。

Head是物体检测器的最后一部分。它负责根据Backbone和Neck提供的特征进行预测。它通常由一个或多个特定任务的子网络组成,分别执行分类、定位,以及最近的实例分割和姿势估计。头部处理颈部提供的特征,为每个候选物产生预测。最后,一个后处理步骤,如非极大值抑制(NMS),过滤掉重叠的预测,仅仅保留置信度最高的检测结果作为输出。

1.7.7 特征金字塔网络(Feature Pyramid Network,FPN)

由不同大小特征图构成的层次模型,主要用于在目标检测中实现多尺度检测。大的特征图适合检测较小的目标,小的特征图适合检测大的目标。

卷积神经网络输出特征图上的像素点,对应原始图像上所能看到区域的大小称之为“感受野”,卷积层次越深,特征图越小,特征图上每个像素对应的感受野越大,语义信息表征能力越强。但是特征图的分辨率较低,几何细节信息表征能力较弱;特征图越大,特征图上每个像素对应的感受野越小,几何细节信息表征能力强,特征图分辨率较高,但语义表征能力较弱。为了同时获得较大特征图和较小特征图的优点,可以对特征图进行融合。

1.7.8 滑动窗口

通过滑窗法流程图可以很清晰地理解其主要思路:首先对输入图像进行不同大小窗口的滑窗,进行从左到右、从上到下的滑动。每次滑动的时候都会对当前窗口运行一次分类器(分类器是事先训练好的)如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。

滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小的时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,并不推荐采用滑窗法。

1.7.9 选择性搜索(Selective Search,SS)

1.7.9.1 什么是选择性搜索

滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的,学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此提高计算效率。选择搜索方法是当下最为熟知的图像bounding boxes提取算法,由Koen E.A于2011年提出。选择搜索算法的主要思想:图像中物体可能存在的区域应该是某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes。

首先对输入图像进行分割算法产生许多小的子区域;其次,根据这些子区域的相似性(主要依靠颜色、纹理、大小和填充等进行判断)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常我们所说的候选框。

如图所示,(a)中物体可以通过颜色区分;(b)中物体可以通过大小区分但无法通过颜色区分;(c)中物体可以通过纹理区分,也无法通过颜色区分;(d)中轮胎是车的一部分,并不是因为颜色相近或纹理相近,而是因为车轮包含在车上。

如图所示,选择性搜索的过程。

1.7.9.2 选择性搜索流程

选择性搜索流程图如下:

1.7.9.3 选择性搜索的优点

划分了区域且不用遍历全图进行搜索,故计算效率优于滑窗法;由于采用子区域合并策略,所以可以包含各种大小的疑似物体框,降低了因物体框大小一致导致漏检的情况;合并区域相似的指示多样性,提高了检测物体的概率。

1.8 数据表示

1.8.1 向量(vector)

向量为一个一维数组,通常包含n个分量。

例如y=\begin{bmatrix} p_{c}\\ b_{x}\\ b_{y}\\ b_{w}\\ b_{h}\\ C_{1}\\ C_{2}\\ C_{3} \end{bmatrix}y_{true}=\begin{bmatrix} 1\\ 40\\ 45\\ 80\\ 60\\ 0\\ 1\\ 0 \end{bmatrix}y_{pred}=\begin{bmatrix} 0.88\\ 41\\ 46\\ 82\\ 59\\ 0.01\\ 0.95\\ 0.04 \end{bmatrix}。其中p_{c}为预测结果的置信概率,b_{x}b_{y}b_{w}b_{h}为边框坐标,C_{1}C_{2}C_{3}为属于某个类别的概率。通过预测结果、实际结果来构建损失函数,损失函数包含了分类和回归两部分。

1.8.2 张量(tensor)

张量就是一个多维数组。

如图所示,标量(即一个单独的数)就是0维的张量,矢量/向量/一维数组也就是1维的张量,矩阵/二维数组就是2维的张量,以此类推……

我们可以将三维张量表示成一个长方体的样子,就形成了我们最常见的张量形态。

1.9 效果评估

1.9.1 分类子问题评估

分类子问题使用Precision、Recall、F1等指标来进行评估

1.9.2 定位子问题评估

使用IoU(Intersection over Union,交并比)来判断模型定位的好坏。

1.10 损失函数

损失函数是用来衡量一个算法的好坏的标准。损失函数值越大,表明算法的效果越差,损失函数值越小,表明算法的效果越优良。

损失函数通常由分类损失和回归损失组成:

L=L_{cls}+L_{reg}

其中,分类损失通常由交叉熵表示,回归损失由均方误差函数表示:

L_{cls}=\frac{1}{2}\sum_{k}^{}\left ( y_{k}-t_{k} \right )^{2}     L_{reg}=-\sum_{k}^{}t_{k}logy_{k}

在分类损失中y_{k}是神经网络的输出,t_{k}是监督数据,k表示数据的维度;在回归损失中log表示以e为底数的自然对数,y_{k}是神经网络的输出,t_{k}是正确解标签且只有正确标签的索引为1,其余索引均为0。

1.11 多尺度检测

即为使用大小不同的特征图进行检测。尺度即为形状尺寸,输入和输出也成为输入特征图、输出特征图。

大特征图,卷积较浅,适合识别较小的物体;小的特征图,卷积较深,适合识别大的物体。

1.12 特征融合

将尺度不同的特征图融合在一起以兼具大小特征图的优点。

融合方式主要有两种:

add:小特征图进行上采样(大特征图进行下采样),按元素进行逐位相加

concat:按照指定的维度进行连接

上采样和下采样都是指特征图的空间尺寸变化操作。

上采样(upsampling)常用于将特征图的空间尺寸恢复到原始输入尺寸,或者增加特征图的分辨率。常见的上采样操作包括反卷积(Deconvolution)或转置卷积(Transpose Convolution)和插值(Interpolation)。反卷积操作通过学习可逆卷积核来进行上采样,而插值操作则通过插值算法(如最近邻插值、双线性插值等)对特征图进行填充和插值,从而增加特征图的尺寸。

下采样(downsampling)通常称为池化(Pooling),它的作用是减小特征图的空间尺寸。最常见的池化操作是最大池化(Max Pooling),它将原始特征图划分为不重叠的小区域,然后在每个区域中选择最大值作为采样点,从而减小特征图的宽度和高度。池化操作有助于提取特征的平移不变性,同时减少了特征图的尺寸,减少了参数量和计算量,缓解了过拟合。

二、传统目标检测算法

2.1 图像处理的任务分类

图像处理包括图像分类、目标检测、光学字符识别(Optical Character Recognition,OCR)、图像分割、图像拼接、图像配准、人脸识别、图像去噪、图像复原、图像超分辨率重建、图像压缩

下面是OCR识别的流程

2.2 传统目标检测算法流程

传统目标检测算法流程分为三个步骤:区域选择/穷举——>特征提取——>目标分类。

流程图如下:

2.2.1 区域选择

主要用于生成候选区域,在图像中定位出可能包含目标的位置。在这一步骤中,通常采用滑动窗口的方式对整张图像进行遍历,同时设置不同尺寸和长宽比的框,尽可能找到更多目标存在的位置。具体步骤如下:

  • 滑动窗口遍历:通过在图像上以不同尺寸和长宽比窗口进行滑动,覆盖整个图像,以检测出尽可能多的包含目标的区域(示例图详见1.7.8 滑动窗口一节);
  • 纹理特征和颜色特征提取:对于滑动窗口中的区域,提取其纹理特征和颜色特征等信息。这些特征可以帮助区分目标和背景,从而辅助后续的目标分类工作;
  • 非极大值抑制:滑动窗口会生成大量重叠或相似的候选区域,通过非极大值抑制减少冗余的候选框数量。详见1.7.2节。

候选区域生成的这一过程虽然能够有效定位出目标可能存在的位置,但是由于需要遍历整张图像并生成大量的候选区域,因此计算效率低下。并可能产生大量冗余窗口(虽然采用NMS可以减少一些,但仍会存在许多冗余窗口),这些冗余窗口对后续的特征提取和分类都会造成速度和精度上的影响。

2.2.2 特征提取

在特征提取阶段,常用的特征包括方向梯度直方图(Histogram of Oriented Gradient,HOG)和尺度不变特征转换(Scale-Invariant Feature Transform,SIFT)等。这些特征对于不同的图像背景和目标具有一定的鲁棒性,但在面对复杂背景、光照变化、模糊扭曲等因素时,肯呢个表现出一定的局限性。如果输入图像中存在上述情况,单纯地依靠传统特征提取算法可能无法很好地设计一个具有高鲁棒性的算法。由于特征提取阶段所提取到的特征直接影响着后续分类器的精度,因此特征提取非常重要。

2.2.3 目标分类

目前目标检测中常用的分类器包括:

  • 支持向量机(Support Vector Machine,SVM):SVM是一种监督学习算法,用于进行二分类和多分类任务。基本思想是在特征空间找到一个最优超平面,能够将不同类别的样本分开。SVM在目标检测中被广泛应用,具有较高的分类性能和泛化能力。

  • AdaBoost(Adaptive Boosting):AdaBoost是一种集成学习算法,通过迭代训练一系列弱分类器,然后将他们组合成一个强分类器。AdaBoost在每一轮迭代中,都会调整训练样本的权重,使得之前分类错误的样本在后续迭代中得到更多关注。它在目标检测中也有一定的应用。

  • 随机森林(Random Forest):随机森林也是一种集成学习算法,由多课决策树组成。每棵树都是通过对训练集进行自主采样得到的。在每个节点上,通过随机选择一部分特征进行分裂。最后,通过投票或取平均的方式进行分类。随机森林适用于处理高维数据和大规模数据集,通常具有较高的准确性和鲁棒性。

(以上图片均取自百度百科)

2.3 传统目标检测算法的问题

传统目标检测主要存在两个问题:

候选区域生成不准确:传统方法在候选区域生成阶段往往难以准确估计目标的位置,尤其是对于目标尺寸和长宽比变化较大的情况,难以生成高召回率的候选区域;

特征提取缺乏鲁棒性:由于受到各种干扰因素的影响,传统方法在特征提取阶段难以提取到具有高鲁棒性的特征,这会影响到后续目标分类准确度。

现在,我们大多采用的是基于深度学习的目标检测算法,它可以很好地避免传统方法的弊端。这是因为基于深度学习的目标检测方法将候选区域生成、特征提取和目标分类三个步骤放入一个深度学习框架中进行端到端的训练,从而加快了检测速度并提高了效率。下面,我们将开始介绍基于深度学习的目标检测算法。

三 、RCNN系列

3.1 RCNN

3.1.1 介绍

R-CNN,全称Region with CNN features。由Ross Girshick在CVPR 2014中提出。主要采用候选区域方法(Region Proposal Method),创建目标检测的区域改变了图像领域实现目标检测的模型思路,R-CNN是以深度神经网络为基础的目标检测模型。

用CNN提取出Region Proposal中的Features,然后进行SVM分类和bbox的回归。采用将检测问题转化为分类问题的思想。fast R-CNN和Faster R-CNN都是延续R-CNN的思路。

3.1.2 算法流程

R-CNN的简要检测流程如下:

流程可以分为四个步骤:

  • 候选区域获取:对输入图像执行SS算法(大约2s),找到RP
  • 候选区域特征提取:将每一个RP输入到预训练好的AlexNet(去除全连接)中,提取特征向量(4096)
  • 候选区域对应特征分类(SVM):对每个目标(类别)训练一个SVM分类器,识别该区域是否包含目标
  • 使用回归器精细修正候选框位置:对于每个类,训练一个线性线性回归模型判断当前框定位是否准确

算法流程图如上所示。R-CNN框架如下:

候选区域获取主要采用选择性搜索(SS)算法,前面已经详细介绍过,这里不再复述。我们直接从步骤二开始介绍。

3.1.3 候选区域特征提取

在R-CNN中,将2000个候选框缩放到227×277大小,接着将候选区域输入事先训练好的AlexNet CNN网络中,获取4096维的特征得到2000×4096维矩阵。

2000是候选框的数量,2000×4096维的矩阵就代表每个候选框都有一个4096维的向量。

3.1.4 候选区域对应特征分类(SVM)

将特征提取的输出(2000×4096维矩阵)传入每一类训练好的SVM分类器进行分类操作判断该特征向量属于哪一个分类。;R-CNN会为每个类别的目标专门训练一个SVM分类器。在为线性SVM分类器训练准备数据的过程中,将包含目标的候选区域标注为正样本,背景区域标注为负样本。

将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘获得2000×20维矩阵表示每个候选框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS)剔除重叠候选框,得到该列即该类中得分最高的一些候选框。

矩阵相乘示意图如下:

IoU是计算两个框重叠程度的值,IoU值越大,表面两个框重叠程度越高,候选框中的区域目标为同一物体的概率越大通过计算IoU并采用NMS的原则,可以确保检测结果具有最高的置信度,且不会出现冗余的重叠框。

3.1.5 使用回归器精细修正候选框位置

通过SS算法得到的20个候选区域位置不一定准确,因此采用20个回归器对NMS处理后剩余的候选框进行回归操作,最终得到每个类别的修正后bounding box。

如图所示,黄色框表示最先得到的候选区域Region Proposal,绿色框表示人工标注的实际区域Ground Truth,红色框表示Region Proposal进行回归后得到的预测区域,可以用最小二乘法解决线性回归问题。回归得到的红色框更接近真实框。

3.1.6 分类器的选择

我们在目标检测中使用SVM分类器而不采用CNN的Softmax层进行分类,主要有以下四点原因:

  • 训练数据的不同处理:在训练CNN提取特征时,通常会使用较低的IoU阈值(如0.5),这样可以生成更多的正样本,即使是不分包含目标的bounding box也会被标记为正样本。而在训练SVM时,对于正样本的要求更加严格,通常需要较高的IoU阈值(如0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值