1.什么是目标检测?
目标检测 vs 图像分类
目标检测的应用
(1)人脸识别
(2)智慧城市
(3)自动驾驶
(4)下游视觉任务:场景文字识别、人体姿态估计
目标检测技术的演进
2.基础知识
框,边界框(Bounding Box)
框泛指图像上的矩形框,边界横平竖直。
边界框通常指紧密包围感兴趣物体的框,检测任务要求为图中出现的每个物体预测一个边界框
交并比(Intersection Over Union)
定义:两矩形框交集面积与并集面积之比,是矩形框重合程度的衡量指标。
感受野
定义:神经网络中,一个神经元能看到的原图的区域
感受野的中心和步长
感受野的中心:
- 一般结论比较复杂;
- 对于尺寸3x3,pad=1的卷积(或池化)堆叠起来的模型,感受野中心=神经元在特征图上的坐标x感受野步长
感受野的步长(=降采样率=特征图尺寸的缩减倍数):
- 神经网络某一层上,相邻两个神经元的感受野的距离
- 步长=这一层之前所有stride的乘积
有效感受野(Effective RF)
感受野一般很大,但不同像素对激活值的贡献是不同的,也就是说激活值对感受野内的像素求导数,大小不同。影响比较大的像素通常聚集在中间区域,可以认为对应神经元提取了有效感受野范围内的特征。也就是说,感受野边缘的贡献不大,而中心比较重要。
基于锚框 vs 无锚框
非极大抑制 Non-Maximum Suppression
滑窗类算法通常会在物体周围给出多个相近的检测框,这些框实际指向同一物体,只需保留其中置信度最高的
非极大抑制的算法实现:
置信度 Confidence Score
置信度:模型认可自身预测结果的程度,通常需要为每个框预测一个置信度,我们倾向认可置信度高的预测结果,例如有两个重复的预测结果了,丢弃置信度低的。
- 部分算法直接取模型预测物体属于特定类别的概率;
- 部分算法让模型单独预测一个置信度(训练时有GT,可以得相关信息作为监督);
正负样本不均衡问题
3.目标检测的基本思路
检测问题的难点
(1)需要同时解决是什么和在哪里
(2)图中物体位置、数量、尺度变化多样
滑窗 (Sliding Window)
(1)设定一个固定大小的窗口
(2)遍历图像的所有位置,所到之处用分类模型(假设已经训练好)识别窗口中的内容
(3)为了检测不同大小、不同形状的物体,可以使用不同大小、长宽比的窗口扫描图片
缺点:效率问题,计算成本很高。
改进思路1:用启发式算法替换暴力遍历,用相对低计算量的方式粗筛出可能包含物体的位置,再使用卷积网络预测。早期二阶段方法使用,依赖外部算法,系统实现复杂。
改进思路2:减少冗余计算,使用卷积网络实现密集预测,这是目前普遍采用的方式。
分析滑窗中的重复计算
下图中的重叠部分被相同的卷积核卷积,计算冗余了。
改进思路
用卷积一次性计算全图所有特征,再取出对应位置的特征完成分类
这样的特征图滑窗相比原图滑窗来说,重叠区域只计算一次卷积特征,与窗的个数无关
在特征图上进行密集预测
边界框回归 Bounding Box Regression
问题:滑窗与物体精确边界通常有偏差
处理方法:让模型在预测物体类别的同时预测边界框相对于滑窗的偏移量,这种基于同一特征做两个预测的也叫做多任务学习。
使用密集预测模型进行推理
基本流程:
- 用模型做密集预测,得到预测图,每个位置包含类别概率、边界框回归的预测结果
- 保留预测类别不是背景的框
- 基于框中心,和边界框回归结果,进行边界框解码
- 后处理:非极大值抑制
如何训练
训练神经网络的一般套路:
- 模型基于当前参数给出预测
- 计算loss:衡量预测的好坏
- 反传loss、更新参数
密集预测的训练过程: - 检测头在每一个位置产生一个预测(有无物体、类别、位置偏移量)
- 该预测值应与某个真值比较产生损失,进而才可以训练检测器
- 但这个真值在数据标注中并不存在,标注只标出了有物体的地方
- 我们需要基于稀疏的标注框为密集预测的结果产生真值,这个过程称为匹配(Assignment)
匹配的基本思路:
密集预测的基本范式
4.密集预测范式的改进:多尺度预测
尺度问题
图像中的物体大小可能有很大的差异。
朴素的密集范式中,如果让模型基于主干网络最后一层或者倒数第二层特征图进行预测:
- 受限于结构(感受野),只擅长中等大小的物体
- 高层特征图经过多次采样,位置信息逐层丢失,小物体检测能力较弱,定位精度较低
解决方式
方法一:基于锚框
方法二:图像金字塔 Image Pyramid
方法三:基于层次化特征
方法四:特征金字塔网络 Feature Pyramid Network
多尺度密集预测范式
5. 单阶段目标检测算法选讲
Region Proposal Network(2015)
RPN的主干网络图(VGG上,resnet下)
YOLO:You Only Look Once(2015)
YOLO的匹配与框编码
YOLO的损失函数(现在也不是很常见)
YOLO的优缺点
SSD:Single Shot MultiBox Detector (2016)
第一个使用多级特征图
SSD 的匹配规则
RetinaNet(2017)
FPN成为主要结构
提出Focal loss主要为了解决单阶段算法面临的正负样本不均衡问题
不同负样本对损失函数的贡献
改进:降低简单负样本的损失
Focal Loss
YOLO v3(2018)
YOLO v5(2020)
6. 无锚框目标检测算法
不用锚框会导致对于重叠物体的检测效果特别差,但是借助FPN可以利用不同层次的特征预测。
FCOS,Fully Convolutional One-stage(2019)
FCOS的预测目标 and 匹配规则
FCOS的多尺度匹配
中心度 Center-ness
FCOS的损失函数