CV面试面经宝典:目标检测共性问题总结与详解(1)

文章正文
发布时间:2024-09-05 10:42

目标检测技术从阶段上分为两种,一阶段和二阶段。二阶段的核心思想是首先提出proposal框,通过第一阶段的网络回归出目标框的大概位置、大小及是前景的概率,第二阶段是通过另一个网络回归出目标框的位置、大小及类别;而一阶段网络的核心是,对于输入图像,通过网络直接回归出目标大小、位置和类别。

目标检测两阶段比一阶段的算法精度高的原因

1.正负样本的不均衡性

当某一类别的样本数特别多的时候,训练出来的网络对该类的检测精度往往会比较高。而当某一类的训练样本数较少的时候,模型对该类目标的检测精度就会有所下降,这就是所谓样本的不均衡性导致的检测精度的差异。

对于一阶段的目标检测来说,它既要做定位又要做分类,最后几层中1×1的卷积层的loss都混合在一起,没有明确的分工哪部分专门做分类,哪部分专门做预测框的回归,这样的话对于每个参数来说,学习的难度就增加了。

对于二阶段的目标检测来说(Faster RCNN),在RPN网络结构中进行了前景和背景的分类和检测,这个过程与一阶段的目标检测直接一上来就进行分类和检测要简单的很多,有了前景和背景的区分,就可以选择性的挑选样本,是的正负样本变得更加的均衡,然后重点对一些参数进行分类训练。训练的分类难度会比一阶段目标检测直接做混合分类和预测框回归要来的简单很多。

2.样本的不一致性

怎么理解样本不一致性呢?首先我们都知道在RPN获得多个anchors的时候,会使用一个NMS。在进行回归操作的时候,预测框和gt的IoU同回归后预测框和gt的IOU相比,一般会有较大的变化,但是NMS使用的时候用的是回归前的置信度,这样就会导致一些回归后高IoU的预测框被删除。这就使得回归前的置信度并不能完全表征回归后的IoU大小。这样子也会导致算法精度的下降。在第一次使用NMS时候这种情况会比较明显,第二次使用的时候就会好很多,因此一阶段只使用一次NMS是会对精度有影响的,而二阶段目标检测中会在RPN之后进行一个更为精细的回归,在该处也会用到NMS,此时检测的精度就会好很多。

如何解决目标检测中密集遮挡问题

遮挡本身也可以分为两种类型,一种是由于非目标造成的遮挡,一种是由于也是需要检测的目标造成的遮挡。这两种遮挡分别被叫做occlusion和crowded。

对于前一种类型遮挡,很难有针对性的办法去解决,最好的办法也就是使用更多的数据和更强的feature。可以从训练数据入手。加掩膜,加扰动,提高算法对遮挡的应对能力。

对于第二种遮挡,提出了两个针对这个问题的loss,

通过设置损失函数的方式,即Repulsion Loss,使预测框和所负责的真实目标框的距离缩小,而使得其与周围非负责目标框(包含真实目标框和预测框)的距离加大 。如下式,如果与周围目标的距离越大,损失值会越小。

图片

除了常用的smooth L1使回归目标与GT接近之外,这两个loss一个的目标是使proposal和要尽量远离和它overlap的第二大的GT,另一个目标是要上被assign到不同GT的proposal之间尽量远离。通过这两个loss,不仅仅使得proposal可以向正确的目标靠近,也可以使其远离错误的目标,从而减少NMS时候的误检。

图片

“狭长形状”目标检测有什么合适方法

使用可旋转bonding box进行标注

手工设计anchors

如何解决动态目标检测

1.光流法

光流是空间运动物体被观测面上的像素点运动产生的瞬时速度场,包含了物体表面结构和动态行为的重要信息。光流计算法大致可分为三类:

(1)基于匹配的光流计算方法,包括基于特征和基于区域的两种。基于特征的方法是不断地对目标主要特征进行定位和跟踪,对大目标的运动和亮度变化具有鲁棒性,存在的问题是光流通常很稀疏,而且特征提取和精确匹配也十分困难;基于区域的方法先对类似的区域进行定位,然后通过相似区域的位移计算光流,这种方法在视频编码中得到了广泛的应用,但它计算的光流仍不稠密。

