R-FCN、Mask RCNN、YoLo、SSD、FPN…你都掌握了吗?一文总结目标识别必备经典模型(二)

2023-03-17 11:07 1166 阅读 ID:882
机器之心
机器之心

本文将分 3 期进行连载,共介绍 17 个在目标检测任务上曾取得 SOTA 的经典模型。

  • 第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、OHEM
  • 第 2 期:R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet
  • 第 3 期:RRC detection、CornerNet、M2Det、FOCS、ObjectBox

您正在阅读的是其中的第 2 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。

第 1 期回顾:R-CNN、SPP-Net、Fast R-CNN…你都掌握了吗?一文总结目标检测必备经典模型(一)

本期收录模型速览

 目标检测作为计算机视觉的基本问题之一,是许多其他计算机视觉任务的基础,如实例分割、图像字幕、对象跟踪等。简单来说,目标检测就是对图片中物体正确分类,同时找到物体的具体位置,具体是指识别图片中有哪些物体以及物体的位置(坐标位置)的技术。在互联网、大数据、人工智能等技术的发展浪潮下,目标检测展现出巨大的应用价值,受到工业界、学术界越来越多的关注。

目标检测的发展大致经历了两个历史时期:“ 传统的目标检测时期 ” ( 2014年以前 ) 和 “ 深度学习的目标检测时期 ” ( 2014年以后 )。本文重点回顾深度学习时代的经典模型。在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。我们在介绍过程中,将分两类进行分析。两阶段模型(two-stage detection)因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法,R-CNN系列工作就是这一类型的代表。单阶段模型(one-stage detection)没有中间的区域检出过程,直接从图片获得预测结果,也被称为Region-free方法。

本文回顾目标检测中必备的TOP模型,包括one-stage模型和two-stage模型。  

一、two-stage 模型

1、 R-FCN

前文描述的 R-CNN,SPPNET,Fast R-CNN,Faster R-CNN 的目标检测都是基于全卷积网络彼此共同分享以及 ROI 相关的彼此不共同分享的计算的子网络,R-FCN算法使用的这两个子网络是位置比较敏感的卷积网络,而舍弃了之前算法所使用的最后的全连接层,目的是让所有的计算都可以共享。因此,R-FCN的出发点就是为了减少重复计算,尽可能地共享网络。为了将 translation variance 引入到全卷积网络中,本文设计了一种特殊的卷积层作为全卷积网络的输出,该卷积层输出 position-sensitive 的 score map,每个 score map 引入了位置信息。在网络的最后一层,再接一个 position-sensitive RoI pooling 层,完成对物体的检测。在整个网络框架中,所有可学习的层都是卷积层,同时把空间位置信息引入特征学习中,使得整个网络可以进行端到端的学习。

R-FCN 算法进行目标检测的步骤如下:(1)候选区域:使用的是 RPN(Region Proposal Network)候选区域网络,同时 RPN 网络结构是全卷积的网络;(2)分类和回归:采用的是 RPN 特征共享的性质来进行目标的分类。在进行 bbox 回归的时候,通常将 C 选取为 4。

R-FCN采用 ResNet 101 的卷积层作为基础的卷积网络结构,再接一个卷积层用于降维,最后接一个产生 k^2(C+1)个 score map 的 position-sensitive 的卷积层,然后接一个 position-sensitive RoI pooling 层,最后使用 Softmax 判断 RoI 的类别。此外,还可以接一个产生 4k^2个 map 用于回归 Bounding box 的位置,同样应用 position-sensitive RoI pooling 层,最后得到一个回归的位置。具体结构如图1所示。

图1. R-FCN的整体架构。使用区域建议网络(RPN)提出候选RoI,然后将其应用于score map。所有可学习的权重层都是卷积的,并且是在整个图像上计算的;每个RoI的计算成本可以忽略不计
图2. R-FCN的关键思想。图中有一个全卷积网络产生的k×k=3×3的位置敏感分数图。对于一个RoI中的每一个k×k bins,只对k^2个map中的一个进行汇集(用不同的颜色标记)

R-FCN是 Faster R-CNN 的改进版本,其 loss function 定义基本上是一致的:

在该网络框架下,所有可学习的层都是卷积层,使用 Online Hard Example Mining (OHEM) ,几乎不会增加训练时间。

