前言:本文梳理了目标检测的相关背景,定义,挑战,损失函数及模型方法的发展,为希望学习相关知识的新手提供了相对比较全面易懂的简要介绍,同时结合本笔者自身研究方向的知识展开了相关的思考。
第一部分我们主要回答两个问题:目标检测在实际中有哪些应用以及为什么我们需要研究它的原因。
问题1:在我们日常生活中有哪些可以想到的目标检测应用呢?
比如,打卡时需要人脸检测,购物时可以进行商品检测与文本提取,检血时可能需要细胞检测与病理检测,垃圾分类时可使用垃圾检测避免误分类现象等。
这些都说明:目标检测不管是在我们的日常生活领域,交通领域,工商业领域还是医学领域中都有着广大的应用需求与前景。再回到我们日常的校园生活中,学校的智能食堂及智能MY PASS门禁系统也都需要目标检测技术的支持。
问题2:为什么我们需要目标检测?
由此可见,目标检测存在于我们生活中的方方面面,为我们的生活生产提供了极大的便利与高效的技术支持。虽然目前目标检测技术已经有着众多的落地应用,算法也相对成熟并取得十分不错的效果,但它还有许多挑战值得我们去研究(这个我们后面会讲到)。正所谓:没有最好,只有更好。
第二部分,我们主要会介绍目标检测的相关定义,挑战,经典的数据集以及相关的评价指标。在介绍数据集之前,我们会先结合目标检测的定义及挑战,以损失函数的角度概览目标检测的相关改进发展。从而使大家更好地理解后面所介绍的目标检测模型方法。
首先,目标检测在CV领域中所处的地位是怎么样的?与其它任务的区别是?
目标检测与分类、分割并称为CV的三大主要任务,他们之间的区别主要如下图所示。
从任务的角度来看,目标检测可以看成是分类与分割任务的一座过度桥。这也是目标检测研究的重要性所在原因之一。
那到底什么是目标检测呢?或者说目标检测的任务是什么呢?
目标检测实际上就是找出图像中所有感兴趣的目标(object),并获得这一目标的类别信息和位置信息。因此,目标检测任务可以解耦成分类任务和定位任务。
从目标的定位角度出发,目标检测需要解决的核心问题主要有3个:
那么对于一个理想的目标检测器,我们当然希望它能够在解决上述核心问题的前提下,具有高的准确度及效率。
因此,为了实现我们所想要的检测器,我们需要解决什么问题?或者说我们将会面临怎么样的挑战呢?
从高准确度的角度来看,在现实场景中常见的挑战主要有:
目标检测是一个非常接地气的实际应用技术,它通常需要应用在实时处理的场景之中,比如自动驾驶系统。而且它还有可能需要同时处理成千上万的数据。因此,除了考虑高准确度还需要考虑处理时间,占用内存,消耗流量等方面的效率问题。
那么面对上面的挑战,我们一般有什么方法去解决它呢?下面给出一个示例短暂快速的了解一番。
在现实中常见的场景有小目标检测场景。我们认为小目标检测场景就很好的包含了上述所提及的所有可能的问题与挑战。对于低像素问题,多数研究采用图像重构方法来解决,对于易遮挡问题,大多研究通过上下文语义信息来辅助检测,对于小尺寸问题则通过尺度自适应变换来解决,对于大批量数据问题可通过降低参数来实现。
从任务上来看,目标检测的挑战是分类挑战与定位挑战的结合。对于两个挑战,我们应该如何去优化?
对于两个挑战的优化,目标检测损失函数的发展可以由上图来概括。不管是分类任务还是定位任务都可能面临样本分布不均匀,数据分布不一致等问题,因此,后面所提出的优化损失函数也包含对这些问题的改善。比如,Focal loss和DR loss,AP loss,Balanced L1 loss都解决了不平衡的问题。其中:
由于篇幅及时间的限制,我们主要的关注点是在IOU loss上(与后面讲的评价指标息息相关),因此这里我只对上面的损失函数发展做一个简单概述。
目标检测在定位上的准确度会对模型分类的结果有所影响。因此,好的定位有利于模型精度的提高。在IOU Loss提出来之前,检测上有关候选框的回归主要是通过坐标的回归损失来优化。但很明显L1和L2 Loss存在比较大的问题:
而且,基于L1/L2 Loss的坐标回归不具有尺度不变性,且并没有将四个坐标之间的相关性考虑进去。因此,像L1/L2 Loss直接的坐标回归实际上很难描述两框之间的相对位置关系。
因此,在ACM2016的论文中提出了IOU loss,它将四个坐标点看成一个整体进行计算,具有尺度不变性(也就是对尺度不敏感)。IOU Loss的定义是先求出预测框和真实框之间的交集和并集之比,再求负对数,但是在实际使用中我们常常将IOU Loss写成1-IOU。如果两个框重合则交并比等于1,Loss为0说明重合度非常高。因此,IOU的取值范围为[0,1]。
虽然IOU Loss虽然解决了Smooth L1系列变量相互独立和不具有尺度不变性的两大问题,但是它也存在两个问题:
因此,IOU Loss虽然比较简单直观,但它不是最好的选择!
针对IOU无法反映两个框是如何相交的问题,GIOU通过**引入预测框和真实框的最小外接矩形(类似于图像处理中的闭包区域)**来获取预测框、真实框在闭包区域中的比重。这样子,GIOU不仅可以关注重叠区域,还可以关注其他非重合区域,能比较好的反映两个框在闭包区域中的相交情况。
从公式上来看,GIOU是一种IOU的下界,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1。因此,与IOU相比,GIoU是一个比较好的距离度量指标。
虽然GIOU通过引入闭包区域缓解了预测框与真实框相交位置的衡量问题,但其实际上仍存在两个问题:
因此,考虑到GIOU的缺点,DIOU在IOU的基础上直接回归两个框中心点的欧式距离,加速了收敛速度。DIOU的惩罚项是基于中心点的距离和对角线距离的比值。这样就避免了GIOU在两框距离较远时产生较大闭包时所造成的Loss值较大而难以优化的情况。
虽然DIOU Loss通过中心点回归缓解了两框距离较远时难优化的问题,但DIoU Loss仍存在两框中心点重合,但宽高比不同时,DIOU Loss退化为IOU Loss的问题。因此,为了得到更加精准的预测框,CIOU在DIOU的基础上增加了一个影响因子,即增加了预测框与真实框之间长宽比的一致性的考量(v值)。
CIOU Loss虽然考虑了边界框回归的重叠面积、中心点距离及长宽比。但是其公式中的v反映的时长宽比的差异,而不是宽高分别与其置信度的真实差异,所以有时会阻碍模型有效的优化。
因此,EIOU在CIOU的基础上将长宽比拆开,分别计算长、宽的差异,同时引入Fcoal loss解决了难易样本不平衡的问题。
前面说IOU与目标检测评价息息相关,主要是因为目标检测在进行性能比较时一般会说明对应的IOU阈值。那目前大家一般采用的评价指标有哪些呢?
从目标检测的两个要求来看(精度和效率): 一般精度大家都会计算各种IOU阈值下的mAP值和F1分数等。mAP的计算依赖于TP,FP,TN,FN等的计算,也就是依赖Precision和Recall来计算的。因为大家或多或少都会接触过Pr和Re的计算,这里我就不详细说明了。但mAP我在下一页中会介绍。而效率大家一般都会比较FPS和参数量。当然,一般论文在这里都必须指明是在什么样的硬件条件下进行实验比较的。
作为目标检测的主要指标,mAP指的是什么?
从应用的角度出发,模型的设计与数据息息相关的。有关目标检测公开的数据集也有很多,比如最初的MNIST、ImageNet等数据集。这些数据集的大小、数量及主要面临的挑战都大不相同。
虽然公开的数据集很多,但目前最为流行的经典数据集还是COCO和PASCAL VOC。一般做通用任务或backbone时,我们都至少需要比较这两个数据集中的一个。
为便于COCO和PASCAL VOC数据集的采集制作,目标检测领域有两款开源的主流标注软件:labelme和labelImg。这两大软件都有对应的python包,所生成的数据格式为常见的三种数据集格式VOC格式,COCO格式和YOLO格式。
这三种数据格式的区别主要在于标签文件类型和bbox格式。VOC采用的是图像文件与xml标签文件,而COCO采用的是json格式,YOLO采用的是txt文本格式。如果大家有接触过一点前端的知识或者有接触过目标检测,应该是知道这三种标签文件的优劣势所在。【个人看法:json格式可以很好的将各种数据集成到一个文件中去,具有占用空间小,检索迅速的优势。而txt文本格式则具有简单易处理的有点。xml格式介于两者之间吧】
这里为什么讲数据格式,是为了方便大家快速的了解目前经典开源框架大多会采用什么样的数据书写模式,以便于大家在探索目标检测领域时能够快速的利用目前现有的代码资源。但不管是什么样的数据格式,最主要的数据导入完全解决于自己习惯的代码书写。
第三部分,我们将系统地回顾一下目标检测的方法,包括传统的目标检测方法和基于深度学习的方法。虽然传统的目标检测方法现在比较少用,但我们认为有必要了解其手工设计的特征,因为现在在工业和医学领域这些手工特征与深度学习方法的融合也带来了不错的效果。当然,我们的汇报仍然是以基于深度学习的方法为主。这里由于时间限制,而且anchor-based的方法已经有很多博文都有介绍,我就不详细介绍(只给出两张我自己整理的表单来带大家快速了解一下)
目标检测的算法发展可以追溯到很久之前,这里我根据前两年的综述论文加上这两年的发展也画了两个部分的相关模型发展轴。可以看到,目标检测算法在2012年前均采用传统算法进行处理。
但在2012年之后随着算力及数据的提升,大量的深度学习模型涌现。最开始的模型主要采用的是以RCNN为首的two-stage目标检测模型。但随着移动端对目标检测效率要求的提高,16年之后模型开始往以YOLO为首的one-stage模型发展。但前面两种模型都比较依赖anchor的设定,因此,为减少anchor对模型的影响,18年以后开始兴起了对以CornerNet为首的anchor-free研究。17年底谷歌推出了Transformers模型,随后在19年开始大火并快速地应用于CV领域。在20年时,Facebook AI团队首次将Transformers模型应用于目标检测领域,开启了目标检测新的研究浪潮,包括最近很火的Swin Transformer模型。
从上面模型的发展来看,目标检测算法可以主要可以分为以下五类。其中,传统算法比较依赖于手工特征的设计。对Anchor based的方法,可以从两个角度来看待其模型的发展,一是训练模式,二是Anchor的形状。从训练模式来看的话,Anchor based的目标检测模型主要可以分为One-stage和Two-stage模型。One-stage模型因为检测速率较快的优点多用于移动端场景,而Two-stage模型因为检测精度较高的优点多用于精装设备场景。从Anchor形态来看,对于不同的物体用更加贴合其自身形态的anchor会更加精确。其中,矩形和多边形多用于遥感和文字检测场景,而椭圆及圆形多用于遥感和医学领域。
下图是我罗列出不同类型目标检测算法中比较经典的模型及算法,在后面的讲解中主要只讲解所提到的比较经典的方法。
注:虽然上图我把YOLO Family归到Anchor based去,但不是所有的YOLO衍生算法都是Anchor based,比如YOLO就是Anchor Free,这里只不过是为了介绍方便。其他类似。
基于传统的目标检测算法主要可以分为基于特征和基于分割两个方向。
其中,基于特征的目标检测算法主要是通过找到对象的某种属性(可以是手工设计的特征也可以是算法提取的抽象特征)来实现检测与识别。
在传统的算法中,主要的特征如下图所示,有Harr特征、HOG特征、灰度特征、SIFT特征及SURF特征等。
而基于分割的目标检测算法则主要通过区域、颜色及边缘的特性来实现检测与识别。【对应的相关算法我PPT里面都有放,这里就不一一罗列啦】
传统算法的一般处理流程包括下图的六个步骤,其主要的思路就是:
下图是传统算法的一个可视化示例:
经典的传统检测算法主要有Viola Jones检测器(人脸检测),HOG检测器(行人检测),基于部件的可变形模型(DPM,物体检测)这三种。
Viola Jones检测器由三个核心步骤组成,即Haar-like特征和积分图、Adaboost分类器以及级联分类器。
其中,Harr特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征,实际上就是一种梯度算子,主要可以分为线性特征、边缘特征、点特征(中心特征)和对角线特征。
而AdaBoost是"Adaptive Boosting"(自适应增强)的缩写,是一种以集成学习为核心思想的迭代算法,其自适应性在于前一个分类器分错的样本会被用来训练下一个分类器。因此,Adaboost算法基本原理就是通过alpha将多个Weak Classifier进行合理的结合,使其成为一个强分类器。如下图所示,AdaBoost在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。具体地,每一个训练样本data都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个Weak Classifier的训练集时,它成为训练数据的概率就被降低;相反,如果某个样本点被误分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦”到难样本上。虽然AdaBoost方法对噪声及异常数据比较敏感,但与当时的其他算法相比,比较不容易过拟合。
在集成算法一般分为三种:Bagging,Boosting,Stacking(我们可以把它简单地看成并行,串行和树型)。Bagging是把各个基模型的结果组织起来,取一个折中的结果;Boosting是根据旧模型中的错误来训练新模型,层层改进;Stacking是把基模型组织起来,注意不是组织结果,而是组织基模型本身,该方法看起来更灵活,也更复杂。
梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。
HOG检测器是沿用了最原始的多尺度金字塔+滑窗的思路进行检测。为了检测不同大小的目标,通常会固定检测器窗口的大小,并逐次对图像进行缩放构建多尺度图像金字塔。同时,为了兼顾速度和性能,HOG检测器采用的分类器通常为线性分类器或级联决策分类器等。
其中,HOG特征具有以下的优缺点。
HOG特征的优点:
HOG特征的缺点:
对于任意一张输入图像,提取其DPM特征图,然后将原始图像进行高斯金字塔上采样放大原图像,然后提取其DPM特征图(2倍分辨率)。将原始图像的DPM特征图和训练好的Root filter做卷积操作,从而得到Root filter的响应图。对于2倍图像的DPM特征图,和训练好的Part filter做卷积操作,从而得到Part filter的响应图。然后对其精细高斯金字塔的下采样操作。这样Root filter的响应图和Part filter的响应图就具有相同的分辨率了。然后将其进行加权平均,得到最终的响应图。亮度越大表示响应值越大。
DPM的主要思想可简单理解为将传统目标检测算法中对目标整体的检测问题拆分并转化为对模型各个部件的检测问题,然后将各个部件的检测结果进行聚合得到最终的检测结果,即“从整体到部分,再从部分到整体”的一个过程。上右图为某一尺度下的行人检测流程,其中,左侧为根模型的检测流程,跟模型响应的图中,越亮的区域代表响应得分越高;右侧为各部件模型的检测过程。首先,将特征图像与模型进行匹配得到部件模型响应图。然后,进行响应变换:以锚点为参考位置,综合考虑部件模型与特征的匹配程度和部件模型相对理想位置的偏离损失,得到的最优的部件模型位置和响应得分。
DPM vs HOG
DPM算法优点:
方法直观简单;运算速度块;适应动物变形;
DPM算法缺点:
传统特征虽然在某些方面可以帮助深度学习模型精度的提高,但对于传统检测算法来说,特征的设计与选择极大程度上依赖于人工,其准确度、客观性、鲁棒性与泛化性都受到了一定的制约。同时,传统的算法大多采用滑动窗口算法,其计算时间效率低下,为多流程的步骤处理,处理复杂且准确度低。因此,随着算力及数据的发展,传统的检测算法明显无法满足人们的需求。
前面我们讲了传统检测在分类器识别之后还需要进行后处理操作,实际上在后面前期发展的深度学习模型也同样需要后处理步骤。因此,在进入深度学习模块的讲述前,我将回顾一下目前目标检测中最常见的后处理算法NMS的相关发展。
传统的NMS首先根据类别置信度得分对所有的bbox进行降序排列建表,然后将每个类别中置信度最高的bbox作为可靠的bbox,并分别计算其与剩余bbox的IOU,仅保留IOU小于设定阈值的bbox,以此往复循环直到结束。
因此,从公式看,NMS主要有两个度量指标:
虽然NMS可以处理掉较多的冗余框,但传统的NMS存在以下局限性:
从实验结果来看的话,soft-NMS(红色)能够比较好的缓解掉传统NMS(蓝色)暴力剔除所带来的物体遮挡漏检情况。
如果前面讲的soft NMS是通过抑制机制来改善剔除结果(降低超阈值的得分策略),那么Weighted NMS(W-NMS)则是从极大值这个方面进行改进。W-NMS认为Traditional NMS每次迭代所选出的最大得分框未必是精确定位的,冗余框也有可能是定位良好的。因此,W-NMS通过分类置信度与IOU来对同类物体所有的边框坐标进行加权平均,并归一化。其中,加权平均的对象包括M自身以及IoU≥NMS阈值的相邻框。
优点:Weighted NMS通常能够获得更高的Precision和Recall,一般来说,只要NMS阈值选取得当,Weighted NMS均能稳定提高AP与AR。
缺点:(1)仍为顺序处理模式,且运算效率比Traditional NMS更低。(2)加权因子是IOU与得分,前者只考虑两个框的重叠面积;而后者受到定位与得分不一致问题的限制。
NMS、soft-NMS及Weighted NMS的局限性:
前面所提到的NMS方法只将分类的预测值作为边框排序的依据。然而在某些场景下,分类预测值高的边框不一定拥有与真实框最接近的位置,因此这种标准不平衡可能会导致更为准确的边框被抑制掉。
之前NMS的局限性:
在此背景下,旷视IOU-Net论文提出了IoU-Guided NMS,即一个预测框与真实框IOU的预测分支来学习定位置信度,进而使用定位置信度来引导NMS的学习。具体来说,就是使用定位置信度作为NMS的筛选依据,每次迭代挑选出最大定位置信度的框M,然后将IOU≥NMS阈值的相邻框剔除,但把冗余框及其自身的最大分类得分直接赋予M。因此,,最终输出的框必定是同时具有最大分类得分与最大定位置信度的框。
IOU-Guided NMS优点:
IOU-Guided NMS缺点:
总体概览
从Softer-NMS的公式来看,Softer-NMS可以看成是前面三种NMS变体的结合,即:其极大值的选择/设定采用了与类似Weighted NMS(加权平均)的方差加权平均操作,其加权的方式采用了类似soft NMS的评分惩罚机制(受Soft-NMS启发,离得越近,不确定性越低,会分配更高的权重),最后,它的网络构建思路与IOU-Guided NMS相类似。
与IOU-Guided NMS区别
Softer-NMS与IOU-Guided NMS的出发点同样是解决定位与分类置信度之间非正相关的问题,所采用的思路一样是增加一个定位置信度的预测,但不一样的是前面提到的IOU-Guided NMS采用IOU作为定位置信度来优先排序,而这里Softer-NMS则是通过定位分布的方差来拉近预测边框与真实物体分布,即IOU-Guided NMS采用IOU作为定位置信度而Softer-NMS采用坐标方差作为定位置信度,具体的做法就是通过KL散度来判别两个分布的相似性。其中,Softer NMS论文中有两个先验假设:
(1)Bounding box的是高斯分布
(2)ground truth bounding box是狄拉克delta分布(即标准方差为0的高斯分布极限)。
Softer-NMS的优点:
Softer-NMS的缺点:
背景
Adaptive NMS是在行人检测问题上来对soft NMS改进的一种自适应阈值处理方法(即在软化得分的前提下继续软化阈值)。行人检测任务中,一个最大的问题就是目标在常规场景下一般处于密集状态。如何在解决密集检测以及密集检测之中目标之间相互遮挡的问题是行人检测的一大问题。在以往的研究中,NMS都采用单一阈值的处理方式。使用单一阈值的NMS会面临以下困境:较低的阈值会导致丢失高度重叠的对象(图中蓝框是未检测出来的目标),而较高的阈值会导致更多的误报(红框是检测错误的目标)。
所以,在密集检测场景中,我们希望:
(1)在目标密集时,可以使用较大的阈值以保证更高的召回率;
(2)在目标稀疏时,可以使用较小的阈值来剔除掉更多冗余的检测框。
思路与方法
基于上述背景,Adaptive NMS应用了动态抑制策略,通过设计计了一个Density-subnet网络预测目标周边的密集和稀疏的程度,引入密度监督信息,使阈值随着目标周边的密稀程度而对应呈现上升或衰减。具体做法:
Adaptive NMS缺点:
在以往的NMS中使用的评判指标都是IOU,但就像前面对IOU的介绍,IOU虽然简单直观,但它只考虑两个框的重叠面积(比如下图第一种相比于第三种越不太可能是冗余框)。因此,后面研究相继耶提出了许多IOU变体来使两框之间的相对位置关系描述更加准确。比如DIOU-NMS就直接将IOU指标换为DIOU。当然结合前面对IOU的介绍,这种换掉IOU指标的NMS变体也可以有很多。
DIOU-NMS优点:
DIOU-NMS缺点:顺序处理模式,计算更复杂,运算效率更低。
实际上NMS的变体不止上面提到的方法,还有其他的变体,比如从文本场景中,NMS变体主要是一种基于shape的改变;而在遥感等实时场景中,NMS变体主要是加速策略的改变,提高的的计算效率。
从以上NMS的介绍,可以看出:目前,NMS对传统NMS算法的改进主要是从极大值的选择机制,抑制冗余框的机制,IOU的评价指标,anchor的形态、位置及其所处的环境(周边的密度)等方面来进行优化。虽然NMS算法一直在不断的优化,但未来更主流的方式是nms-free。
由于时间限,而且目前有关anchor-based(one-stage, two-stage)方法的介绍已经很多了,这里就先放两张自己整理的表单吧
从上述总结的目标检测长短板及性能比较的图例来看,由于Two Stage目标检测模型事先基于候选框进行特征提取,其在候选框的定位精度与检测精度方面一般高于 One Stage 模型。虽然随着 Two Stage 模型的发展,其在检测速度方面上有所提升,但由于其复杂的 Two Stage 网络架构,以及其对候选框的提取等操作,使得其与 One Stage 模型 相比,仍具有检测速度慢、计算量庞大的局限性,从而难以落地与实时检测的移动设备。而 One Stage 目标检测模型则由于结构简单直接的优势在检测速度及实时性表现出优异的性能。虽然随着 One Stage 的发展,其在检测精度方面有所改进,但由于其对局部特征的关注较少,所以其在复杂背景场景、小目标场景或多目标场景的检测精度较低。
但不管是 One Stage 还是 Two Stage 模型,目标检测的方向均是朝着网络模型更简化,特征描述更简单、检测速度更实时、检测精度更准确与算法可解释的方向发展的。
前面我们讲的都是anchor-based方法,那么anchor-based methods有什么特征?
anchor-based methods的特征就是在同一像素点上生成多个不同大小和比例的候选框(one-stage模型通常采用滑窗(聚类)等式生成,而two-stage模型更多的是采用RPN来生成),并对其进行筛选,然后再进行分类和回归。
anchor能为检测算法带来什么样的好处?又会带来什么样的限制呢?
anchor的好处
anchor的局限
既然anchor的设计(初始化)对网络模型的影响这么大,我们是不是可以去除掉anchor来进行检测呢?基于上述的思考,anchor-free也开始迎来了自己的发展。那么anchor-free与anchor-based的区别是什么?
anchor-free 与anchor-based的区别
实际上我们前面讲的YOLO算法anchor free中比较早期的模型,所以anchor free并不是一个比较新的概念。早期的anchor-free模型可以追溯到15年CVPR的DenseBox,算是Anchor Free的起源吧。但它比同期的Faster-RCNN系列和YOLO提前数月(YOLO是16年5月)。所以,anchor free的发展历史也可以说是相对久的。
截止目前,anchor-free模型的发展主要可以分为早期探索、基于点和基于密集预测的。(这里只罗列出一部分比较有代表性的模型)
由于时间和内容的限制,这里我只介绍时间轴上的这些模型。其中,因为DenseBox对后期密集预测的anchor free模型有较大的影响,所以早期探索的模型只介绍DenseBox模型。
背景(人脸检测任务)
在图像上进行卷积等同于使用滑窗分类,为何不能使用全卷积(FCN)对整个图像进行目标检测呢?如何将FCN应用到目标检测?
检测流程
这里比较有意思的一点是DenseBox对ground truth的定义。它类似于语义分割的ground turth,如右上图,它并不采用全图进行训练,而是直接先crop出以人脸为中心并带有足够背景的patches,并resize到240*240。而且正负样本的定义也如上图所示,主要是将patch中心(0.8至1.25)区域的目标记为正样本,其他的标记为负样本。更多具体信息可以去看以下论文,这篇论文感觉还是有比较多的先进思想(与同时期文章相比)值得学习的,比如:
DenseBox使用全卷积网络,任务类似于语义分割,实现了端到端的训练与识别。
其中,在R-CNN系列中,端到端的训练方式直至Faster R-CNN的提出才开始实现,而与语义分割的结合则是从Mask R-CNN才开始。
DenseBox利用了多尺度融合的特征。
如上图,conv3_4、conv4_4,在网络中引入了上采样操作,将低层和高层的特征融合以得到更大尺度的feature map输出,而R-CNN系列直到FPN才开始使用,YOLO系列直至SSD才开始。
DenseBox使用了OHEM做负样本的难例挖掘。
在DenseBox论文中,作者通过以下两种方法做了样本均衡Balance Sampling:(1)忽略正负样本过度区域,称为gray zone,是以正样本区域边缘的两个像素范围内的区间来定义的。(2)Hard Negative Mining,首先将负样本像素中的loss按loss大小排序,选取前面的1%为hard-negative,然后保证每张图片中正负样本的数量是1:1,负样本的50%来源于hard-negative,另外的50%从non-hard negative中随机选取。
利用了圆形描述,这在当时深度学习检测也算是早的。
采用了多任务学习的方法,如下图所示:
DenseBox中增加landmark定位分支(关键点检测分支),并基于此联合landmark热度图和人脸得分热度图(boudning box)构成了新的检测损失来进一步提升目标检测的精度。如上图所示,左图为新增加的landmark定位分支,与上面真实框(人脸中心区域)的定位分支相似。二者的区别在于:人脸区域检测分支的feature map是4通道(该点到四边的距离),landmark分支的gt feature map是N通道,N对应要输出的landmark点的数目,比如人脸是72个关键点,而车辆是作者自己标注的8个关键点。
DenseBox优点
在FCN的基础上提出DenseBox直接检测目标,不依赖候选框。证明了单FCN(全卷积网络)可以实现检测遮挡和不同尺度的目标;在FCN结构中添加少量层引入landmark localization,将landmark heatmap和score map融合能够进一步提高检测性能。
DenseBox缺点
使用embeddings进行角点匹配效果不好,导致某个物体左上角匹配到另一个物体右下角。
CornerNet背景
对于姿态估计和分割的任务,它们的ground truth就是给点打标签。既然姿态估计是骨骼点代表物体,那目标检测的框实际上也可以用点来代替,比如左上角和右上角的点;既然姿态估计骨骼点也需要对同一物体,同一关节进行组合判断,那目标检测也可以通过角点之间的组合来判别是否为同一目标。受此启发,CornerNet摒弃了原本anchor-based的思想,采用keypoint-based的思路来进行检测。
CornerNet总体流程与架构
CornerNet采用Hourglass(沙漏网络)作为主干网络来提取特征,然后分成两个支路分别预测左上角和右下角坐标。每个支路文章称之为Prediction Module。在每个Prediction Module之前都会先过一个Corner Pooling(这也是CornerNet文章的一个亮点), 再分成三个子支路Heatmaps、Embeddings、Offsets。其中,heatmaps预测某位置是角点的概率、offsets预测实际角点相对于该位置的偏移、embeddings嵌入向量用来进行角点配对。
首先,heatmaps是如何找到corner的?
在CornerNet中,heatmaps主要通过扩大学习区域并进行corner pooling来确定哪些点是我们所要寻找的corner。
其次,embeddings是如何匹配corner的?
在人体姿态估计中,相对应的角点也会互相匹配,因此,CornerNet也借鉴了这种思想,认为属于同一目标的corner embedding应该具有较高的相似度,而不同物体之间的corner embedding应该具有较远的距离。总而言之,就是寻找一个特征空间来区分不同object之间的corner。
最后,为什么需要offset?
模型设计存在下采样过程,这就不可避免的是一些点的坐标在下采样时会产生一些模糊/偏移。而且,这种模糊性的位置偏移误差会随着下采样层数的叠加而累计。那么在小目标的检测上,这种误差累计就会被放大,对于小目标来讲是不可接受的。所以需要引入offset偏移量来对位置的模糊偏移进行修正。
CornerNet评价
检测精度可以与anchor-based的方法相媲美。但物体的特征一般集中在物体内部,左上、右下两个点的特征并不明显,不容易确定位置。而且,如上图,同类别不同目标的角点容易被错误地匹配从而形成误检框。检测速度还有较大的优化空间。
CornerNet-Lite是两个CornerNet变种的组合:
因此,CornerNet-Saccade可以看成是CornerNet引入two-stage的思想,来提高模型的精度,因而比较适合离线处理;而CornerNet-Squeeze可以看成是YOLOv3思想即one-stage模型优化思想的注入,用来提高模型的检测速度,因而CornerNet-Squeeze比较适合实时处理。总而言之,CornerNet-Lite结合了上述两个模型的改进达成了检测精度与效率提高的双赢。
ExtremeNet背景
前面我们也说了,左上与右下角点的特征不足以代表目标物体的特征,而且大多的角点都不在目标物体上。因此,单纯地依赖角点进行目标检测,模型可能不能很好地理解目标物体的特征。
所以,ExtremeNet把左上与右下角点替换成目标的中心点以及其在四个正方向上的极值点(extreme points)来实现检测。ExtremeNet的极点在对象上,是视觉可分的,有一致的局部外观特征(如人的最上面的是头)。
ExtremeNet流程
如下图所示,ExtremeNet使用HourglassNet检测每个类的5个关键点,offset预测与类别无关,与极值点有关,中心点没有offset预测,所以网络的输出是5C个热图和8个偏移图。
与CornerNet的区别
ExtremeNet评价
背景
与ExtremeNet类似,CenterNet也是基于中心点来实现目标的检测。CornerNet和ExtremeNet都需要对点进行配对分组,但这个过程会带来比较大的计算量。所以,CenterNet只考虑使用中心点来定义目标,并通过中心点直接回归预测目标的特性,比如宽高信息,类别,3维位置和朝向等。
与CornerNet/ExtrmeNet的对比
与acnhor-based的对比
CenterNet优点:
CenterNet缺点:
背景
CircleNet是基于肾小球背景下提出来,而肾小球是细胞。通常这种细胞都比较偏向圆形。因此,使用基于圆形的定义比矩形的定义要好,也更加贴合细胞的形态,而且具有旋转不变性!
流程
通过特征提取网络提取图像的特征,而后分别采用三个输出模块进行预测:(1)heatmap,用来表示circle的中心点;(2)local offset,用来修正circle的中心点位置;(3)circle radius,用来表示circle的半径。
与CenterNet的相同点
CenterNet和CircleNet中的冲突都是目标框的中心点重合。其中,CenterNet主要是基于COCO数据集实验的,而CircleNet是肾小球数据,这两个数据库目标重合的概率非常小。所以在训练时,中心点重合所导致的优化冲突微乎甚微。因此这两篇文章没有针对这个这个矛盾点进行改进。
FCOS背景与思路
前面讲到的CornerNet、CenterNet等都是基于关键点来检测的,而接下来讲的FCOS则是基于分割的思想来进行检测的。而FCN算是语义分割的鼻祖算法,即通过一系列的卷积与反卷积实现了对像素级的分类。之前的目标检测受制于anchor的使用,所以就没有在FCN上进行进一步的探索。而基于关键点检测的anchor-free存在中心重叠检测的问题(CenterNet/CircleNet),因此,FCOS就使用FCN网络直接对图中的每一个像素点的位置到真实物体四边的距离进行一个回归。所以,FCOS与语义分割一样,处理对象都是像素点。从总体的思路来看,FCOS可以理解为是 DenseBox基于FCN的改进版。
不管是CenterNet的中心重叠问题,还是语义分割的问题,都存在一个像素点只有一个label的问题。但如左边这个图(人与羽毛球拍),如果时目标检测任务的话,那么人与球拍重叠区域的像素点应该同时具备两个label。所以,在目标检测中,如果发生物体区域重叠的现象,那么一个像素点就不仅只有一个类别label,可能是两个甚至更多个。
而且FCOS主要是在行人检测,车辆检测的背景下提出来的。那么物体相互重叠/遮挡的问题就更加明显了(23.16%)。因此,FCOS在重叠部分的点是具有多个监督信息的。但模型训练时监督信息肯定只能有一个,因此FCOS通过引入特征金字塔FPN网络来缓解目标重叠问题,即通过不同尺度的特征图分支头来实现不同物体的检测。(这点更YOLOv3中引入多个分支不同分支采用不同的anchor的思想相类似)
由于多尺度结构的存在,因而需要确定这个bbox分配给哪个层级来预测。
传统的FPN做法是会根据这个box的面积进行分配,而FCOS会给每一个层级分配阈值范围,然后根据Box中点到四边的最大距离落在哪个层级的阈值范围内,那这个Box就分配给哪个层级来预测。
FCOS网络结构
FCOS的网络架构如下图所示。其中C3, C4, C5表示骨干网络的特征图,P3到P7是用于最终预测的特征级别。这五层的特征图后分别会跟上一个head。每个head又包括了三个分支,分别用于分类(Focal loss)、中心点置信度(BCE loss)和回归的预测(GIOU loss)。因此,FCOS网络最后的输出层包含**(4+C)个通道,分别对应预测C个类别得分及4维bbox参数**(像素点到真实框四边的距离)。
在FCOS网络中,你会发现它增加了一个中心点置信度的预测,那么为什么要添加这个分支呢?
FCOS内,我们会把目标框内所有的点定义为正样本。这样子,远离真实物体中心,靠近物体边缘的像素点回归所得到的四边距离效果不佳,质量较差。因此,需要通过引入center-ness分支,来抑制这些低质量的目标框。center-ness作用于网络中,和分类分支是并行的,是用来预测每个点的中心度。训练的时候,使用BCE loss,而测试的时候,会把中心度的得分和分类分支的得分做一个相乘,作为该点的最终得分。这样,真正远离中心点的点的置信度得分就会被削弱。因此,便可以结合NMS来将这些点加以过滤。
如下图所示,我们可以看到较大物体的AP显著提高,这就是由于较大物体的中心偏离比较严重。
FCOS的优点
1.将检测和FCN进行结合,思想新颖。
2.proposal free和anchor free,减少了超参的设计。
3.不使用trick,达到了单阶段检测的最佳性能。
4.模块化,对其他视觉任务具有较大的可扩展性。
FCOS的缺点
中心点的定义模糊,依赖标注信息,box的预测分配不是很合理。
FoveaBox概述
作为与FCOS和FSAF同期的Anchor-free论文,FoveaBox在整体结构上也是基于DenseBox加FPN的策略,主要差别在于FoveaBox只使用目标中心区域进行预测且回归预测的是归一化后的偏移值,还有根据目标尺寸选择FPN的多层进行训练。
FoveaBox正负样本定义
在FoveaBox中,正样本区域(fovea)的选择并不是真实框所包围的全部像素,而是原区域的一个衰减区域(可以看作是目标的中心区域,缩放因子是人为设定的),这个与DenseBox的设置一样,这样设置的原因是为了防止语义区域的相互交叠!
FoveaBox预测选择
同其他目标检测算法相同,由于目标尺寸的多样性,所以直接预测目标的边界是不稳定的。因此,FoveaBox同FCOS一样通过不同层级来预测不同的目标。不同的是,FoveaBox将目标尺寸归为多个区间,各层负责特定尺寸范围的预测。其中,用于控制特征金字塔每层回归尺寸范围的缩放因子也是人为设定的。
FoveaBox坐标映射
与DenseBox和UnitBox不同,FoveaBox并不是直接学习目标中心到四个边的距离,而是去学习一个预测坐标与真实坐标的映射关系。
FoveaBox网络架构
FoveaBox主干网络采用特征金字塔的形式,每层接一个预测Head,包含分类分支和回归分支。同时,FoveaBox提出了特征对齐的trick,主要是对预测Head进行改造。从实验结果上来看,特征的对齐对模型的精度也有一定的提升。
评价
anchor free与anchor based的比较就好比one stage与two stage的比较,前者优势都在于检测速度,而后者的优势都在于检测精度。同比于one stage与two stage的发展趋势,anchor-free在精度层面也在不断的提升。而anchor free在精度上之所以能够媲美 anchor-based,最大的功劳应该归于FPN,其次归于Focal Loss。
各种anchor-free方法的关键在于它们的ground truth是如何定义的。合适的ground truth更加贴合物体真实形态的分布,因此,从先验上来看,模型的检测精度也会对应的提高。走在前端(时间轴)的anchor-free方法灵感大多来源于人体姿态估计和语义分割的处理思想。由此对应地衍生出了我们前面所讲的Keypoint-based和Dense-predicted的anchor-free模型,这两种方法的本质将anchor转换成了point或者说是region来实现物体的检测。
Keypoints-based(CornerNet、CenterNet和ExtremeNet)的目标检测方法的异同点
CornerNet、CenterNet等基于关键点的anchor-free模型通过高斯模型泛化关键点区域来定义正样本数据点(heatmap定义),减少模型负样本的惩罚力度;FCOS定义bbox内的像素点均为正样本,而FoveaBox通过衰减因子将bbox缩放,并将缩放后区域FoveaBox内的像素点定义为正样本。
Transformer是近年来比较火的一个专题,最开始是应用在NLP领域。从研究的数据来看,近几年来在CV、语音视频、多模态等领域的研究发表非常地迅猛。其中,在CV领域上的Transformer一般统称为Vision Transformer, 简称Vit。
同样的,Transformer在目标检测的研究也发表了很多paper. 左边是今年五月更新的一篇综述整理的有关Transformer的目标检测模型(中科院、东南大学等),右边是各模型在COCO数据集上的SOTA表。虽然这篇综述是在今年五月更新的(今年五月是第三版,第一版是在去年8月,如果没有记错的话),但它实际也没有把最新的一些相对比较火的模型涵盖进去(比如Swin Transformerv2, VitDet等)。
与CNN-based的区别
既然是讲Transformer在目标检测的模型,那必定要先介绍Transformer检测的开篇之作DETR。与前面的Anchor-based相比,虽然DETR是首个用Transformer来做目标检测的,但是它与前面提到的CNN-based的方法都是采用cnn作为主干网络用来提取图像特征,不同的是Anchor-based是对预定义的密集anchors进行分类和回归,可以看成是image-to-boxes,对于anchor-free就是image-to-points或者说是pixels-to-boxes/image-to-regions,而DETR是把目标检测任务看作一种图像到集合(image-to-set)的任务,其中set的作用跟anchor-based中的anchor作用相类似。这个集合实际上就是一个可学习的位置编码,也就是后面我们会讲到的解码器中输入的object queries。与先前密集的anchor设计相比,object queries是一种稀疏化的设计。
DETR的网络结构
(1)DETR 首先使用CNN backbone来提取图像特征,并将其展平(flatten)后加入空间位置编码(spatial positional encoding)得到序列特征,作为Transformer encoder的输入。其中,原文利用ResNet提取特征图,但特征图转成特征序列后,图像就会失去了像素的2D空间分布信息,所以Transformer引入空间的位置编码。虽然如此,但DETR在消融实验也指出:即使不给encoder添加任何位置编码,最终的AP也不会下降很多。
(2)其次,encoder接收序列特征并做self-attention机制的处理,得到特征图上每个instance的global attention,即编码后的特征图global features。由于Transformer 中的attention机制具有全局感受野,可以建立图像序列的上下文关系,所以DETR能进行特征图的全局分析,从全局上将检测出所有目标所构成的整体作为目标。
(3)然后,decoder部分则接收来自encoder的输出结果和一组可学习的object queries,最终输出所预测的BBox集合。
图说明:绿色表示小物体,红色表示水平的大物体,蓝色表示竖直的大物体。
有关object query的理解:
(4)最后,FFN基于特征聚合后的object queries预测边界框的标准化中心坐标,高度和宽度,而线性层使用softmax函数预测类别标签。由于object queries并不像anchors那样密集铺开的,所以DETR使用匈牙利算法(二分图匹配算法)对predictions和ground truth boxes进行最佳匹配,从而实现label assignment。
匈牙利算法的理解:
如中间匹配的图,匈牙利算法就是一种用增广路径求二分图最大匹配的算法,核心是寻找增广路径。通俗易懂的讲就是两两分组,达到最佳效率的匹配。算法的时间复杂度为O(NM),其中N为二分图左边的顶点数,M为二分图中边的数目。
DETR优点:
DETR缺点:
Deformable DETR对DETR的问题分析与改进思路
上面两个问题都来源于Transformer需要多的、冗余的像素进行处理。那既然是这样子的话,我们是否可以让Transformer在下采样的同时学习到更多更有效的区域呢?
Deformable DETR的注意力机制
与DETR中的attention机制相比,公式上的区别在于图像特征是否有约束,也就 p q + Δ p m q k p_q+\Delta p_{mqk} pq+Δpmqk,这里 p q p_q pq指每个 query 对应的一个二维 reference point(二维的索引), Δ p m q k \Delta p_{mqk} Δpmqk是相对于 p q p_q pq的位置偏移。更加详细地,DETR为每个query安排指定数量(远小于pixel数)的key,也就是说,deformable attention是在原有的attention机制中对于输入加入了可学习的扰动偏移项,使得该attention只需要关注feature maps中的部分关键内容。由此,encoder初始化的权重不再是统一分布,即对每一个query,原本的key是所有的位置而现在的key是参考点(reference point)邻域内的位置。因此,与DETR相比,Deformable DETR只将更有意义的、网络认为更包含局部信息的位置作为key(数量固定)。
Deformable DETR中Transformer的结构
将Transformer中encoder的attention module替换为multi-scale deformable attention module。其中,Encoder中的multi-scale feature maps来自于ResNet的C3到C5 stage,最后C5经过stride为2的3*3卷积得到C6。使用了multi-scale deformable attention module后就不需要FPN来融合不同尺度信息了。而在decoder中,只将cross-attention module替换为multi-scale deformable attention module,而self-attention module保持不变。
Deformable DETR评价
“ DC5”表示消除ResNet的C5阶段的步幅,而改为增加2。
“ DETR-DC5 +”表示对DETR-DC5进行了一些修改,包括使用Focal Loss进行边界框分类以及将目标查询数增加到300。
背景
DETR通常需要大量的训练时间,大规模的标注数据集。这一点其实和ViT很像,但由于Transformer的全局注意力机制,所以原始的Transformer-based方法缺乏归纳偏置inductive biases。这使得原始的Transformer-based方法需要依赖大规模数据集训练从能达到相对不错的效果。在DETR中,作为检测器的Transformer模块是没有经过预训练的,而在ViT中Transformer通常需要经过预训练。在一般情况下,预训练有利于模型更快的收敛,提高模型的学习能力。但在实际应用中,我们不一定拥有大规模的标注数据来进行训练及预训练,所以我们能否利用无监督的预训练来提升DETR中Transformer的收敛速度呢?要知道无监督预训练的关键在于代理任务pretext的设计。其中,pretext可以理解为是一种为达到特定训练任务而设计的间接任务。
如上图的右子图可知,基于CNN的pretext主要偏向于视觉分类任务,也就是classification,而基于Transformer的方法更加偏向NLP的序列任务。但目标检测是CV任务,处理的对象(像素)是具有连续语义的;而NLP处理的一般是离散的字符。显然与先前像BETR这样的Transformer模型相比,基于CNN的pretext设计更加合适目标检测任务。然而,从下图右子图可以看出,偏向定位任务的模型主要关注空间定位学习,具有边缘/形状的归纳偏好,而偏向分类任务的模型主要关注的物体的内部特征,具有内部/纹理的归纳偏好。
因此,现有基于CNN与Transformer方法所提出的pretext并不适用于目标检测任务。那么我们应该如何定义pretext?
pretext的定义
为实现无监督预训练DETR,UP-DETR提出了一种random multi-query localization的pretext task来预训练DETR中的object query,以此来预训练Transformer的定位能力。具体而言,就是将添加位置编码后的图像特征输入到encoder,并从给定图像中随机crop patches,得到该补丁对应框的坐标,长宽,再将这个补丁作为query,进行一些简单的数据增强变换,输入到 DETR的decoder中。由此模型的目标变成了给定patch找他们在原图中的位置。通过这种方式构成一个无监督预训练的形式。最后,对于一个无监督预训练好的DETR,只需输入patch,便能实现无监督定位patch的功能,而且不需要额外的nms后处理。
multi-learning
前面提到pretext任务主要是基于定位展开的,但目标检测任务是定义与分类的耦合。这两个任务有不同的归纳偏好,比如定位更关注于物体的边角轮廓,而分类可能更关注于纹理、材质等等。因此,pretext任务的设计缺少对分类判别性的考虑。为避免query patch检测的预训练破坏分类性能,UP-DETR将目标检测任务解耦从而进行多任务的学习,即冻结预训练的CNN backbone,并利用patch特征重构损失来保持Transformer的特征识别能力(保留上下文构建的特征语义性)。在实验中,我们发现,固定已经预训练好的CNN权重对于后面transformer的预训练和UP-DETR在下游目标检测中的表现有着至关重要的作用。同时,考虑到输出头通常是分类和定位两个分支,UP-DETR增加feature reconstruction分支,通过梯度回传来使经过CNN后得到的特征和经过transformer得到特征具有一致的判别性。但从消融实验来看,对于下游目标检测任务,feature reconstruction分支并没有带来额外的判别性信息,固定预训练的CNN权重才是涨点的关键。
在DETR的论文中,不同的object query关注不同的位置区域和框大小。因此,如何进行query patches 和object query之间的分配,以适应不同框的定位?
query patches 和object query
UP-DETR提出了一种multi-query location的方法,利用object query shuffle和attention mask方法来解决。其中, deocder使用attention mask来控制不同object query之间的交互,以此确保query patch的独立性;而object query shuffle则是用来确保embedding和query patch的随机性,以去除object query之间的显示分配,达到模拟真实数据场景的效果。
UP-DETR流程
首先,利用冻结参数的CNN backbone提取视觉特征 。然后,将位置编码添加到特征映射中,并传递到DETR中的Transformer编码器。对于随机裁剪的查询patch,用具有全局平均池化(GAP)的CNN主干网络提取patch特征,然后将其与目标查询相加之后输入到Transformer的解码器中。在预训练过程中,解码器预测与查询patch的位置相对应的边界框。其中,CNN 参数在整个模型中是共享的,而Transformer是无监督预训练的。
UP-DETR评价
背景
在20年的一篇CNN/transformer的对比论文中,发现:与CNN(CNN的归纳更加偏向纹理,虽然CNN也可以很好的归纳形状【The Origins and Prevalence of Texture Bias in Convolutional Neural Networks论文中,但是依赖于一些数据增强】)相比,MLP-Mixers和Vision Transformer更倾向于形状,而且许多Vision Transformer模型的表现类似于MLP-Mixers。
ViT可以将transformer直接作为backbone以纯序列到序列的角度来进行图像分类。要知道的是,ViT与CNN不同,它是对远程依赖关系和全局上下文信息进行建模,而不是对局部和区域级别的关系进行建模。此外,ViT缺乏像CNN那样的分层结构(multi-scale)来处理视觉实体规模的变化。那么ViT能做目标检测backbone吗?(ViT能不能够将预训练好的通用视觉表征从图像级识别转移到复杂得多的2D目标检测任务中?)
YOLOS的架构(在VIT上的改进)
YOLOS 结合了 DETR 的编码器-解码器颈部和 ViT 的仅编码器主干,来重新设计仅编码器的检测器。
左上图说明:显示前十个[DET] token在COCO 验证集所有图像上的所有框预测。(蓝、绿、红分别代表小、中、大的目标)。
(1)YOLOS 删除了用于图像分类的 [CLS] 标记,并将一百个随机初始化的检测 [DET] 标记添加到用于对象检测的输入补丁嵌入序列中。
(2)ViT 中使用的图像分类损失被替换为二分匹配损失,以执行类似于 DETR 的对象检测。这可以避免将ViT的输出序列重新解释为2D特征图,并防止在标签分配期间手动注入启发式和对象2D空间结构的先验知识。
所以,不同的[DET] token对目标位置和大小敏感,而对目标类别不敏感。即YOLOS在不知道确切的空间结构和几何形状的情况下执行任何维度的物体检测是可行的。
YOLOS的分析
一些说明:不同模型的缩放策略: width scaling (w), uniform compound scaling (dwr) and fast scaling (dwr).
YOLOS的优点:
YOLOS的缺点:
背景
前面讲的one-stage模型和anchor-free模型精度的替身都需要依赖多尺度的特征提取来提高检测的精度。所以FPN在检测任务中算是标配。FPN通过自上而下(top-down)和横向连接来将早期高分辨率的特征和后期更强的特征结合起来。
但如果主干网络不是分层网络,则所有的特征图将具有相同的分辨率,因而FPN就会失去它的作用。然而原始的ViT便不是分层网路,因此,ViT无法像CNN那样得到不同分辨率的特征图。所以,受CNN思想的启发,Swin Transformer和ViT Mask-RCNN等通过引入了分层的结构设计即逐级下采样来获取不同分辨率的特征图。虽然的确提高了ViT-backbone的目标检测算法的精度,但是FPN真的那么重要吗?是否能有其他的途径加以解决呢?可不可以消除对主干网络的分层约束,并使用普通主干网络进行目标检测呢?
思路
与YOLOF相似,ViTDet论文抛弃常见FPN的设计,利用原始的ViT架构从单尺度特征图构建简单的特征金字塔,即直接利用ViT最后一层特征进行简单地上采用及下采样便可重建出一个简单的FPN,而没有必要像CNN那样从不同stage抽取特征。也不需要像标准的FPN那样做top-down,bottom-up的特征融合。真的就简单粗暴的把最后一层的特征图(因为它应该具有最强大的特征)通过一组卷积或反卷积来得到不同尺度的特征图,达到跟FPN一样的性能。具体来说,他们使用的是尺度为 1/16(stride = 16 )的默认 ViT 特征图。
YOLOF论文:FPN 模块的主要增益来自于其分治优化手段,而不是多尺度特征融合,FPN 模块中存在高分辨率特征融合过程,导致消耗内存比较多,训练和推理速度也比较慢,对部署不太优化,如果想在抛弃 FPN 模块的前提下精度不丢失,那么主要问题是提供分治优化替代手段,所以YOLOF中就借鉴ASPP,RFBNet的思想,引入空洞卷积,来协助进行多级特征的捕获代替设计了Dilated Encoder 串联多个不同空洞率的模块以覆盖不同大小物体,最后通过作者提出了新的均匀匹配策略,(核心思想就是不同大小物体都尽量有相同数目的正样本)Uniform Matching的作用完成了整体SiMo的结构设计,从实验结果来看Uniform Matching 作用非常大,进一步说明该模块其实发挥了 FPN 的分治作用。Dilated Encoder 配合 Uniform Matching 可以提供额外的变感受野功能,有助于多尺度物体预测,其实简单来说是通过系化对于FPN的研究,根据FPN的思想提出了Dilated Encoder和Uniform Matching,实际上不是舍弃了FPN,是传承了FPN。
在分层主干网络中,上采样通常用横向连接进行辅助,但ViT通过实验发现,在普通 ViT 主干网络中横向连接并不是必需的,简单的反卷积就足够了。研究者猜想这是因为 ViT 可以依赖位置嵌入来编码位置,并且高维 ViT patch 嵌入不一定会丢弃信息。
分析
由于ViT中的patch之间是没有重叠的(在每个patch,每个窗口内做attention无法得到全局的信息),所以需要通过一些手段让不同的patch之间进行信息交互。ViTDet并没有像Swin那样采用shift操作(跨层移动窗口),而是采用全局注意力( global propagation~=outer transformer)和卷积形式(window attention~=inner transformer )来做信息交互。(outer transformer和inner transformer是transformer in transformer论文),实际上就是四个block在做完window atteion(每个block又会分成cell)之后再在最后一个阶段进行一个global propagation,这样简单的交互就可以把全局信息和局部信息的纳入学习之中,并且大量的减少了模型训练所需的内存和计算量。
具体操作:在ViTDet中使用了极少数(默认为 4 个)可跨窗口的块。研究者将预训练的主干网络平均分成 4 个块的子集(例如对于 24 块的 ViT-L,每个子集中包含 6 个),并在每个子集的最后一个块中应用传播策略。
目前基于Transformer的目标检测算法主要以DETR和ViT等系列为主展开,其中以DETR扩展的Transformer检测模型主要是在object query(加入先验知识)、attention机制(稀疏化,关注有意义的区域)及label assignment(OTA等)机制,以及特征匹配与分配机制等的改进与扩展。
Object query的思考
对于object query,怎么样编码更精确及合适数量的query才能使更快速的get 到想要的feature?
Positional embedding的思考
由于需要精准定位物体,DETR必须能够很好地编码特征的绝对/相对位置关系。因此,目前也有许多研究是从Positional embedding展开的。比如有添加相对位置编码的embedding,主要是从NLP衍生到2D图像。
而将Transformer作为backbone的目标检测方法很容易被引入到其他如R-CNN等模型中去完成更多密集型的预测任务。在Trannsformer-backbone中更多考虑的是attention机制及multi-scale,multi-stage的设计。如多层级的PVT可以从高到低处理不同分辨率下的图像特征,而如SWIN-Transformer通过滑窗的attention机制可以在避免计算量平方型增长的情况下同样实现短程和长程依赖关系的描述。其中,基于ViT的Transformer模型更多的需要预训练。
从前面对目标检测算法的回顾来看,我们可以看出目标检测算法实际上从繁到简(如anchor,nms,iou等是一个有设置到adaptive再到free的一个过程,又如multi-stage到one-stage),从粗到细(如iou和nms考虑更多的细节,比如密集程度,更多的定位信息)而发展的。
下面是本次专题汇报的class project
本次汇报到此结束,欢迎大家一起交流与讨论。