一、目标检测基础: 任务定义 基本检测流程
二、深度目标检测: 两阶段检测器:R-CNN系列,后续相关工作 单阶段监测器:YOLO,SSD,RetinaNet
三、目标检测评价: 评价方式 数据集和比较方法
1、任务定义: 目标检测:
-
输入:图像或者图像序列
-
对于类型的检测任务可以细分为: (1)单类目标跟踪,多类/同用目标检测 (2)静态图像目标检测,视频目标检测
- 分类任务: 判断给定的候选区域中是否包含待检测类别的物体 (1)、生成候选区域:确定搜索范围 (2)、提取区域特征:将候选区域表示为定长向量(由于分类器需要相同大小相同长度的向量作为输入) (3)、对区域进行分类:确定是否包含物体及其所属的类别 (4)、后处理:对重叠较多的框进行合并(希望同一个物体上只有一个检测框)
1、两阶段检测器 (1)生成可能包含物体的候选区域Region Proposal (2)对候选区域做进一步分类校准,得到最终的检测结果
下边详解讲述R-CNN系列:
R-CNN—>(SPP-net)---->Fast R-CNN—>Faster R-CNN
- 后续工作: OHEM(2016):训练过程中引入难例挖掘策略 R-FCN(2016):针对ResNet优化检测器结构进一步加速 FPN(2016):构造特征金字塔提升尺度鲁棒性 DCN(2017):设计可变形卷积和RolPooling提升形变鲁棒性 Mask R-CNN(2017):引入实例分割进行多任务协同 …
第三步:对区域进行分类+边框校准
对区域进行分类可以选择SVM或者Softmax: 1、线性SVM分类器(默认是使用SVM):
- 针对每个类别单独训练
- 两类分类:one-vs-all
-
R-CNN和SPP-net的训练都包含多个单独的步骤 (1)对网络进行微调: R-CNN对整个CNN进行微调 SPP-net只对SPP之后的(全连接)层进行微调 (2) 训练SVM (3)训练边框回归模型
但是缺点很明显: (1)时间长:需要用CNN提取所有训练样本的特征 (2)占用存储空间大:所有样本的特征需要存储到磁盘 (3)检测速度慢,尤其是R-CNN, R-CNN+VGG16:检测一张图需要47s
接下来就引出了Fast R-CNN
问题:
- 交替式4步法训练 (1)基于预训练模型训练RPN (2)基于预训练模型,以及上一步得到的RPN,训练Fast R-CNN (3)固定共享的卷积层,训练RPN (4)固定共享的卷积层,基于上一步得到的RPN,训练Fast R-CNN
- 端到端训练(基本选择端到端) (1)同时学习RPN和分类网络 (2)分类网络的梯度不向RPN回传
Faster R-CNN训练结果:
下边对R-CNN—>(SPP-net)---->Fast R-CNN—>Faster R-CNN进行一个总结
后续相关工作:
- 更快:R-FCN(2016)
- 更准:FPN(2016)
- 更多任务:Mask R-CNN(2017)
- …
接下来对上述几种方法进行一个总结:
单阶段检测器特点:
(1)直接给出最终的检测结果 (2)没有显示的生成候选区域的步骤
概述: (1)YOLO
- 网格式的检测方式
- 综合整张图的信息预测各个位置的物体
- YOLO(2015),YOLO9000(2016)
(2)SSD
- 吸纳两阶段检测器的优秀设计,并进行改良
- SSD(2015),DSSD(2017)
(3)RetinaNet
- 大幅度提升单阶段检测器的精度
下边进行简单介绍:
(1)YOLO:
YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。faster RCNN中也直接用整张图作为输入,但是faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了。
2.YOLO的实现方法
-
每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。
注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。
举例说明:
-
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
-
得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
- 难例挖掘:选择较难的反例,反例数量不超过正例数量的3倍
- 数据增广:对原图进行随机Crop,在物体周围Crop,随机翻转
下边是引用https://blog.csdn.net/zhangjunp3/article/details/80597312中的论文,讲解的更加详细。
- 1.采用多尺度特征图用于检测
- 2.用卷积进行检测
与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m x n x p 的特征图,只需要采用 3 x 3 x p 这样比较小的卷积核得到检测值。
- 3.设置先验框
实验: 1、实现细节的影响:
下边引出DSSD::Deconvolutional Single-Shot Detector
三、目标检测评价:
- 评价方式
- 数据集和比较方法
1、评价方式
检测框匹配:
-
匹配策略 1、贪心算法 按照得分从高到低顺序遍历,搜索满足交并比阈值的检测框 大部分数据集采用这种方式进行评测 2、匈牙利算法(用得很少) 将匹配建模成一个分配问题:最大化总的交并比 FDDB人脸检测数据集采用这种方式对检测框进行匹配
-
按条件匹配/忽略框 例如:评测某个尺度范围的检测精度,检测到了不算对,漏检了也不算错
- 准确率 Accuracy:Acc=(TP+TN)/S
- 误检率 False Positive Rate/False Alarm Rate: FPR=FP/NF 平均每图误检数目 False Positive per Image:FPPI = FP / {Image} 宗误检数目 : FP
- 召回率 :Recall = TP/NT
- 漏检率 :MR = 1- Recall
- 精确率: Prec = TP / MT
- ROC曲线 横轴:总误检数目,平均每图误检数目 纵轴:召回率,漏检率
- PR曲线 横轴:召回率 纵轴:精确率
- 平均精确率 AP:不同召回率下的平均 均匀地选择11个不同的召回率:Recall—>{0,0.1,0.2…,0.9} 计算PR曲线下的面积 mAP:不同类别下的平均 mmAP:不同IOU阈值下的平均(很少使用)
数据集 & 方法比较
多类/通用目标检测
-
MS COCO(难度最大,截至2017只能达到52.6%的精确度) 类别数量:80,规模:100000图/1000000物体 目前难度最大的目标检测数据集
-
单类目标检测 1、人脸检测:FDDB,Wider Face 2、行人检测:Caltech Pedestrian,CityPersons(2017发布) 3、车辆检测:UA-DETRAC
三部分内容:
- 任务定义,基本流程
- 两类基于深度学习的目标检测器 两阶段,单阶段
- 评价方式,数据集