当前 SOTA!平台收录 R-FCN 共 47 个模型实现资源。

2、 Mask-RCNN

Mask R-CNN是一个两阶段的框架,第一个阶段扫描图像并生成建议区域(proposals,即有可能包含一个目标的区域),第二阶段分类提议并生成边界框和掩码。Mask R-CNN是在Faster R-CNN的基础上添加了一个预测分割mask的分支,即在目标检测的基础上再进行分割。Mask R-CNN算法主要是Faster R-CNN+FCN,更具体一点就是ResNeXt+RPN+RoI Align+Fast R-CNN+FCN,如下图所示:

                                                              图3. Mask R-CNN 结构图

  Mask R-CNN算法步骤如下:(1)输入一张图片,进行数据预处理(尺寸,归一化等等);(2)将处理好的图片传入预训练的神经网络中(例如,ResNet)以获得相应的feature map;(3)通过feature map中的每一点设定ROI,获得多个ROI候选框;(4)对这些多个ROI候选框送到RPN中进行二值分类(前景或后景)和BB回归(Bounding-box regression),过滤掉一部分候选的ROI;(5)对剩下的ROI进行ROI Align操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);(6)对这些ROI进行分类(N类别分类),BB回归和Mask生成(在每一个ROI里面进行FCN操作)。

首先,Mask R-CNN采用ResNet-50或者ResNet-101作为特征提取器提取特征,然后采用FPN(特征金字塔网络)的结构来进行特征融合。FPN可以同时利用低层特征图的空间信息和高层特征图的语义信息,其原理就是把分辨率较小的高层特征首先通过1×1卷积降维(减少计算量),然后上采样至前一个特征图的相同尺寸,再进行逐元素相加,就能得到融合后的特征。在得到增强后的特征后,利用RPN(Region Proposal Network)帮助网络推荐感兴趣的区域(ROI区域)。

接下来,需要把所有的ROI都pooling成相同大小的feature map后,才能将它reshape 成一个一维的向量,从而完成后面的分类与回归任务。与Faster RCNN中的ROI pooling不同,使用ROI pooling会造成较大的量化误差,这对于分割任务来说会造成较大的误差,因此Mask R-CNN中对ROI pooling进行了改进,提出了ROI Align。RoI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。值得注意的是,在具体的算法操作上,RoI Align并不是简单地补充候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套流程:(1)遍历每一个候选区域,保持浮点数边界不做量化。(2)将候选区域分割成 𝑘×𝑘 个单元,每个单元的边界也不做量化。(3)在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。  

图4. RoIAlign: 虚线代表一个特征图,实线代表一个RoI (在本例中为2×2 bins)。RoIAlign通过对特征图上附近的网格点进行双线性插值来计算每个采样点的值。在RoI、bins或采样点中涉及的任何坐标都不进行量化处理

根据论文所述,我们通过ROI Align可以把RPN生成并筛选后的框所对应的区域全部变成我们需要大小的特征图。而最后的任务就是对这些特征图来做进一步的分类、定位、分割。分类和定位和RPN里面的分类定位原理相同,对于分割,如图11右侧所示,在得到ROI Align处理过的特征后,由于前面进行了多次卷积和池化,减小了对应的分辨率,mask分支开始利用反卷积进行分辨率的提升,同时减少通道的个数,maskrcnn使用到了FPN网络,通过输入单一尺度的图片,最后可以对应的特征金字塔,首先将ROI变化为14x14x256的feature,然后进行了5次相同的卷积操作,然后进行反卷积操作,最后输出28x28x80的mask,即输出了更大的mask。

                                                                        图5. 网络头结构

最后,整个Mask RCNN网络结构包含两部分,一部分是backbone用来提取特征(上文提到的采用ResNet-50或者ResNet-101作为特征提取器提取特征),另一部分是head用来对每一个ROI进行分类、框回归和mask预测。为了产生对应的Mask,文中提出了两种架构,即左边的Faster R-CNN/ResNet和右边的Faster R-CNN/FPN,如图11所示。

当前 SOTA!平台收录 Mask RCNN 共 13 个模型实现资源。

二、one-stage 模型

1、  YOLO

