统一视角理解目标检测算法:最新进展分析与总结

共 5591字,需浏览 12分钟

 ·

2020-12-12 01:06

↑ 点击蓝字 关注极市平台

作者丨王Sr@知乎
来源丨https://zhuanlan.zhihu.com/p/333743702
编辑丨极市平台

极市导读

 

本文是一篇目标检测算法的进展总结与分享,作者用更为清晰的体系框架,去帮助大家更好的理解现有的目标检测算法机器的发展。通过对目标检测问题的建模方式进行更为细致的探讨与分析,引出Dense or Multi-stage refine是提高检测算法性能的关键,合理折中效果更佳的观点。>>12月10日(周四)极市直播|汤凯华:利用因果分析解决通用的长尾分布问题

这是一篇目标检测算法的进展总结与分享。和以往的很多总结不同,本文不会以论文为中心介绍各种算法,而是尝试以更统一的视角看待目标检测算法及其发展。首先先多啰嗦几句,也算是给本文定个基调:目标检测中有好多概念,例如两阶段、单阶段、anchor-free、anchor-based等等,但其实这些概念并没有十分严密的理论体系,也没有非常明确的划分标准,这也导致目前目标检测领域的研究看起来比较混乱。所以本文尝试理出一条更为清晰的体系框架,来更好的理解现有的目标检测算法,或是给以后的研究提供一个更清晰的思路。

前言

从我个人的理解来说,目前基于深度学习的端到端算法大体都由输入+网络+输出组成。遵循这个思路,目标检测算法研究大致也可以大致分为三类,一类从输入的角度入手,研究在训练及测试过程中将怎样的图像输入网络和怎样将图像输入网络,例如多尺度训练和测试、data-augmentation、数据resampling等等;另一类则从输出的角度入手,研究应该怎样对检测问题进行建模,也就是研究网络应该输出怎样的形式,以满足目标检测任务的需求;最后一类则从网络的角度入手,研究怎样的网络结构可以更好的连接输入与输出,根据输入更高效的提取更为有效的特征用以得到更准确的输出,这一类的研究也很多,例如研究FPN等等。当然,虽然上面总结成了三个方面,但并不意味着这三类研究相互独立,实际算法设计时,上面的三个方面可能会相互影响,只有相互匹配才能取得更好的效果。而本文将重点对其中的第二类,也就是从输出形式的角度对目标检测算法进行分析与介绍,这类问题也是目前在目标检测领域我个人看到的最多被研究也是最值得被研究的问题,因为“输入”与“网络”很大程度上会服务于“输出”。

multi-region classification & regression