(2)基于频域的方法利用速度可调的滤波组输出频率或相位信息,虽然能获得很高精度的初始光流估计,但往往涉及复杂的计算,而且可靠性评价也十分困难。

(3)基于梯度的方法利用图像序列的时空微分计算2D速度场(光流)。由于计算简单和较好的实验结果,基于梯度的方法得到了广泛应用。

2.相邻帧差法

相邻帧差法是在运动目标检测中使用的最多的一类算法。原理就是将前后两帧图像对应的像素值相减,在环境亮度变化不大的情况下,如果对应像素值相差值很小,可认为此处景物是静止的,反之,则是运动物体。

相邻帧差法对于动态环境具有较强的自适应性,鲁棒性较好,能够适应各种动态环境,但一般不能完全提取出所有相关的特征像素点,这样在运动实体内部容易产生空洞现象。

3.背景差法

背景差法是常用的运动目标检测方法之一。它的基本思想是将输入图像与背景模型进行比较,通过判定灰度等特征的变化,或用直方图等统计信息的变化来判断异常情况的发生和分割运动目标。

与帧间差法比较,背景差法可以检测视频中停止运动的物体,其缺点是背景的更新导致算法的复杂性增加,实时性变差。

图片

4. 基于事件相机来做

事件相机是具有微秒反应时间的仿生传感器,可记录每像素亮度变化的异步流,称为“事件”。事件相机通过检测每个像素的亮度变化来生成一个事件,相比于传统相机,更适合在高动态和高速度的环境下使用,具有高动态范围 (HDR)、高时间分辨率和无运动模糊的优势。

高动态范围:对于传统相机来说,在黑暗的情况下,传统的相机几乎没有办法使用,但对于事件相机来说,只检测正在运动的物体,所以无论是黑暗情况还是有光亮的情况,事件相机都可以发挥作用。

低延时:相邻事件之间的时间可以小于1毫秒

无运动模糊:即使是高速运动的物体,事件相机也可以捕获到

FPN的作用

FPN是在卷积神经网络中图像金字塔的应用。图像金字塔在多尺度识别中有重要的作用,尤其是小目标检测。顶层特征上采样后和底层特征融合,每层独立预测。

fpn设计动机:

1.高层特征向低层特征融合,增加低层特征表达能力,提升性能

2.不同尺度的目标可以分配到不同层预测,达到分而治之。

图片

FPN每层做特征融合的特征图有两个,首先是前向传播,然后取了每个特征图做上采样(最近邻插值),对应前向传播的特征图做融合。融合的方式是:通过1x1卷积调整通道数,然后直接add。之后进行3x3卷积操作,目的是消除上采样的混叠效应。

其实,fpn真正起作用的是分而治之的策略,特征融合的作用其实很有限,此外fpn存在消耗大量显存,降低推理速度。

为什么FPN采用融合以后效果要比使用pyramidal feature hierarchy这种方式要好?

图片

卷积虽然能够高效地向上提取语义,但是也存在像素错位问题,通过上采样还原特征图很好地缓解了像素不准的问题。

backbone可以分为浅层网络和深层网络,浅层网络负责提取目标边缘等底层特征,而深层网络可以构建高级的语义信息,通过使用FPN这种方式,让深层网络更高级语义的部分的信息能够融合到稍浅层的网络,指导浅层网络进行识别。

从感受野的角度思考,浅层特征的感受野比较小,深层网络的感受野比较大,浅层网络主要负责小目标的检测,深层的网络负责大目标的检测(比如人脸检测中的SSH就使用到了这个特点)。

FPN在RPN中的应用

