1. 目标
- 分类-Classification
- 解决“是什么?”的问题
- 即给定一张图片或一段视频判断里面包含什么类别的目标
- 定位-Location
- 解决“在哪里?”的问题
- 即定位出这个目标的的位置
- 检测-Detection
- 解决“是什么?在哪里?”的问题
- 即定位出这个目标的的位置并且知道目标物是什么。
- 分割-Segmentation
- 分为实例的分割(Instance-level)场景分割(Scene-level)
- 解决“每一个像素属于哪个目标物或场景”的问题。
2. 应用
- 行人检测
- 车辆检测
- 交通标识
- 缺陷检测
- 病虫害检测
3. 基本概念
- mAP: mean average precision
3.1 卷积
3.1.1 滤波器(Filter)
- 滤波器必须具有与输入图像相同数量的通道,在滤波器(Filter)中为Kernel个数
- Filter中Kernel的值(权重矩阵)通过训练获得
3.1.2 卷积层输出
- 卷积层输出的通道数:等于卷积操作期间使用的滤波器的个数
- 卷积层输出大小(宽和高):
W o u t = W i n − F w + 2 P S + 1 H o u t = H i n − F w + 2 P S + 1 W_{out} = \frac{W_{in}-F_w+2P}{S}+1 \\ H_{out} = \frac{H_{in}-F_w+2P}{S}+1 Wout=SWin−Fw+2P+1Hout=SHin−Fw+2P+1
W i n W_{in} Win:输入图像的宽度
H i n H_{in} Hin:输入图像的高度
F w F_w Fw:滤波器的宽度
P P P:填充像素数(Padding)
S S S:移动步幅(Stride)
3.1.3 三通道卷积运算(RGB图像)
- RGB有3个通道(channels),所以其对应的Filter(滤波器)必须有3个kernel, 每个kernel与一个channel对应元素相乘,然后相加;最后把三个输出值再相加,则为输出特征图像的一个元素
3.1.4 多通道卷积运算
3.2 1x1滤波器
- 用途:
- 增加网络的深度
- 升维或者是降维
3.2.1 增加网络的深度 (尺寸不变+激活)
- 卷积核越大,它生成的 featuremap 上单个节点的感受野就越大,随着网络深度的增加,越靠后的 featuremap 上的节点感受野也越大。因此特征也越来越抽象
- 若想在不增加感受野的情况下,让网络加深(即引入更多的非线性),而 1x1 卷积核,正好可以办到
- 卷积后生成图片的尺寸受卷积核的大小和跨度影响,但如果卷积核是 1x1 ,跨度也是 1,那么生成后的图像大小就并没有变化
- 但通常一个卷积过程包括一个激活函数,比如 Sigmoid 和 Relu。即在尺寸不发生变化的情况下,引入了更多的非线性,这将增强神经网络的表达能力
3.2.2 升维或者是降维(参数少)
- 特征图像的通道数:等于滤波器的个数
- 升维:若滤波器的个数大于输入层的通道数
- 降维:若滤波器的个数小于输入层的通道数
- 所有尺寸的滤波器都可以达到升维和降维的目的,但1x1滤波器所需的参数更少(即1个),若只想单纯的去提升或者降低 feature map 的通道数,1x1 滤波器无疑是一个较佳选项
4. 算法
- 算法思想
- 以下算法将对象检测视为回归问题
序号 | 算法 | 检测器级数 | 生成候选区域 | 目标 |
---|---|---|---|---|
1 | R-CNN | 两级 | 选择性搜索算法 (SSA) | 目标:准确性, 缺点:速度慢 |
2 | Fast R-CNN | 两级 | 选择性搜索算法 (SSA) | 目标:准确性, 缺点:速度慢 |
3 | Faster R-CNN | 端到端 | 区域提议网络(RPN) | 目标:准确性, 缺点:速度慢 |
4 | SSD | 单级 | 目标:速度快(实时),缺点:准确度低 | |
5 | YOLO | 单级 | 目标:速度快(实时),缺点:准确度低 |
- 算法特点
序号 | 算法 | 作者 | 特点 |
---|---|---|---|
1 | DPM(Deformable Part Model) 可变形的组件模型 | Felzenszwalb | 基本思想:先提取DPM人工特征,再用latentSVM分类 局限性: 1) 首先,DPM特征计算复杂,计算速度慢; 2) 其次,人工特征对于旋转、拉伸、视角变化的物体检测效果差 |
2 | Alexnet | Alex Krizhevsky | 第一个卷积神经网络模型 |
3 | OverFeat | Zhang xiang | 优点: 1) 共享卷积层用于多任务学习 2) 全卷积网络思想 3) 在特征层进行滑窗操作(Sliding Window)避免大量重复运算 缺点: 1)采用了多尺度贪婪的划窗策略,导致计算量还是很大 2)共享特征层的表征能力弱,不支持多尺度特征融合,对小目标效果差 |
4 | R-CNN (Region CNN) | Ross Girshick | 检测步骤: 1) 使用Selective Search算法从图像中提取2K个候选区域 2) 把所有候选区域缩放成固定大小(227x226) 3) 使用DCNN提取每个候选区域的特征,得到固定长度的特征向量 4) 把特征向量送入SVM分类器得到类别信息 5) 送入全连接网络进行回归得到在原图中的坐标位置 缺点: 1) 重复计算,有2K个候选区域 2) 非端到端方案,每一步开操作,且还要保存中间结果 3)速度慢,检测一张图片需要10多秒 4) 候选区域缩放成固定大小,会造成形变,导致检测性能下降 |
5 | SPPNet (Spatial Pyramid Pooling) | Kaiming He | 思想: 1)在R-CNN的基础上进行改进 2) 先一次性计算卷积,然后提取候选区域的特征向量 3) 对特征图像区域进行固定数量的网络划分,对划分的每个网格进行池化,最后得到固定长度的输出 优点: 1)速度比R-CNN快了约30倍(卷积计算量大在减少) 缺点: 1)非端到端方案,需要保存中间结果 |
6 | Fast RCNN (FRCNN) | Ross Girshick | 思想: 1) 基于SPPNet做了进一步改进 2) 主要创新:使用RoI Pooling层, 将不同大小的候选区域的卷积特征图重采样成固定大小的特征 3) RoI池化层与SPP层类似, 但只使用一个尺度进行网格划分和池化 4) 将深度网络和后面的SVM分类两个阶段整合到一起,使用一个新的网络直接做分类和回归 进步: 1) 网络在Pascal VOC上的训练时间从R-CNN的84小时缩短到9.5小时 2) 检测时间从45秒缩短到0.32秒 |
7 | Faster RCNN | Shaoqin Ren | 思想: 1) 在Fast RCNN 基础上进行改进 2) 在主干网络中增加了RPN (Region Proposal Network)网络 3) 通过一定规则设置不同尺度的锚点(Anchor)在RPN的卷积特征层提取候选框来代替Selective Search等传统的候选框生成方法 革新: 1) 第一个端到端训练的网络 限制因素: 1) 基础网络的复杂度 2) 候选框数量的多少 3) 分类和位置回归子网络的复杂度 (每个候选区域都独立进行前向计算) |
8 | R-FCN | Jifeng Dai | 思想: 1) 位置敏感得分图 (Position-Positive Score Maps) 通过预测RoI中不同部位的类别投票表决产生该RoI的类别预测 2)R-FCN继承了 Faster RCNN 的框架结构 3)在Faster R-CNN的基础上通过引入PPSM, 将RoI-Wise Subnetwork去掉了,直接在PPSM上利用RoI Pooling 进行信息采样,并进行分类和回归位置 |
9 | Mask R-CNN | Kaiming He | 思想: 1)Faster R-CNN在做下采样和RoI Pooling时都对特征图大小做了取整操作,对语义分割的精度影响大 2)对网络中涉及特征图尺寸变化的环节都不使用取整操作,而是通过双线性差值填补非整数位置的像素, 提升了目标检测效果且满足语义分割的精度要求 |
10 | 总结 | 总结 | 总结:之上的算法为两阶段算法: 1)候选区域生成 2)区域分类 |
11 | YOLO (You Look Only Once) | 思想: 1)单步算法(Single-Stage) 2)算法将待检测图像缩放到统一尺寸 3)为了检测不同位置的目标,将图像等分成网格 4)若某个目标的中心落在一个网格单元中,此网格单元就负责预测该目标 5) 比Faster R-CNN快了10倍 | |
11.1 | YOLOv1 | 特性: 1)只针对最后7x7的特征图进行分析 2)对小目标的检测效果不佳 3)当多个目标出现在一个Grid Cell时,不容易区分 | |
11.2 | YOLOv2 | 特性: 1)增加了批量归一化层以及残差网络结构 2)增加了一个高分辨率的分类网络(448x448) | |
11.3 | YOLOv3 | 特性: 1)支持多尺度预测(FPN) 2)更好的Backbone网络(Darknet53残差网络) 3)分类损失采用binary cross-entropy损失函数替换Softmax损失函数(Softmax会选择分数最高的类别判定为当前框所属的类别,而现实中一个目标可能属于多个类别标签) | |
12 | SSD (Single Shot MultiBox Detector) | 效果: 1)SSD对YOLO进行了改进,达到了和两阶段方法相当的精度,同时又保持了较快的运行速度 思想: 1)采用了网格划分的思想,和Faster RCNN不同的是它将所有的操作整合在一个卷积网络中完成 2)为了检测不同尺度的目标,SSD对不同卷积层的特征图像进行滑窗扫描 3)在前面的卷积层输出的特征图像中检测小的目标,在后面的卷积层输出的特征图像中检测大的目标 | |
13 | FPN (Feature Pyramid Network) | 思想: 1)同时利用低层特征高分辨率和高层特征的高语义信息 2)通过融合不同层的特征达到提升预测的效果的作用 |
4.1 R-CNN
- 使用选择性搜索算法(SSA:Selective Search Algorithm)创建候选区域
- SSA是一个固定算法,没有学习能力,且速度很慢(非常耗时)
- 执行2000次CNN
4.2 Fast R-CNN
- 执行1次CNN, 产生一个Feature Map
- 生成候选区域(SSA)是Fast R-CNN的瓶颈
4.3 Faster R-CNN
- 网络学习候选区域,然后预测候选区域(RPN),而不使用固定的SSA算法
- RPN
- RPN层先经过3x3的卷积运算,然后分为两路
- 一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map
- 另一路用来确定候选框的位置,通过bounding box regression实现
- 两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal
- 测试速度(包括候选区域)
4.4 YOLO (You Only Look Once)
- R-CNN系列:使用区域在图像内定位对象
- YOLO:使用单个卷积网络预测边界框和这些框的类概率
- YOLO比其他物体检测算法快几个数量级(每秒45帧)
- 检测小物体困难
- YOLO:不需要专门的RPN来获取ROI, 单次检测器会同时预测边界框和类别
- 工作流程
- 将一张图像分成一个SxS网格,在每个网格中我们使用m个边界框
- 对于每个边界框,网络为边界框输出类别概率和偏移值
- 选择具有高于阈值的类别概率的边界框,并将其用于在图像内定位对象
4.5 SSD (Single Shot MultiBox Detector)
- Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢
- 而YOLO则相反,速度快,但准确率和漏检率不尽人意
- SSD:不需要专门的RPN来获取ROI, 单次检测器会同时预测边界框和类别
- SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),72.1%的mAP
5. speed and accuracy比较(2018.3)
5.1 影响性能的因素
- 特征提取器(VGG16,ResNet,Inception,MobileNet)
- 提取器的输出步幅
- 输入图像分辨率
- 匹配策略和IoU阈值(如何在计算损失时排除预测)
- 非最大抑制IoU阈值
- 示例挖掘比率(正锚与负锚比率)
- 建议或预测的数量
- 边界框编码
- 数据增强
- 训练数据
- 在训练或测试中使用多尺度图像(裁剪)
- 对象检测在哪一个特征层执行
- 定位损失功能
- 使用的深度学习软件平台
- 训练参数(batch size, input image resize, learning rate, and learning rate decay)
5.2 决策
- 在准确度与速度间取得平衡
- 正确的做法是:哪种检测器和哪种配置可以提供您的应用所需的速度和准确度的最佳平衡
- 最准确
- 最准确的单一模型使用Inception ResNet的Faster R-CNN和300个候选区域(1FPS)
- 最快
- 具有MobileNet的SSD可在最快的检测器中提供最佳的准确度
- SSD速度快,但与其他检测器相比,对小物体的性能较差
- 对于大型物体,SSD可以以更快,更轻的提取器胜过Faster R-CNN和R-FCN
- 速度与准确度的最佳平衡点
- 如果我们将候选区域数量减少到50,当准确度为32mAP时,Faster R-CNN可以达到R-FCN和SSD的速度
5.3 基于VOC2007/2012的比较
5.3.1 准确度比较
- *:表示对小目标(small object)使用了数据增强(data augmentation)
- **:表示结果是基于VOC2007测试集
5.3.2 帧率比较
- 输入图像分辨率和特征提取器会影响速度
- 以下是相应论文报告的最高和最低FPS
5.4 基于COCO的比较
5.4.1 准确度比较
- 在COCO数据集上进行对象检测较难,通常检测器的mAP会低得多
- FPN和Faster R-CNN *(使用ResNet作为特征提取器)具有最高的准确性
- RetinaNet构建在FPN(使用ResNet)之上
5.5 Google研究报告
5.5.1 速度和准确度(Speed v.s. Accuracy)
- 使用MS COCO数据集进行训练
- 使用TensorFlow重新实现Faster R-CNN, R-FCN, SSD
- 通常Faster R-CNN更准确,而R-FCN和SSD更快
- Faster R-CNN(使用Inception Resnet特征提取器,300个候选区域 )获得最高的准确性(1FPS)
- SSD(使用MobileNet特征提取器)获得最高的准确度(mAP)
- 下图帮助我们找到最佳交易点,以实现良好的速度回报
- 使用残差网络的R-FCN模型在准确性和速度之间取得了很好的平衡
- 若把候选区域限制为50,则使用Resnet的R-CNN更快可以达到类似的性能
5.5.2 特征提取器(Feature Extractor)
- 特征提取器对精度的影响
- Faster R-CNN和R-FCN可以利用更好的特征提取器
- SSD对特征提取器不敏感
(The x-axis is the top 1% accuracy on classification for each feature extractor.)
5.5.3 物体大小
- 大物体:即使使用简单的提取器,SSD的性能也很好。 使用更好的提取器,SSD甚至可以匹配其他检测器的精度
- 小物体:SSD表现较差
5.5.4 输入图像分辨率
- 更高的分辨率可显著改善小物体的物体检测能力,同时也有助于大物体
- 当在两个方向上(行和列)将分辨率降低两倍时,准确度平均降低15.88%,但推理时间也平均降低27.4%
5.5.5 候选区域数
- 候选区域数量可以显着影响Faster R-CNN(FRCNN)速度,但不会大大降低准确性
- 使用50个候选区域而不是300个候选区域时,使用Inception Resnet的Faster R-CNN可以将速度提高3倍, 但精度仅下降了4%
- 由于R-FCN的每个ROI的工作量要少得多,因此速度提高不明显
5.5.6 GPU Time
- 不同的模型使用不同的特征提取器所消耗的时间
- FLOPS(the number of floating point operations)用来衡量复杂度,它不一定反映准确的速度
5.5.7 内存
- MobileNet需要的内存最小(小于1Gb)
参考: