目标检测总结(仅作为个人笔记)

主要内容:

一、目标检测基础:
任务定义
基本检测流程

二、深度目标检测:
两阶段检测器:R-CNN系列,后续相关工作
单阶段监测器:YOLO,SSD,RetinaNet

三、目标检测评价:
评价方式
数据集和比较方法

一、目标检测基础

1、任务定义:
目标检测:

  • 输入:图像或者图像序列

  • 输出:在每张/帧图像上,判断是否有指定类别的物体,如果有,给出所有物体的位置和大小(位置和大小可以用框图左上角坐标和长宽表示(x,y,w,h))**
    目标检测总结(仅作为个人笔记)_第1张图片
    目标检测总结(仅作为个人笔记)_第2张图片

  • 对于类型的检测任务可以细分为:
    (1)单类目标跟踪,多类/同用目标检测
    (2)静态图像目标检测,视频目标检测

  • 相关的其他计算机视觉任务
    1、物体定位(Localization)
    (1)给出输入图像的类别标签,并框出一个对应的物体
    (2)物体定位可以看成单个物体的检测任务
    目标检测总结(仅作为个人笔记)_第3张图片
    例:给定上面的图像,返回cat这个标签,并在原图中框出其位置(即返回位置和大小)

2、实例分割
在输入图像上精确地标记出每一个物体的所有像素点
目标检测总结(仅作为个人笔记)_第4张图片

3.显著目标检测
(1)、显著目标:最吸引人注意力的区域/物体
(2)、前景/背景分割
目标检测总结(仅作为个人笔记)_第5张图片
2、基本检测流程

  • 分类任务:
    判断给定的候选区域中是否包含待检测类别的物体
    (1)、生成候选区域:确定搜索范围
    (2)、提取区域特征:将候选区域表示为定长向量(由于分类器需要相同大小相同长度的向量作为输入)
    (3)、对区域进行分类:确定是否包含物体及其所属的类别
    (4)、后处理:对重叠较多的框进行合并(希望同一个物体上只有一个检测框)

二、深度目标检测

基于深度学习的目标检测方法
目标检测总结(仅作为个人笔记)_第6张图片
2012年之前是传统的目标检测算法,其准确率最好是在40%左右,截止2015年深度目标检测算法准确率已经达到了75%,其还有很大的发展空间。
目标检测总结(仅作为个人笔记)_第7张图片
两大类典型的目标检测方法:

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):引入实例分割进行多任务协同

R-CNN:Regions with CNN Features:

  • 基本框架
    目标检测总结(仅作为个人笔记)_第8张图片
    R-CNN的两个特点:
    (1)用有监督预训练解决表示学习需要大量标注数据的问题
    (2)仅生成少量候选区域来解决模型计算速度慢的问题

第一步:生成候选区域
1、传统方法:滑动窗口+图像金字塔
2、专门的候选区域生成方法:Selective Search
(1)无监督:没有训练过程,不需要带标注的数据
(2)数据驱动:根据图像特征生成候选区域
(3)基于图像分割任务

Selective Search方法主要分为以下几步:
(1)用现有的分割方法将图像快速划分为多个区域
(2)基于相似度对相邻的区域进行合并
(3)不断地合并区域直到整张图像成为一个区域
(4)在合并的过程中,基于所以产生的区域给出对应的矩形框,得到用于目标检测的候选窗口
目标检测总结(仅作为个人笔记)_第9张图片
selective search属于穷举法得到候选框。

第二步:用CNN提取区域特征
1、将不同大小的候选区域缩放到相同大小:227 x 227(yolo和ssd中也是227 x 227)
对区域进行些许扩大以包含少量上下文信息
目标检测总结(仅作为个人笔记)_第10张图片
2、将所有区域送入AlexNet提取特征:5个卷积层,2个全连接层
3、以最后一个全连接层的输出作为区域的特征表示:4096维
4、有监督预训练 Pretraining
(1)、图像分类任务:ImageNet,1000类,仅有图像标签,没有物体边框标注
(2)、数据量:120万张图像
5、针对目标进行微调 Fine-tuning
(3)、目标检测任务:PascalVOC,20类,有物体边框标注
(4)、数据量:仅有数千或者上万张图像
(5)、微调是可选步骤,有助于进一步提升检测精度,用大量数据学习的预训练模型,其提取的特征已经具有较好的迁移能力