YOLO是one-stage方法的开山之作。它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类而得名。YOLO 是基于回归方法的,不需要区域选择操作,替换成了回归操作来完成目标检测和目标分类。YOLO架构如图12所示。相比Faster RCNN,YOLO结构简单,网络中只包含conv,relu,pooling和全连接层,以及最后用来综合信息的detect层。其中使用了1x1卷积用于多通道信息融合。

图6. 检测网络有24个卷积层,然后是2个全连接层。交替出现的1×1卷积层减少了前几层的特征空间。在ImageNet分类任务中以一半的分辨率(224×224输入图像)对卷积层进行预训练,然后以两倍的分辨率进行检测

YOLO的工作步骤如下:第一步:输入一张需要检测的图片,将这张图片分割为 7×7 的网络结构(即图13中的S=7);第二步:对于 7×7 网格中的每一个网络,都提供 2 个预测的边框,这两个边框包含了每个边框的目标的置信信息和每一个边框区域在不同类别上的可能性;第三步:将第二步中预测出的 7×7×2 个目标网络的性能进行排列,设定合适的阈值进行筛选,依据设定的阈值将目标所在可能性比较低的网络窗口剔除,留下可能性比较高的网络窗口,同时用 NMS 将冗余窗口去除即可。

图7. 模型。YOLO将检测建模为一个回归问题。它将图像划分为一个S×S的网格,并为每个网格单元预测B的边界框、这些框的置信度和C类概率。这些预测被编码为一个S×S×(B∗5+C)张量

  YOLO 前半部分的网络结构和GoogleNet 的结构模型比较相似,YOLO 网络结构的特点主要在后面两层结构上,是在卷积层操作之后连接了一个全连接层,同时这个全连接层是 4096维度的,然后在这个全连接层之后又连接了一个 7×7×30 维度的向量。这个 7×7 就是上文中的将图片分割成的 7×7 的网络结构,之后就需要在每一个网络上预测目标可能会出现的两个可能的位置,同时预测这个目标出现的位置在图片目标上的置信信息和类别,也就是说需要预测两个目标在每一个网格中,每一个目标都是有中心点坐标和长宽这 4 个维度的信息,1 个目标的置信信息,还有 20 个目标的类别数,使用 VOC上面的 20 个类别,就会有(4+1)×2+20=30维度,因此后面连接了一个 7×7×30 维度的向量。所以,就可以使用前文的 4096 维度的全连接层在每一个网格上直接回归出目标所需要的置信信息和类别数。

YOLO训练过程中最终优化的目标函数为Loss = λ_coord权重* 坐标预测误差 + (含object的box confidence预测误差 + λ——noobj* 不含object的box confidence预测误差) + 类别预测误差:  

当前 SOTA!平台收录 YOLO 共 3 个模型实现资源。

2、 SSD

YOLO 算法中的 7x7 网络结构让目标的定位不是很准确,让检测的精确度不是很高,SSD (Single Shot MultiBox Detector)算法结构模型就是将 YOLO 的回归方法和 Faster R-CNN 的 anchor box思想结合起来,并对整个图片的不同位置的不同尺度的区域特征进行回归操作,这样既可以保持 YOLO回归方法的快速检测的优势,又使用 Faster R-CNN 中的 anchor 机制保证窗口预测的准确度。

SSD网络主体设计的思想是特征分层提取,并依次进行BB边框回归和分类。因为不同层次的特征图能代表不同层次的语义信息,低层次的特征图能代表低层语义信息(含有更多的细节),能提高语义分割质量,适合小尺度目标的学习。高层次的特征图能代表高层语义信息,能光滑分割结果,适合对大尺度的目标进行深入学习。所以作者提出的SSD的网络理论上能适合不同尺度的目标检测。SSD网络中分为了6个stage,每个stage能学习到一个特征图,然后进行边框回归和分类。SSD网络以VGG16的前5层卷积网络作为第1个stage,然后将VGG16中的fc6和fc7两个全连接层转化为两个卷积层Conv6和Conv7作为网络的第2、第3个stage。接着在此基础上,继续增加了Conv8、Conv9、Conv10和Conv11四层网络,用来提取更高层次的语义信息。如图8为SSD的网络结构。在每个stage操作中,网络包含了多个卷积层操作,每个卷积层操作基本上都是小卷积。

