目标检测综述

https://bbs.cvmart.net/articles/4992

Posted by Deavan on October 29, 2021

基于深度学习的目标检测算法分类

Anchor Based 方法

分为两阶段和一阶段,两阶段一般比一阶段更准确一点,一阶段一般速度更快。

One-stage

Yolo系列

Two-stage

Stage1: 从图像中生成 region proposals

Stage2: 从region proposals生成最终的物体边框。

RCNN

[不足] 虽然RCNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。

Fast RCNN

【性能】 Fast RCNN在VOC-07数据集上将检测精度mAP从58.5\%提高到70.0\%,检测速度比RCNN提高了200倍。

【不足】 Fast RCNN仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。

那么问题来了: “我们可以使用CNN模型来直接生成候选框吗?”,基于此,Faster RCNN的提出完美回答这一问题。

Faster RCNN

【不足】 虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。

FPN

准备读

Cascade RCNN

准备读

Anchor Free 方法

基于Anchor 的缺点 1.Anchor的大小,数量,长宽比对于检测性能的影响很大 2.Anchor的size 影响了普适性,对于不同的任务size不同。 3.为了去匹配真实框,需要生成大量的Anchor,但是大部分的Anchor在训练时标记为负样本,所以就造成了样本极度不均衡问题(没有充分利用fore-ground)。 4.计算所有Anchor和GT的IOU。

so 摒弃Anchor,Freedom! but 确定关键点检测

CornetNet

摒弃Anchor的开山之作,将边框转化为左上角和右下角的关键点检测。

【不足】 CornerNet只关注边缘和角点,缺乏目标内部信息,容易产生FP;该网络还是需要不少的后处理,比如如何选取分数最高的点,同时用offset来微调目标定位,也还需要做NMS

CenterNet

与CornerNet检测算法不同,CenterNet[17] 的结构十分简单,它摒弃了左上角和右下角两关键点的思路,而是直接检测目标的中心点,其它特征如大小,3D位置,方向,甚至姿态可以使用中心点位置的图像特征进行回归,是真正意义上的Anchor free。该算法在精度和召回率上都有很大提高,同时该网络还提出了两个模块:级联角池化模块和中心池化模块,进一步丰富了左上角和右下角收集的信息.

FCOS

SAPD-感觉想法很有意思

SAPD[20] 论文作者认为Anchor point的方法性能不高主要还是在于训练的不充分,主要是注意力偏差和特征选择。因而作者提出了两种策略:1)Soft-weighted anchor points对不同位置的样本进行权重分配 2)Soft-selected pyramid levels,将样本分配到多个分辨率,并进行权重加权。而在训练阶段,作者前6个epoch采用FSAF的方式,而后6个epoch会将特征选择的预测网络加入进行联合训练。

常用评价指标

IOU

交并比

准确率/精度/召回率/F1Score/FPR

T:预测对了 P:是正例

Accuracy = $\frac{(TP + TN)}{(all)}$

Precision = TP/TP+FP

Recall = TP/ TP+FN

F1-Score = 2TP/ 2TP + FP +FN

FPR = FP / FP + TN

PR 曲线

Precision 和 Recall 可以理解为 Accuracy的两个分支,一个看重FP 一个看重 FN

mAP mean Average Precision

评估标准:mAP衡量的是模型在所有类别上的好坏,属于目标检测中一个最为重要的指标,一般看论文或者评估一个目标检测模型,都会看这个值,这个值(0-1范围区间)越大越好。

一般来说mAP是针对整个数据集而言的,AP则针对数据集中某一个类别而言的,而percision和recall针对单张图片某一类别的

目标检测六大难点与挑战

待检测目标尺寸很小,导致占比小,检测难度大-狗脸确实比狗身体小很多

待检测目标尺度变化大,网络难以提取出高效特征-变化不算大

待检测目标所在背景复杂,噪音干扰严重,检测难度大-部分存在

待检测目标与背景颜色对比度低,网络难以提取出具有判别性的特征-部分存在

各待检测目标之间数量极度不均衡,导致样本不均衡-只检测狗脸

检测算法的速度与精度难以取得良好平衡-暂时不考虑速度

提高目标检测模型精度的五大技术

特征提取网络

高效的特征融合


7.2.3 具备大感受野的高分辨率特征表示
特征的感受野和分辨率是CNN模型需要考虑的两个重要因素,具有较大感受野的网络能够捕获更大尺度的上下文信息,而具备较小感受野的网络可能更专注于图像的局部细节。高分辨率的特征有利于检测小物体,由于感受野较小缺乏一定的语义信息,因此不利于检测大尺寸物体,而为了增大感受野最直接的办法是引入池化层,但这会导致特征的分辨率降低而不利于检测小物体。为了解决这一矛盾,在增加感受野的同时又丧失特征分辨率,空洞卷积是一种比较好的解决办法,空洞卷积无需额外的参数和计算成本即可有效提高检测算法的精度。

7.3 目标定位改进
为了改善检测算法对于目标定位的精度,近年来出些的一些主要改进方法是:1)边框微调,2)设计新的损失函数用于更精准的定位。

7.3.1 边框微调技术
边框微调是对检测结果进行后处理。尽管边界框回归已经集成到大多数现代目标检测器中,但仍有一些目标无法被Anchor box很好的锚定,这导致边框的预测并不精确,因此一些研究学者提出边界框微调技术,通过将检测结果迭代输入BB回归器,直到模型的预测收敛到正确的位置和大小。

7.3.2 改进损失函数以提高定位精度
目标定位被认为是一个坐标回归问题,定位损失函数的演变经历了MSE->IOU->GIOU->DIOU->CIOU这一过程

7.4 语义分割促进目标检测
目标检测和语义分割是计算机视觉最基本的两大任务,近年来一些研究发现语义分割可以促进目标检测性能的提升。

7.4.1 为什么分割可以改善检测性能呢?
分割改善检测性能的原因主要有以下三点

分割可以帮助类别分类
分割可以促进目标的精准定位
分割可以作为一种上下文信息嵌入到检测网络
7.4.2 分割如何改善检测性能
通过分割改善检测性能主要有两种方法:1)学习丰富的特征表示,2)多任务损失促进网络的学习

学习丰富的特征表示
最简单的方法就是将分割网络视为固定的特征提取器嵌入到检测算法中,这种方式的优点是容易实现,缺点是分割网络会带来额外的计算。

多任务损失促进网络学习
另一种方法是在原始检测算法中引入一个额外的分割分支,并使用多任务损失函数(分割损失 + 检测损失)来训练该模型。而在模型推理阶段,将分割分支去除即可。这种方法的优点是检测速度不会受到影响,缺点是该算法在训练时还需要像素级别的图像标注。在此基础上,一些研究人员引入了弱监督学习的思想:不基于像素级别的图像标注进行模型训练,而是简单地基于边界框标注来训练该分割分支。

人脸检测难点和挑战

姿态变化大

在动物中也存在,甚至更明显

改善人脸多姿态和脸部遮挡问题
通过估计校准后的参数或使用渐进校准技术可以实现人脸校准,人脸校准是改善多姿态人脸检测的主要技术手段。为了改善脸部遮挡后的人脸检测,近年来提出了两种方法:第一个是结合注意力机制[36],以增强人脸特征;第二个则是使用Detection based on parts[37]来解决人脸遮挡问题,该项技术借鉴了DPM的思想

也可以用之前马脸检测那篇的warping试试。

脸部遮挡问题

这个数据集采集的好就没有这个问题

多尺度检测

这个问题也不明显

实时检测

这个暂时也不影响