作者:Edison_G
现在目标检测发展应该到了一个瓶颈,但是现存很多很多优质的检测框架,尤其是针对于大目标的检测,比如人、汽车和常见动物,但另一方面,小目标检测仍然是现在亟待解决的问题。 那这么多检测框,你到底对其内部知道多少?你又忽略了多少细节呢?
计算机视觉研究院
1
背景
现在目标检测大部分就是如上图案例,针对较大目标还是可以精确检测到,然后利用检测到的物体进行下一步的输入,每个行业的场景使用不同,所以检测也是视觉的基石!
现在的目标检测框架都是基于卷积网络的。这是一种非常强大的方法,因为它能够将RGB图像抽象成高级语义的深度特征,也可以将创造一些低级的图像抽象,如线,圆圈,然后将它们“迭代组合”成框架想要检测的目标,但这也是它们难以检测小目标的原因。
2
经典框架回顾
目标检测领域研究的你,应该对上图的发展史耳熟能详,这都是经典检测框架的鼻祖,也是现在目标检测可以飞速发展的源头,所有我们应该将最基础的再好好温故下。
DPM
说到DPM,让我想到研究生搞学术第一个接触到的算法。
DPM算法采用了改进后的HOG特征,SVM分类器和滑动窗口(Sliding Windows)检测思想,针对目标的多视角问题,采用了多组件(Component)的策略,针对目标本身的形变问题,采用了基于图结构(Pictorial Structure)的部件模型策略。此外,将样本的所属的模型类别,部件模型的位置等作为潜变量(Latent Variable),采用多示例学习(Multiple-instance Learning)来自动确定。
- 通过Hog特征模板来刻画每一部分,然后进行匹配。并且采用了金字塔,即在不同的分辨率上提取Hog特征。
- 利用提出的Deformable PartModel,在进行object detection时,detect window的得分等于part的匹配得分减去模型变化的花费。
- 在训练模型时,需要训练得到每一个part的Hog模板,以及衡量part位置分布cost的参数。文章中提出了LatentSVM方法,将deformable part model的学习问题转换为一个分类问题:利用SVM学习,将part的位置分布作为latent values,模型的参数转化为SVM的分割超平面。具体实现中,作者采用了迭代计算的方法,不断地更新模型。
RCNN
RCNN应该是检测正则崛起的源头,这个网络的出世真的轰动了真个CV圈,不管是谁,都看过原论文,仿真过的吧!一开始仿真是真的坑,各种问题,在此建议新手一定要自己动手来一遍。
这个算法是真的机智!在大家还摸不着思绪的时候,就想出这种经典框架。在原图上,通过各种穷举法获取各种候选的边界框,然后通过深度学习CNN获取的高级语义特征,这些特征分别送入多个SVM分类,回归修正boundingbox,最后使用NMS和边缘检测再次修正,整个过程如上图所示。它的缺点也很明显,候选区域重复提取特征导致速度很慢。
Faster-RCNN
肯定有人会问为啥跳过好几个框架,因为那几个都是小改进大作用。就在Faster RCNN框架中一起介绍了。
为了解决速度慢,SPPNet在最后一个卷积层后设计了空间金字塔池化层,这样网络输入可以不是一个固定的尺寸,能最大程度避免拉伸、裁剪造成图像的信息损失。建立原始图像部分区域与提取特征的映射关系,对于给定区域,可以直接计算特征,避免重复卷积。
于是Fast RCNN出现了,整个过程如上图所示,与RCNN的不同在于有三个方面,加入了RoI pooling layer,这层与SPPNet的池化层作用相同;在充分实验的基础上,将SVM换成softmax;把分类和boundingbox回归放在同一个网络的后面进行,大幅减少了计算开销。它的优点在于避免重复卷积,同时整合了多个任务,计算效率进一步提升。现在整个网络的架构和优化已基本完成,制约速度的关键在于候选区域的生成。
后来的Faster RCNN,它的核心思想是将候选区域生成也交给网络来做。候选区域生成网络本质上也是一个Fast RCNN,它的输入是预先设置好的图像中的一个区域,输出是该区域属于前景还是背景和修正后的区域。这样的方法只指定了少数几个可能为目标的区域,无论是比起滑窗,还是比起过分割,都快上了很多。
通过这一系列工作,网络的作用由单纯提取特征演化为完成目标检测整个流程的一种深度架构,目标检测的精度和速度也一再提高。但是关于Faster RCNN系列的工作也遇到了问题,以分类问题对待目标检测暂时没有什么突破点,所以大家都在考虑以最开始的将目标检测单纯作为回归问题的思路进行研究。所以就出现了One Stage框架!
Yolo
上面介绍的框架,缺点在于将检测问题转化成了对图片局部区域的分类问题后,不能充分利用图片局部目标在整个图片中的上下文信息,于是出现了一种将目标检测作为回归问题的方法YOLO,整个过程如下图所示。
将图像分成多个网格,分别回归boundingbox和信任值,最后以NMS过滤掉低分box。YOLO缺点在于对靠得很近的物体检测效果不好,泛化能力弱,由于损失函数的问题,定位误差是影响检测效果的主要原因。即使YOLO目前还不完善,即使它比不上已经非常完善的Faster RCNN,但它的速度和精度都要好于人工特征的方法,一旦解决了这些问题,性能将具有非常大的上升空间。
3
问题分析
简单回顾下检测框架,可以发现基本都是考虑效率和精度,但是从哪些方面考虑呢?有些人是从头开始处理,有些人从中间产物各种处理,还有一批人从尾处理。以至于现在出现了各种各样眼花缭乱的检测框架,今天我来说最近比较火的几个框架,基于他们分析下检测过程到底需要考虑哪些因素?
现在比较流程的就是在FPN中优化,比如论文"Extended Feature Pyramid Network for Small Object Detection",尽管在特征金字塔网络中进行尺度级别的相应检测可以缓解此问题,但各种尺度的特征耦合仍然会损害小目标检测的性能。
EFPN
浙大的研究员,他们提出了扩展特征金字塔网络(EFPN),它具有专门用于小目标检测的超高分辨率金字塔层。具体来说,其设计了一个模块,称为特征纹理迁移(FTT,feature texture transfer),该模块用于超分辨率特征并同时提取可信的区域细节。
此外,还设计了前景-背景之间平衡(foreground-background-balanced)的损失函数来减轻前景和背景的面积不平衡问题。
其中,EFPN的前4层是vanilla FPN层。FTT模块集成了P3中的语义内容和P2的区域纹理。然后,类似FPN的自顶向下路径将FTT模块输出向下传递,形成最终的扩展金字塔层P'2。扩展的特征金字塔(P'2,P2,P3,P4,P5)被馈送到后续的检测器,以进行进一步的目标定位和分类。顶部4层金字塔自顶向下构成,用于中型和大型目标检测。EFPN的底部扩展在图中包含一个FTT模块,一个自上而下的路径和一个紫色金字塔层,旨在捕获小目标的区域细节。
更具体地讲,在扩展中,SR模块FTT将图中绿色-黄色层表示的EFPN第三层-第四层金字塔混合,产生具有所选区域信息的中间特征P'3,图中用蓝色菱形表示。然后,自上而下的路径将P'3与定制的高分辨率CNN特征图C'2合并,生成最终的扩展金字塔层P'2。
小目标检测的难度在于目标很小,其特征比较浅(如亮度/边缘信息等),语义信息较少;另外小目标和背景之间尺寸不均衡,用较小的感受野去关注其特征的话,很难提取全局语义信息;用较大感受野去关注背景信息的话,那么小目标的特征会丢失信息。以下一些思路是现在提升的技巧:
- 数据增强
- 特征融合
- 利用上下文信息,或者目标之间建立联系
- GAN
- 提升图像分辨率
- ROI pooling被ROI align替换
- 多尺度空间融合
- 锚点设计
- 匹配策略,不用IoU
YOLO Nano
比Tiny YOLOv3小8倍,性能提升11个点的Yolo Nano。通过设计用于处理目标检测的深卷积神经网络,在这一领域取得了长足的进展和成功。尽管取得了这些成功,但在边缘和移动场景中广泛部署此类对象检测网络面临的最大挑战之一是高计算和内存需求。因此,针对边缘和移动应用的高效深层神经网络体系结构的设计越来越受到人们的关注。
我们将介绍一种高度紧密的深度卷积神经网路YOLO Nano,来完成目标检测的任务。利用人机协同设计策略创建YOLO Nano,其中基于YOLO系列单镜头目标检测网络架构的设计原则的原则性网络设计原型,与machine driven设计探索相结合,创建一个具有高度定制模块级宏体系结构和为嵌入式目标检测任务定制的微体系结构设计的紧凑网络。所提出的YOLO Nano只有4MB的模型大小!
虽然前面介绍的网络展示了最先进的目标检测性能,但由于计算和内存限制,它们在边缘和移动设备上部署是非常具有挑战性的,甚至是不可能的。事实上,在嵌入式处理器上运行时,即使是更快的变体,在低的单位数帧速率下也有推断速度。这极大地限制了此类网络在无人机、视频监控、需要本地嵌入式处理的自动驾驶等广泛应用中的广泛应用。
YOLO Nano的第一个设计阶段是一个原则性的网络设计原型阶段,在这个阶段中,根据人类驱动的设计原则创建一个初始的网络设计原型,以指导机器驱动的设计探索阶段。
更具体地说,构建了一个初始的网络设计原型,该原型基于YOLO系列单点架构的设计原则。YOLO网络体系结构家族的一个突出特点是,与基于区域建议的网络不同,基于区域候选的网络依赖于构建区域候选网络来生成场景中目标所在位置的建议,然后对生成的建议进行分类,相反,它们利用单一的网络架构来处理输入图像并生成输出结果。因此,针对单个图像的所有目标检测预测都是在单个前向过程中进行的,而对于基于区域候选的网络,需要执行数百到数千个过程才能得到最终结果。这使得YOLO系列网络架构的运行速度大大加快,因此更适合于嵌入式对象检测。
现在出现的网络都是走轻量级路线,为了更好的部署,这也是一个趋势,因为不能总是停留在理论的假想中。
今天暂时说到这里,下一期我们再来说说针对现在的问题,我们应该怎么去做,才能提升精度和效率,加速我们研究的进度。下期更加精彩,不要错过!
© THE END
转载请联系本公众号获得授权