第三步:对区域进行分类+边框校准

对区域进行分类可以选择SVM或者Softmax:
1、线性SVM分类器(默认是使用SVM):

  • 针对每个类别单独训练
  • 两类分类:one-vs-all

2、Softmax(一般用Softmax就能达到很好的效果了)

  • 和整个CNN一起端到端训练
  • 所有类别一起训练
  • 多类分类
    目标检测总结(仅作为个人笔记)_第11张图片

边框校准:

  • 让检测框的位置更加准确,同时框的更加紧致(包含更少的背景区域)
    -线性回归模型
    目标检测总结(仅作为个人笔记)_第12张图片
    这个公式是根据物体窗口特征(x,y,w,h)经过边框校准得到更合适的特征

R-CNN的检测精度比较:

  • Pascal VOC:20类
  • ImageNet:200类
    目标检测总结(仅作为个人笔记)_第13张图片
    R-CNN在PascalVOC中可以得到55%左右的准确率,高于传统方法
    目标检测总结(仅作为个人笔记)_第14张图片
    R-CNN在ImageNet中可以得到31%左右的准确率,高于传统方法,甚至高于OverFeat等深度检测算法。

检测速度

  • 类别扩展:20类—>200 类
    目标检测总结(仅作为个人笔记)_第15张图片
    从上图可以看出:20类和200类所用时间基本一样,这也是R-CNN的一个特点

问题:

CNN要求输入图像具有统一的尺寸

  • 不同尺寸和长宽比的区域被变换到相同大小
    目标检测总结(仅作为个人笔记)_第16张图片
  • 裁剪会导致信息丢失(或引入过多背景),缩放会导致物体变形
    目标检测总结(仅作为个人笔记)_第17张图片
    我们知道对尺寸的限制仅在全连接层(fc layers)

解决方案:使用SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

  • 卷积:允许任意大小的图像输入网格
  • SPP:将不同大小的特征图归一化到相同大小(SPP-net:spatial Pyramid Pooling)
  • 全连接:接受固定维度的输入
    目标检测总结(仅作为个人笔记)_第18张图片
    使用SPP-net还有一个优点就是它是对整张图计算卷积特征,去除了各个区域的重复计算
    目标检测总结(仅作为个人笔记)_第19张图片
    从上图我们可以看到普通R-CNN总共用时14.46s,而用了SPP-net之后时间变为了0.142s,速度有了很大的提升。

接下来我们又遇到了问题:

  • 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

解决方案:

  • 保留SPP-net的优势---->简化SPP为单尺度:Rol pooling(通常是单尺度,而在SPP-net中通常都是2的幂次)
  • 引入了多任务学习,将多个步骤整合到一个模型中
    目标检测总结(仅作为个人笔记)_第20张图片
    这里把分类和回归放在一个CNN网络中学习,这样可以极大地减少训练的复杂度,使训练更加方便。上图表明其将整张图像进行一次卷积层的计算,将不同的roi映射到特征图上,然后用ROI-pooling提取特征,因此速度可以和SPP-net一样快。

Fast R-CNN还有两点改进的地方:

  • 边框回归:Smooth L1 Loss(光滑L1函数)
    在这里插入图片描述
    对于一些偏离较大的点,光滑L1函数可以防止其梯度一下变的太大,具有更好的鲁棒性。
  • 全连接层加速:Truncated SVD
    在这里插入图片描述
    其思想是将一个大全连接层---->两个小全连接层
    时间复杂度:O(uv)==>O(t(u+v))
    目标检测总结(仅作为个人笔记)_第21张图片
    加了SVD之后其速度有了很大的提升。

实验:

  • 多任务学习的优势:
    目标检测总结(仅作为个人笔记)_第22张图片
    对于三个不同的网络S M L,我们可以直观的看出multi-task training+test-time bbox reg的准确度都达到了最高。

下边的实验是测试SPP(多尺度) vs ROI pooling(单尺度)的精度对比:
SVM vs Softmax
在这里插入图片描述
由上图我们可以看出其进度没有明显的下降。

问题:

Fast R-CNN仍然需要专门的候选窗口生成模块

  • Selective Search:CPU,2S/图
  • 其他方法:EdgeBox,GPU,0.2S/图(和CNN分类所需的时间相当,还是非常大)
    目标检测总结(仅作为个人笔记)_第23张图片
    EdgeBox基本代表了最快的速度了,但是时间开销还是很大。

解决方案:

  • Region Proposal Network(RPN)
    (1)用CNN生成候选窗口
    (2)让生成候选窗口的CNN和分类的CNN共享卷积层
    目标检测总结(仅作为个人笔记)_第24张图片
    (3)如何产生不同大小的窗口?
    目标检测总结(仅作为个人笔记)_第25张图片
    这里引入了Anchor Box(具有不同尺度,不同长宽比,在SSD和YOLO中也有使用),具体就是设置一些不同尺度,不同长宽比的先验框(假如有k个先验框,就会有2k个scores和4k个代表位置坐标的值(x,y,w,h)),然后对先验框进行分类和回归,可以大大提高准确率和时间。

模型学习主要分为两种:

  • 交替式4步法训练
    (1)基于预训练模型训练RPN
    (2)基于预训练模型,以及上一步得到的RPN,训练Fast R-CNN
    (3)固定共享的卷积层,训练RPN
    (4)固定共享的卷积层,基于上一步得到的RPN,训练Fast R-CNN
  • 端到端训练(基本选择端到端)
    (1)同时学习RPN和分类网络
    (2)分类网络的梯度不向RPN回传

Faster R-CNN训练结果:

  • RPN的召回率
    目标检测总结(仅作为个人笔记)_第26张图片
    从上图可以明显的看出RPN的召回率要高于Selective Search。RPN用更少的窗口就可以做到Selective Search更多的窗口做到的事情。

  • 卷积层:共享vs不共享
    目标检测总结(仅作为个人笔记)_第27张图片
    不共享的话精度只能达到68.5,共享卷积层之后精度最高可以达到69.9,共享卷积层有助于提高精度。

下边对R-CNN—>(SPP-net)---->Fast R-CNN—>Faster R-CNN进行一个总结

  • 化零为整:多任务学习,参数/计算共享
    目标检测总结(仅作为个人笔记)_第28张图片

  • 由慢变快:SPP,ROI pooling,Truncated SVD
    目标检测总结(仅作为个人笔记)_第29张图片

后续相关工作:

  • 更快:R-FCN(2016)
  • 更准:FPN(2016)
  • 更多任务:Mask R-CNN(2017)

接下来对上述几种方法进行一个总结:

1、R-FCN(Faster R-CNN + ResNet):针对ResNet进一步实现更大计算的共享

  • 一般的网络只包含4次下采样,但ResNet包含5次
    目标检测总结(仅作为个人笔记)_第30张图片
    R-FCN多了一个conv5的下采样操作,pooling的大小也从原来的7x7变为了14x14,故而速度肯定会有明显的降低,下边就是针对ResNet进一步实现更多计算的共享。
  • 全卷积网络:在不同ROI之间共享conv5的计算
  • 新的pooling方式:Postion-sensitive ROI pooling
    目标检测总结(仅作为个人笔记)_第31张图片
    R-FCN是一种全卷积的方式,由于之前对于每一个ROI都需要经过conv5计算,R-FCN采用全图去卷积,也就是在下图的地方用全图去卷积。
    目标检测总结(仅作为个人笔记)_第32张图片
    在经过全图卷积之后再经过一个Postion-sensitive ROI pooling得到最后的特征表示,然后通过vote的方式得到最终的检测结果。
    这里引入了Postion-sensitive ROI pooling(位置敏感池化)这个概念,下边对其进行解释:目标检测总结(仅作为个人笔记)_第33张图片
  • 针对尺度问题引入特征金字塔(2种,选择第二种)
    1、直接通过不同尺度的输入构建特征金字塔(时间复杂度和空间复杂度较高)
    2、利用CNN本身的结构来构造特征金字塔
    目标检测总结(仅作为个人笔记)_第34张图片

接下来介绍Mask R-CNN

Mask R-CNN是一种检测和分割多任务协同学习的方法

  • 增加一个分支预测分割Mask
  • 引入了一个ROIAlign的操作
    目标检测总结(仅作为个人笔记)_第35张图片

2、单阶段检测器Single-Shot

单阶段检测器特点:

(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的实现方法

  • 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
    目标检测总结(仅作为个人笔记)_第36张图片

  • 每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
    这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
    目标检测总结(仅作为个人笔记)_第37张图片
    其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

  • 每个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的。

举例说明:

  • 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
    整个网络结构如下图所示:
    目标检测总结(仅作为个人笔记)_第38张图片

  • 在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
    在这里插入图片描述

  • 等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

  • 得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

检测进度和速度:

  • 在GPU上最快能达到155FPS,明显高于Fast R-CNN系列
    目标检测总结(仅作为个人笔记)_第39张图片
  • 对Background有很好的改善(Fast R-CNN为13.6%,而YOLO只有4.75%)
    目标检测总结(仅作为个人笔记)_第40张图片
    存在的问题(见上边的饼状图):
  • 小尺度物体难以检测
  • 密集排布的物体
  • 检测框的准确性

(2)SSD(Single-Shot Multibox Detector)

Single-Shot

  • 单阶段:不生成候选窗口,直接给出检测结果
  • 如何保证精度?
    (1)对不同长宽比的物体,用不同的predictor
    (2)多尺度:在不同尺度的特征图上进行预测
    目标检测总结(仅作为个人笔记)_第41张图片
    Default Box的设置:
  • 尺度:每组特征图上只考虑一个尺度的Default Box:在这里插入图片描述
  • 长宽比:{1,2,3,1/2,1/3}
  • 对长度比为1的情况额外增加一个尺度:在这里插入图片描述
  • 个标注框进行匹配:交并比>0.5,允许一个标注框和多个Default Box进行匹配

训练策略:

  • 难例挖掘:选择较难的反例,反例数量不超过正例数量的3倍
  • 数据增广:对原图进行随机Crop,在物体周围Crop,随机翻转

下边是引用https://blog.csdn.net/zhangjunp3/article/details/80597312中的论文,讲解的更加详细。

SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构下图所示。下面将SSD核心设计理念总结为以下三点:
目标检测总结(仅作为个人笔记)_第42张图片

  • 1.采用多尺度特征图用于检测

所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,这正如下图所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,如图4所示,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。
目标检测总结(仅作为个人笔记)_第43张图片

  • 2.用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m x n x p 的特征图,只需要采用 3 x 3 x p 这样比较小的卷积核得到检测值。

  • 3.设置先验框

在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如图所示,可以看到每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练,后面会详细讲解训练过程中的先验框匹配原则。
目标检测总结(仅作为个人笔记)_第44张图片

实验:
1、实现细节的影响:

  • 数据增广非常关键
    目标检测总结(仅作为个人笔记)_第45张图片
    不用数据增广精度为65.4%,加上数据增广之后精度为72.1%,可以看出来数据增广非常重要。

  • 精度和速度比较:
    目标检测总结(仅作为个人笔记)_第46张图片
    Faster R-CNN精确达到了42.7%,而SSD500精确度达到了43.7%。
    Faster R-CNN的FPS为17,而SSD500的FPS为23或者58,也有了很大的提升。
    由此可见无论精度还是速度SSD都优于Faster R-CNN。

下边引出DSSD::Deconvolutional Single-Shot Detector

动机:

  • 为小目标增加更多上下文信息
    1、将深层特征和浅层特征相融合
    2、深层特征具有更大的感受野,能够提供上下文信息
    目标检测总结(仅作为个人笔记)_第47张图片
    作者对SSD的第一项改进就是换网络,把VGG换成Resnet-101(Figure 1上半部分)。这里,作者在conv5-x区块后面增加了一些层(SSD Layers),然后会在conv3-x,conv5-x以及SSD Layers预测分类概率和边框偏移。如果仅仅是换网络的话,mAP居然还下降了一个百分点,只有增加上下文信息,精度才会有较大提升。

方法就是把红色层做反卷积操作,使其和上一级蓝色层尺度相同,再把二者融合在一起,得到的新的红色层用来做预测。如此反复,仍然形成多尺度检测框架。在图中越往后的红色层分辨率越高,而且包含的上下文信息越丰富,综合在一起,使得检测精度得以提升。

预测模块
SSD的直接从数个卷积层中分别引出预测函数,预测量多达7000多,梯度计算量也很大。MS-CNN方法指出,改进每个任务的子网可以提高准确性。根据这一思想,作者在每一个预测层后增加残差模块,并且对于多种方案进行了对比,如下图所示。结果表明,增加残差预测模块后,高分辨率图片的检测精度比原始SSD提升明显。
目标检测总结(仅作为个人笔记)_第48张图片
反卷积SSD网络
为了引入更多的高级上下文信息,作者在SSD+Resnet-101之上,采用反卷积层来进行预测,和原始SSD是不同的,最终形成沙漏形的网络。添加额外的反卷积层以连续增加后面特征图的分辨率,为了加强特征,作者在沙漏形网络中采用了跳步连接(skip connection)方法。按理说,模型在编码和解码阶段应该包含对称的层,但由于两个原因,作者使解码(反卷积)的层比较浅:其一,检测只算是基础目标,还有很多后续任务,因此必须考虑速度,做成对称的那速度就快不起来。其二,目前并没有现成的包含解码(反卷积)的预训练模型,意味着模型必须从零开始学习这一部分,做成对称的则计算成本就太高了。

反卷积模块
为了整合浅层特征图和反卷积层的信息,作者引入了如figure 3所示的反卷积模块,该模块可以适合整个DSSD架构(figure1 底部实心圆圈)。作者受到论文Learning to Refine Object Segments的启发,认为用于精细网络的反卷积模块的分解结构达到的精度可以和复杂网络一样,并且更有效率。作者对其进行了一定的修改,如Figure 3所示:其一,在每个卷积层后添加批归一化层;其二,使用基于学习的反卷积层而不是简单地双线性上采样;其三,作者测试了不同的结合方式,元素求和(element-wise sum)与元素点积(element-wise product)方式,实验证明点积计算能得到更好的精度。
目标检测总结(仅作为个人笔记)_第49张图片
网络训练
训练技巧大部分和原始SSD类似。首先,依然采用了SSD的default boxes,把重叠率高于0.5的视为正样本。再设置一些负样本,使得正负样本的比例为3:1。训练中使Smooth L1+Softmax联合损失函数最小。训练前依然需要数据扩充(包含了hard example mining技巧)。另外原始SSD的default boxes维度是人工指定的,可能不够高效,为此,作者在这里采用K-means聚类方法重新得到了7种default boxes维度,得到的这些boxes维度更具代表性(此处和YOLOv2的聚类做法有点类似,可参考博客:YOLOv2 论文笔记)。
目标检测总结(仅作为个人笔记)_第50张图片

实验:

  • 类别和边框的预测:带跨层链接的预测模块更好
  • 特征融合:相乘比相加更好
    具体见下图:
    目标检测总结(仅作为个人笔记)_第51张图片
  • 速度和精度的比较
    目标检测总结(仅作为个人笔记)_第52张图片
    相比于R-CNN系列精度有一定提升,速度稍微下降一点。

接下来引入了RetinaNet

问题:

  • 单阶段检测器在精度上通常落后与两阶段检测器
  • 主要原因:样本不平衡
    1、背景区域远多于物体区域
    2、大部分背景容易和物体区分开
    (1)对模型学习只能提供非常有限的直到
    (2)数量上占主导—>学习到不好的模型
  • 现有方法
    采样:难例挖掘,只是用部分样本
    目标检测总结(仅作为个人笔记)_第53张图片
    从上图可以看出两阶段检测器在精度上占优,而单阶段检测器在速度上占优,单阶段检测器检测精度落后与两阶段检测器主要是因为样本不平衡。

解决方案:

  • Focal Loss
    使用所有样本,但是对样本给予不同的权重
    目标检测总结(仅作为个人笔记)_第54张图片
    根据难易程度不同给予不同的权重。

实验:

  • 和单阶段检测器相仿的速度
  • 超过两阶段检测器的检测精度
    目标检测总结(仅作为个人笔记)_第55张图片
    RetinaNet的检测精度超过两阶段检测器!

目标检测总结(仅作为个人笔记)_第56张图片
上图表明不同的检测器检测的时候和精度的对应关系,可以看出RetinaNet明显优于之前的模型。

三、目标检测评价:

  • 评价方式
  • 数据集和比较方法

1、评价方式

检测框匹配:

  • 交并比 IOU,Intersection over Union
    计算公式:
    在这里插入图片描述

  • 匹配策略
    1、贪心算法
    按照得分从高到低顺序遍历,搜索满足交并比阈值的检测框
    大部分数据集采用这种方式进行评测
    2、匈牙利算法(用得很少)
    将匹配建模成一个分配问题:最大化总的交并比
    FDDB人脸检测数据集采用这种方式对检测框进行匹配

  • 动态交并比阈值
    1、不同大小的框对交并比的“敏感”程度不同
    2、ImageNet在测评时对较小的物体会放宽交并比阈值
    e.g 20 x 20的框包含了10 x 10的物体,交并比为0.25
    在这里插入图片描述

  • 按条件匹配/忽略框
    例如:评测某个尺度范围的检测精度,检测到了不算对,漏检了也不算错

2、评价指标
目标检测总结(仅作为个人笔记)_第57张图片

  • 准确率 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阈值下的平均(很少使用)

数据集 & 方法比较

多类/通用目标检测

  • Pascal VOC(2007/2012)
    1、类别数量:20,规模:10000,划分:训练 + 验证 + 测试
    2、comp3 : 只允许用所给训练数据,comp4:允许使用外部数据
    目标检测总结(仅作为个人笔记)_第58张图片
    上图是目前在Pascal VOC上最佳的检测情况。

  • ImageNet
    2013年引入检测任务,类别别数量:200,规模:100000
    大网络/新结构 + 模型集成 + 其他策略
    本地测试 :val2子集
    目标检测总结(仅作为个人笔记)_第59张图片

  • MS COCO(难度最大,截至2017只能达到52.6%的精确度)
    类别数量:80,规模:100000图/1000000物体
    目前难度最大的目标检测数据集

  • 单类目标检测
    1、人脸检测:FDDB,Wider Face
    2、行人检测:Caltech Pedestrian,CityPersons(2017发布)
    3、车辆检测:UA-DETRAC

总结 :

三部分内容:

  • 任务定义,基本流程
  • 两类基于深度学习的目标检测器
    两阶段,单阶段
  • 评价方式,数据集

如果哪里有误,请评论告知,多谢!

你可能感兴趣的:(目标检测总结(仅作为个人笔记))