第四节:目标检测的算法基础课
目标检测定义
给定一张图片→找到图像中关心的物体并预测类别
应用场景:
- 图像中的人脸定位
- 智慧城市——垃圾检测、非法占道、
- 自动驾驶——环境感知+路径规划和控制
- 计算机下游任务:OCR定位区域|人体姿态估计(先检测后标注关键点)
图像分类VS目标检测
- 不同:前者是图像尺寸的,后者数量种类和存在的位置都不完全相同
- 相同:需要网络理解
检测方法
最简单的方法→滑窗
- 设定一个窗口,
- 窗口遍历图像中的所有位置,窗口内调用分类算法
- 为了检测不同大小,形状的物体,可以使用不同大小不同长宽比的框来检测
缺点:这样的效率很低,计算成本高
改进思路1:使用启发性算法替换暴力遍历,但依赖外部算法,实现复杂
改进思路2:使用卷积来实现密集预测任务
【消除滑窗中重复部分的基本思路】
用卷积一次性计算所有特征,再取出特征图中对应位置的裁剪块,抠出来送到后面的全链接层
进一步,不同特征的感受野自然的形成一系列等距离分布的窗,在特征图使用1x1卷积进行密集预测,形成概率图
密集预测是隐式滑窗,但效率远高于滑窗
目标检测的基本范式
- 两阶段方法:以某种方式产生窗,再基于窗口内的特征进行预测
- 单阶段方法:在特征图上基于单点特征实现密集预测
目标检测演进
两阶段方法:R-CNN, Fast RCNN, Faster RCNN,
单阶段方法:yolo,ssd
多尺度技术→FPN(特征金字塔)
Transformer检测方法:DETR
基础知识
- 框(Bounding Box)
- 区域
- 感兴趣区域(ROL)
- 锚框(Anchor)在图像中预设一次额基准框
- 交并比(IoU):交集和并集之比
- 置信度(confidence):简单的可以认为,模型中分类部分认为的类别概率
- 非极大值抑制(NMS):滑窗短发对同一个物体会给出多个检测框,我们只需要保留置信度最高的框,即把不是极大值的框丢掉→密集预测下的后处理
- 边界框回归:一般得到的框不是精准的最小框→多任务学习
- 边界框编码:作为回归的优化操作
基于Anchor的改进
在原图上设置不同尺寸的基准框,基于特征独立预测每个锚框中是否包含有物体
- 生成不同尺寸的锚框
- 同一位置生成多个框包含不同的物体
正负样本不均衡
直接使用分类损失会因样本不均衡而失效,RetinaNet解决单阶段算法中的损失函数的问题
无锚框算法
不基于框训练,FCOS,CenterNet,将检测问题定义为以中心点表示的物体
DeTR
将问题定义为:特征序列→框序列的问题,用Transformer架构解决
目标检测的评估方法
- 召回率:衡量该检测到的地方是否检测到了,值越高,漏检越少
- 准确率:衡量检测到的地方预测结果是不是正确的
通常将检测框按照阈值降序排列,仅仅输出置信度较高的若干框