AISS3 图像检测
人脸检测算法主要在一幅图片或视频序列中检测出人脸的位置,并给出人脸的具体坐标。是人脸关键点、属性、编辑、风格化和识别等模块的基础。
- 数据集:widerface
- 挑战:scale, pose, occlusion, makeup
概念与定义
- 图像分类:识别图像中物品的类别并给出置信度。
- 图像分类:对于一个或多个目标的图片,识别出目标的位置,并对目标进行
分类
。
数据标注
(x1,y1,x2,y2,class)
- 左上角坐标为
x1,y1
,右下角坐标为x2,y2
的矩形框 class
类别
输入输出
- 输入:一张图象
- 输出:一组
(x1,y1,x2,y2,class,score)
的检测结果
数据集与评价指标
数据集
- PASCAL VOC
- MS COCO
评价指标
精度评价
RECALL
根据标签值(真实值)和预测值之间的关系,对分类器情况作以下分类(混淆矩阵):
真实值/预测值 | 正样本 | 负样本 |
---|---|---|
正样本 | TP, True Positive | FN, False Negative 漏报 |
负样本 | FP, False Positive 假阳误报 | TN, True Negative |
精度/查准率 Precision
召回率/查全率 Recall
在目标检测
中,
PR曲线
和 是一对相互矛盾的指标。在不同的置信度阈值下,P和R的值不同。取置信度阈值为0-1,将PR的变化绘制成曲线即PR曲线。
AP, Average Precision & mAP, mean AP
- AP: 针对单个类别的PR曲线和坐标轴围成区域的面积。
- mAP:多个类别时所有类别的平均
AP
。
PR曲线
与坐标轴围成的面积越大,模型的性能越好。
速度评估
FLOPS(运算量),FPS,模型大小……
代表方法
基础方法
IoU, intersection over union
表示两个矩形框的重叠程度。
NMS, Non-Maximum Suppression
- 设定 阈值
- 逐类别进行分数排序
- 计算,根据阈值进行抑制
此举主要是为了处理可能出现的冗余结果。
CNN 模型的目标检测
二阶段的目标检测 - Faster RCNN
二阶段的目标检测是Region-base的。
传统方法 | Faster CNN | |
---|---|---|
方法 | 滑动窗口从原图裁剪图片,对裁剪后的图片进行分类并通过滑窗定位。 | 1. CNN - 整图特征提取 2. RPN - 候选框提取 3.检测头微调 - 得到最终类别和分数 |
不足 | 重复提取出特征而导致效率低下 且精度较低,在尺寸、光照变化下不健壮。 |
速度还未到达实时(30FPS) |
优势 | end-to-end,依靠训练进行网络优化; 效率较高,精度较高,对尺度比较健壮 |
一阶段的目标检测 - YOLO
一阶段的目标检测是Region-free的。YOLO只要求这个目标物体的中心落在划分出的框框之中。 YOLO 较快。
这意味着,我们不用设计非常非常大的框,因为我们只需要让物体的中心在这个框中就可以了,而不是必须要让整个物体都在这个框中。
过程
-
CNN 一次特征提取
-
划分 的表格
-
表格的每个框都预测出 个bounding box,每个
bounding box
有 5 个量:- 物体的中心位置(x,y)
- 物体的高(h)和宽(w)
- 这次预测的置信度(confidence)。
-
每个框还要预测框中的物体的类别,并使用one-hot码表示。
注意,识别物体是对应于框的,而非对应于bounding boxes的。
-
对
bounding box
进行极大值抑制NMS
-
将最终的
bounding box
的 confidence 和这个bounding box所属的grid 的类别概率相乘,进行输出。
不足
- 一个grid只能识别出一种物体。
- 精度略有欠缺 ,尤其是小物品。
Transformer 模型的目标检测 - DETR, DEtection TRansformer
操作简单,是目标检测新范式。DTER
- 将目标检测当作一个集合预测问题; (核心思想)
- encoder-decoder based on transformer; (核心架构)
- a set-based loss (实现预测结果与真值间一对一匹配的核心)
架构
-
CNN backbone :
提取输入图像特征,生成特征图[c,h,w]
。典型值:c = 2048, h = h0/32, w = w0/32
-
基于 self-attention 的 transformer:
先用
1 × 1
卷积核把[c,h,w]
变成[d,h,w]
,再打平为[d, hw]
以便 encoder 输入。- Encoder:multi-head self-atttention 模块的多重叠加。
- Decoder:multi-head self-atttention 模块的多重叠加。在每个解码器层都并行解码N个对象。
- Spatial positional encoding: 由于转换器的体系结构是置换不变的,DETR 用固定的位置编码对其进行补充。在 Encoder 每个关注层的输入中都加入该编码。详参 Transformer | DETR目标检测中的位置编码
- Object queries: 是*可学习的位置编码*,添加到每个关注层的输入中,并被 decoder 作为嵌入的输出。
-
简单 Feed Forward Net:
具有 ReLU 激活功能且具有隐藏层的 3 层感知器和线性层(softmax)计算,最终检测为(class,bounding box)
或no obj
损失函数
loss 部分由以下 2 个方面组成:
- class loss: 类别是否正确
- box loss: 框的大小和位置是否合适
其中
Note
-
用了一个基于集合的损失函数,可以端到端的进行训练,
-
对所有对象进行同时预测。
-
删除了transformer 中的 spatial anchor、nms等部分,对 pipeline 结构做了一定的简化;
-
backbone 部分可以用不同的网络架构替换,方便扩展。
-
训练时间长
-
精度略有欠缺 ,尤其是小物品。
目标检测的未来发展方向
- 通用方向: SAM,Grounded - SAM
- 细化方向: 长尾问题,零样本和少样本,增量问题
实践
挑战
- 模型结构的选择
- 开发样例数量限制