rpn在faster rcnn中用于生成proposals,原版rpn生成在每个image的最后一张特征图上生成3x3个proposal。但实际上,小目标下采样到最后一个特征图,已经很小了。fpn可以在之前的多个特征图上获得proposal,具体做法是:在每个feature map上获得1:1、1:2、2:1长宽比的框,尺寸是{32^2、64^2、128^2、256^2、512^2}分别对应{P2、P3、P4、P5、P6}这五个特征层上。P6是专门为了RPN网络而设计的,用来处理512大小的候选框。它由P5经过下采样得到。

如何解决小目标识别问题

通用的定义来自 COCO 数据集(https://so.csdn.net/so/search%3Fq%3D%25E6%2595%25B0%25E6%258D%25AE%25E9%259B%2586%26spm%3D1001.2101.3001.7020),定义小于 32x32 pix 的为小目标。

小目标检测的难点:可利用特征少,现有数据集中小目标占比少,小目标聚集问题

首先小目标本身分辨率低,图像模糊,携带的信息少。由此所导致特征表达能力弱,也就是在提取特征的过程中,能提取到的特征非常少,这不利于我们对小目标的检测。

另外通常网络为了减少计算量,都使用到了下采样,而下采样过多,会导致小目标的信息在最后的特征图上只有几个像素(甚至更少),信息损失较多。

数据。
提高图像采集的分辨率:基于 GAN 的方法解决的也是小目标本身判别性特征少的问题,其想法非常简单但有效:利用 GAN 生成高分辨率图片或者高分辨率特征。

Data Augmentation。一些特别有用的小物体检测增强包括随机裁剪、随机旋转和马赛克增强。copy pasting, 增加小目标数量。缩放与拼接,增加中小目标数量

修改模型输入尺寸。提高模型的输入分辨率,也就是减少或者不压缩原图像。tiling,将图像切割后形成batch,可以在保持小输入分辨率的同时提升小目标检测,但是推理时也需要 tiling,然后把目标还原到原图,整体做一次 NMS。

修改 Anchor。适合小目标的 Anchor

Anchor Free。锚框设计难以获得平衡小目标召回率与计算成本之间的矛盾,而且这种方式导致了小目标的正样本与大目标的正样本极度不均衡,使得模型更加关注于大目标的检测性能,从而忽视了小目标的检测。

多尺度学习。FPN, 空洞卷积,通过多尺度可以将下采样前的特征保留,尽量保留小目标

减小下采样率。比如对于 YOLOv5 的 stride 为 32, 可以调整其 stride 来减小下采样率,从而保留某些比较小的特征。

SPP 模块。增加感受野,对小目标有效果,SPP size 的设置解决输入 feature map 的size 可能效果更好。

损失函数。小目标大权重,此外也可以尝试 Focal Loss。

介绍目标检测RCNN系列和Yolo系列的区别

YOLO所属类别为one-stage,Fast-Rcnn所属类别为two-stage

two stage:

先进行区域生成,该区域称为region proposal(RP,一个有可能包含物体的预选框);再通过卷积神经网络进行样本分类,精度高,适合做高检测精度的任务

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

图片

one stage:

不用RP,直接在网络中提取特征来预测物体的分类和位置,速度非常快,适合做实时检测任务,但是效果不会太好

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

图片

YOLO和SSD区别

YOLO将物体检测这个问题定义为bounding box和分类置信度的回归问题。

将整张图像作为输入,划分成SxS grid,每个cell预测B个bounding box(x, y, w, h)及对应的分类置信度(class-specific confidence score)。分类置信度是bounding box是物体的概率及其与真实值IOU相乘的结果。

SSD将物体检测这个问题的解空间,抽象为一组预先设定好(尺度,长宽比,1,2,3,1/2,1/3)的bounding box。在每个bounding box,预测分类label,以及box offset来更好的框出物体。对一张图片,结合多个大小不同的feature map的预测结果,能够处理大小不同的物体。

区别:

YOLO在卷积层后接全连接层,即检测时只利用了最高层Feature maps。而SSD采用金字塔结构,即利用了conv4-3/fc7/conv6-2/conv7-2/conv8_2/conv9_2这些大小不同的feature maps,在多个feature maps上同时进行softmax分类和位置回归

SSD还加入了Prior box(先验框)


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。