那么接下来进入正题,重点对目标检测问题的建模方式进行更为细致的探讨与分析。建模方式之所以会成为目标检测领域的重点问题,主要原因就在于目标检测问题的输出形式更为复杂,具有不确定性,这里可以对照图像分类问题来看,图像分类问题的输出形式就是一个简单的类别,输出形式是与输入无关的;但是目标检测问题则不一样,图片中的物体个数并不确定,可能包含数十个物体,但也可能压根就没有物体,而这种不定数量的输出就会给算法的设计带来很大的问题。因此,我们需要考虑怎样对目标检测问题进行建模,使其输出形式固定下来。而目前广为采纳的建模方式是采用了分治的方式,也就是说在一张图片上预定义若干regions(这些regions在图片的不同位置,具有不同的长宽,也可以相互重叠),然后对每个region逐一进行分类与回归,更具体的解释分类与回归任务就是:这个region附近是否存在物体,如果存在,那么这一物体是什么类别,而它的位置相对于这个region又在哪里。也就是说,目标检测任务被建模成了multi-region classification & regression
如果我们接纳了这个建模思路,那么接下来我们需要解决的问题就是:1)我们应该怎样设计这个“region”:例如应该设计多少个“region”,每个“region”该长什么样子,这些“region”又该在图片的什么位置?;2)每个“region”应该负责多大的范围?换句话说每个“region”都需要“管辖”它周围的区域,负责找到它周围的物体,但这个“管辖范围”怎样定义?3)我们怎样更有效的提取每个“region”的特征,完成分类和回归任务,也就是找到它负责区域范围内的物体。接下来我将对这三个问题进行更具体的介绍。
首先来聊一聊第一个问题,“region”这个概念。
它的含义很广,在不同的论文方法里也有不同的名字:例如更早期的传统sliding windows检测算法中,它叫做windows;在RetinaNet等anchor-based的算法中,它的名字叫做anchor(在图片中不同位置密集平铺的一系列不同尺度、不同长宽比的框);而在FCOS等anchor-free的算法中,它又代表着anchor point(再解释一下就是,虽然这类anchor-free的算法中没有anchor的概念,但实际上这类算法依旧需要在feature map上的每个位置上进行输出,实际上每个输出依旧隐式地代表了图片中的某个区域,从这个角度说,这类算法和anchor-based方法在思路上没啥太多差别,或者说只是回归时的reference不太一样)。而下一个问题就是这个“region”怎么设计,这个问题可能不能一概而论,而是需要因地制宜。更具体的说,这个“region”的设计更多的反映的是对于所需要解决的问题及场景的先验,例如:如果我们要检测的物体都是瘦长的,比如说行人,那么我们的这个region就可以更多的设计为瘦长的形状;再比如,如果我们知道物体更可能出现在哪个区域,那么我们就可以在这个区域铺设更多的“region”,当然这个场景在目标检测领域不太常出现,但或许我们可以把单目标跟踪任务理解为这种情况。
接下来再来聊一聊第二个问题,每个“region”应该负责多大的范围。
这个问题在我个人理解中可能是目标检测领域最难解决的问题之一。每个“region”都应该“管辖”它周围的区域,负责找到它附近的物体,但是问题就在于这个“管辖范围”应该怎样定义:一方面,我们需要保证这个“管辖范围”足够大,足以使得无论物体出现在图片的哪个位置,都会使其至少落入一个“region”的“管辖范围”,这是高recall的必要条件。另一方面,我们又需要保证这个“管辖范围”不太大,最直白的解释就是我们显然不可能让位于图片左上角的region判断图片右下角是否有物体;另外,我们还需要考虑尽可能避免歧义的发生,如果有两个物体出现在一个“region”的周围,那么这个“region”就会困惑究竟应该关注哪个物体。
而这个“管辖范围”的设定,也和第一个问题中“region”的设定息息相关,这两个问题通常会被一起考虑与研究。例如,如果“region”稀疏,就需要“管辖范围”一些,而如果“region”密集,“管辖范围”就可以一些。但问题远没有这么简单,我们在设定“region”和“管辖范围”的时候还会遇到很多问题,例如:在图片中,往往有些区域物体很密集,而有些区域又很稀疏,怎样设计可以使其兼顾不同的物体密度的区域?再如:图片中的物体的尺度、形状非常多变,对于各种形态的物体,怎么设计“region”并以统一的规则定义“管辖范围”?还有:“region”的数量直接决定了计算成本,一般来说越多的“region”就意味着越高的计算成本;除此之外,如果“region”设计的很密集,而“管辖范围”又比较小,那么就会导致训练过程中绝大多数的“region”都被定义为负样本,也就需要面对正负样本极端不平衡的问题。
而上述问题在论文中一般被定义为anchor design & label assignment。我们可以看一下现有算法都是怎么做的:RetinaNet在图片上均匀平铺了一系列不同尺度、不同长宽比的region(anchor),并基于gt bbox(ground truth bounding box)和anchor的IoU,定义了“管辖范围”;而FCOS等anchor-free算法中则平铺了一系列anchor point,并采用中心点距离+尺度约束的方式定义了“管辖范围”;ATSS中提出设置自适应的阈值,来定义“管辖范围”;当然上述方案都是静态的设定了“管辖范围”,近年出现了另一类改进方案,诸如FreeAnchor,AutoAssign,PAA等算法中则提出了动态的 “管辖范围”设置方案(即“管辖范围”与网络的输出相关);当然还有很多论文提出了各种各样的方案,这里就不一一列举了,之前也有很多文章对这一部分有过更具体的介绍。
Dense or Multi-stage refine
对于anchor design & label assignment的问题,可能还有另一种更巧妙的方式,而这种方式甚至在很早之前就被提出,那就是通过级联的方式来应对这个问题,也就是通过设置多级multi-region classification & regression每一级以上一级的输出结果作为新的region进一步进行refine。这种架构为后续算法的设计提供了极大的便利:首先,可以为每一级设置不同的“管辖范围”规则,由松到严,初始几级保证recall,最后几级保证precision;其次,每一级都可以仅处理上一级的输出中可能包含物体的regions(sparse regions),使得进一步加速水到渠成;除此之外,这一方案还提供了特征对齐的特性(关于这一点AlignDet中有更具体的介绍)。
实际上,如果想要得到更理想的检测算法性能,我们就需要研究dense和multi-stage refine之间的折中;在没有任何先验的情况下,sparse & single-stage的方案理论上就存在本质缺陷,一定难以取得最理想的性能。而在此框架下,一切对region和“管辖范围”的改进方案都算是锦上添花,可以进一步推动上述平衡的极限,但仍旧无法进入sparse & single-stage的“禁区”。
而近几年的目标检测算法在建模方式上的改进大体也遵循了这个思路:有些致力于解决极端正负样本不平衡问题以使得dense anchor发挥出更大的作用,例如RetinaNet (Focal loss);有些则设计各种多级refine的方案,例如Faster RCNN,Cascade RCNN, RefineDet,RPDet,AlignDet,Guided anchoring,Cascade RPN等;有些则尝试提出更有效的region & label assignment方案,例如FCOS,CenterNet,ATSS,FreeAnchor等。
最后,再来讨论一下第三个问题,如何有效提取每个region的特征。
用以完成分类与回归的任务。首先,我们可以考虑多个区域共享由全图提取的特征,而无需逐区域计算特征(Fast R-CNN中提出);其次,CNN可以提取“规范”区域的特征,即落在grid上、长宽比一定的区域的特征;而对于“非规范”区域,可以通过池化/插值的形式得到这些区域的特征(ROI pooling/ROI Align/Deformable Conv w. specified offsets等)。从这个角度说,如果把anchor理解为original proposal,那么faster r-cnn等一系列multi-stage detector中rpn和r-cnn所做的事情并没有本质差别。

总结

总结一下全篇的内容:首先本文将目标检测问题定义为了multi-region classification & regression,然后通过对design of regions and label assignment的分析,引出了如下观点:Dense or Multi-stage refine是提高检测算法性能的关键,合理折中效果更佳
最后,简单分析一下最近比较热门的DETR算法。首先,DETR仍旧属于本文所述框架,验证了sparse + multi-stage的可行性,只是一次性跨出了很多步,使得给人感觉有些陌生。但这些步究竟是否必要,还有待进一步研究。而从目前出现的几篇DETR改进及相关算法可以看出,寻求dense & multi-stage的折中,依旧是DETR的核心改进方向之一。关于这一系列算法,将在作者的下一篇文章中进行更具体的分析。
最后的最后,再引一下之前写的同系列的文章,欢迎关注、点赞、收藏。
https://zhuanlan.zhihu.com/p/121839698


推荐阅读




添加极市小助手微信(ID : cvmart2),备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳),即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群:月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~

△长按添加极市小助手

△长按关注极市平台,获取最新CV干货

觉得有用麻烦给个在看啦~  
浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报