图8. 两个检测模型的比较,SSD和YOLO。SSD模型在基础网络的末端增加了几个特征层,预测不同比例和长宽比的默认框的偏移量以及它们的相关置信度。在VOC2007测试中,输入尺寸为300×300的SSD在准确性上明显优于其448×448的YOLO对应模型,同时也提高了速度

在SSD中,作者充分的吸取了Faster R-CNN中的Anchor机制,在每个Stage中根据Feature Map的大小,按照固定的Scale和Radio生成Default Boxes。在每张特征图上得到许多Default Box后还需要生成相应的特征向量,用来进行边框回归和分类。对于分类,SSD网络采取为每个类别进行打分的策略,也就是说对于每个Default Box,SSD网络会计算出相应的每个类别的分数。假设数据集类别数为c,加上背景,那么总的类别数就是c+1类。SSD网络采用了c+1维向量来分别代表该Default Box对于每个类别所得到的分数。

SSD网络对于每个stage输出的特征图都进行边框回归和分类处理,SSD的损失包括类别损失和定位损失,其中,类别损失L_conf又分为正样本和负样本类别损失,联合损失函数如下:  

为了提高检测准确度,作者还引入了四种辅助方法:
匹配策略:即ground truth和Default box的匹配。首先,根据最大的overlap将ground truth和default box进行匹配(根据ground truth找到default box中IOU最大的作为正样本);然后,将default boxes与overlap大于某个阈值(目标检测中通常选取0.5)的ground truth进行匹配。
Default boxes生成器:来自网络内不同层次的特征图具有不同的(经验)感受野大小。在SSD框架内,Default box不一定要对应于每一层的实际感受区,可以令特定的特征图学会对物体的特定比例作出反应。假设我们想使用m个特征图进行预测。每个特征图的default box的比例计算为:  

Hard Negative Mining:经过匹配策略会得到大量的负样本,只有少量的正样本。这样导致了正负样本不平衡,作者经过试验表明,正负样本的不均衡是导致检测正确率低下的一个重要原因。所以,作者在训练过程中采用了Hard Negative Mining的策略,根据Confidence Loss对所有的box进行排序,使得正负样本的比例控制在1:3之内。
数据增强:这一步骤的目的是使得模型更加鲁棒。作者在文中具体采用的增强手段包括使用整张图像作为输入;使用IOU和目标物体为0.1、0.3、0.5、0.7和0.9的patch,这些patch在原图大小的[0.1, 1]之间,相应的宽高比在[1/2, 2]之间;随机采取一个patch;使用光学增强。

当前 SOTA!平台收录 SSD 共 27 个模型实现资源。

3、 FPN

特征金字塔(Feature pyramids)是多尺度目标检测系统中一个重要组成部分,近年来,由于特征金字塔存在影响模型计算速度、占用内存等问题,大多数深度网络避免使用这个结构。在此之前,SSD模型提出了一个“内置的”特征金字塔解决了上面问题。但是SSD网络只采用自底向上的路径不够完美,此外,SSD舍弃了高分辨率的底层网络层,对小目标的检测效果不够理想。本文作者提出了基于Bottom-up pathway、Top-down pathway and lateral connections策略的Feature Pyramid Network (FPN)结构,在目标检测任务中取得了不错的效果。

Bottom-up pathway:自底向上的路径就是网络的前向计算过程,特征图经过卷积层池化层一般会越来越小,也有一些特征层的输出和输入大小一样。作者将大小不变的feature map层称为stage,每次抽取的特征都是每个stage最后一个层的输出。最后一层具有最强的语义特征,众多层一起构成了特征金字塔。对于ResNet网络,作者使用每个stage的最后一个残差结构的特征激活输出。将这些输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出,相对于输入图像则具有{4, 8, 16, 32}像素的步长。考虑到内存占用问题,作者没有将conv1包含在金字塔中。
Top-down pathway and lateral connections:自顶向下的路径是通过对网络上采样(upsampling)进行的,横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。在融合之后为了消除上采样的混叠效应(aliasing effect),采用3*3的卷积核对每个融合结果进行卷积,并假设生成的融合特征层为{P2, P3, P4, P5}和原来自底向上的卷积结果{C2, C3, C4, C5}对应。

图9. 顶部:一个自上而下的结构,包含skip connections,预测是在最细的层次上进行的。底部:本文模型有一个类似的结构,但利用它作为一个特征金字塔,在所有层次上独立进行预测
                                    图10. 一个说明侧向连接和自上而下途径的构件,通过添加而合并

图10给出了构建自上而下特征图的构件。对于一个较粗分辨率的特征图,将空间分辨率提高2倍(为简单起见,使用最近的邻居提高取样)。然后,通过元素相加的方式将上层map与相应的下层map(经过1×1卷积层以减少通道尺寸)合并。这个过程反复进行,直到生成最精细的分辨率map。为了开始迭代,只需在C5上附加一个1×1卷积层以产生最粗分辨率的map。采用3*3的卷积核对每个融合结果进行卷积,并假设生成的融合特征层为{P2, P3, P4, P5}和原来自底向上的卷积结果{C2, C3, C4, C5}对应。

当前 SOTA!平台收录 FPN 共 4 个模型实现资源。

4、 RetinaNet

在one-stage检测器中,检测器须处理约100K的样本,其中大多数都是容易分类的负样本,正样本很少,即使采用困难样本挖掘等启发式抽样,其训练过程还是主要由容易分类背景负样本主导。本文提出了Focal Loss,能够根据检测结果的置信度动态调整其对损失函数的贡献。样本对损失函数的贡献会随着置信度的提高而降低,因此,尽管one-stage检测存在海量容易分类的背景样本,但是由于其置信度高,所以其对损失函数的占比小,因此不会主导训练过程,从而解决了one-stage检测器正负样本不均衡的问题。

首先从二分类的交叉熵损失函数出发分析:

p表示模型预测当前样本标签为1的概率。为了描述方便,定义p_t 为:

进一步,解决正负样本不均衡的方法是在交叉熵损失函数中加入加权因子α,交叉熵损失函数改写为:

通过调节加权因子可以平衡类别间的不均衡。在实际应用中,可以将α 设为类别频率的相反数,即频率高的就将α 调低;或者将α 作为超参数调参。但是尽管α 可以调整正负样本的均衡,却不能调整难易样本的均衡,而one-stage检测器的主要问题在于大量容易负样本构成了大部分的损失,并主导了梯度,主导了训练过程,因此作者在交叉熵中引入了与预测置信度相关的调节因子,如下式所示:

对于容易样本,其预测的置信度必然相对较高,即预测的p_t 值较大,那么(1−pt) 就可以降低损失的权重。另外还有一个调节惩罚力度的超参数γ ,γ∈[1,5] 。为了能够对正负样本和难易样本都取得一个较好的均衡,作者采用以下形式的损失函数:

  在二分类的任务中,默认的初始化往往会选择使得预测正类和负类的概率都为0.5。在这样的初始化下,在类别不平衡的情况下,频繁出现的类别所造成的损失会支配总的损失,导致早期训练的不稳定。为了解决这个问题,作者引入了 "先验 "的概念,即在训练开始时由模型对稀有类(前景)估计的p值。用π表示先验,并将其设置为:模型对稀有类别样本的估计P很低,例如0.01。作者分析这是对模型初始化的改变,而不是损失函数的改变。作者发现,在类别严重失衡的情况下,这可以提高交叉熵和焦点损失的训练稳定性。

为了验证Focal Loss的有效性,作者设计了一个简单的one-stage目标检测器——RetinaNet,如下图所示:  

图11. RetinaNet网络架构在前馈ResNet架构之上使用了一个特征金字塔网络(FPN)backbone(a),以产生一个丰富的、多尺度的卷积特征金字塔(b)。在这个backbone网络上,RetinaNet附加了两个子网络,一个用于分类anchor box(c),一个用于从anchor box回归到ground-truth object box(d)

RetinaNet的网络结构是在FPN的每个特征层后面接两个子网络,分别是classification subnet(图11c) 和 bbox regression subnet(图11d)。由图11,FPN通过自上而下的路径和横向连接增强了标准卷积网络,因此该网络从单个分辨率输入图像有效地构建了丰富的多尺度特征金字塔,参见图11(a)-(b)。Retinanet在resnet 架构头部构建FPN结构,构建了P3~P7的特征金字塔,具有C=256t channels。

当前 SOTA!平台收录 RetinaNet 共 210 个模型实现资源。

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn