深度学习之目标检测(一)原理篇

深度学习之目标检测(一)原理篇

  • 一、目标识别分类及应用场景
  • 二、基于区域建议的目标识别的算法
    • 1. R-CNN
        • 1.1 基本工作流程:
        • 1.3 预测
        • 1.4 R-CNN的优劣分析及小结
    • 2. SPP Net
        • 2.1 SPP Net的金字塔池化
        • 2.2 SPP Net的一次卷积
    • 3. Fast R-CNN
        • 3.1 基本工作流程
    • 4. Faster R-CNN
        • 4.1 基本工作流程
        • 4.2 RPN
        • 4.3 Faster R-CNN的优点及其不足之处
  • 三、基于深度学习的回归方法
    • 5.YOLO (CVPR2016, oral)
    • 6.SSD
  • 扩展阅读

一、目标识别分类及应用场景

目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:
①基于区域建议的目标检测与识别算法,如R-CNN,Fast-R-CNN,Faster-R-CNN;
②基于回归的目标检测与识别算法,如YOLO,SSD;
③基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法.

目前,目标识别主要有以下几个应用场景:
① 安全领域:指纹识别、人脸识别等,代表项目如Face++、依图科技、深醒科技等。
② 军事领域:地形勘察、飞行物识别等,代表项目全悉科技。
③ 交通领域:车牌号识别、无人驾驶、交通标志识别等,代表项目纵目科技、TuSimple(图森科技)、驭势科技等。
④ 医疗领域:心电图、B超、健康管理、营养学等,代表项目智影医疗、图玛深维等。
⑤ 生活领域:智能家居、购物、智能测肤等,代表项目Yi+、木薯科技、肌秘等。

具体可参考这里:从图像识别多样化的应用场景,看计算机视觉的未来价值

二、基于区域建议的目标识别的算法

1. R-CNN

深度学习之目标检测(一)原理篇_第1张图片

1.1 基本工作流程:

  1. 接收一个图像, 使用Selective Search选择大约2000个从上到下的类无关的候选区域(proposal)
  2. 将提取出来的候选区域转换为统一大小的图片(拉升/压缩等方法), 使用CNN模型提取每一个候选区域的固定长度的特征.
  3. 使用特定类别的线性SVM分类器对每一个候选区域进行分类.
  4. Bounding Box回归.
    1.2 训练 (使用AlexNet, 要求输入为227*227大小的图像)
  5. 预训练. 预训练CNN(边界框标签不可用于该数据).
  6. 特征领域的微调. 使用基于CNN的SGD的训练,对模型进行微调.在这里选择学习率为预训练的1/10, 保证微调不破坏初始化.
  7. 将所有候选区域与真实框重叠(IoU)大于等于0.5的作为该框类的正例,其余的作为负例.再进行SVM分类.
    ------这个表明了训练过程是需要Grounding Truth(标定框)的, 是有监督的过程.
    注意: 在预训练和微调中使用的CNN网络参数的共享,并且提取的特征数目为(类别N+背景1)个.

1.3 预测

预测的过程和训练基本相同,不同的是:

  1. 预测的过程没有初始给定的标定框(Grounding Truth).
  2. Bounding Box回归.

其实简单来说, 预测的过程就是根据在训练过程中找到的CNN回归值与所要预测的Grounding Truth之间的关系, 反向推导Grounding Truth的位置.

1.4 R-CNN的优劣分析及小结

  1. R-CNN较之于传统方法的主要优势:
    ① 使用了Select Search进行proposal的选择, 极大地减少了proposal的数量.(百万级别~2000左右)
    ② 深度学习提取特征来代替人为设计, 较大地提高了精度和效率.
    ③ 使用了Bounding Box回归, 进一步提高了检测的精度.
  2. R-CNN的不足之处:
    ① 训练分为了多个步骤. 包括Select Search进行proposal的选择, CNN的模型训练(模型的预训练和微调), SVM的分类, Bounding Box回归等, 整个过程需要的时间过长.
    ② 由于当时的历史等各个因素的影响, 使用了SVM进行多类别分类,要训练多个分类器, 训练时间较长
    ③ 测试时间长,由于每张图片要处理大量的目标候选框
  3. 小结
    虽然R-CNN仍然存在很多的问题, 但是它打破了传统的目标识别的方式, 基于深度神经网络的目标识别技术也由此发展起来了.

2. SPP Net

为了后面介绍Fast R-CNN, 这里我们简要介绍下SPP Net的相关内容.
深度学习之目标检测(一)原理篇_第2张图片

SPP Net具有两个特点:
① 结合金字塔的思想, 实现了实现了CNNs的多尺寸输入. 解决了因为CNNs对输入的格式要求而进行的预处理(如crop,warp等)操作造成的数据信息的丢失问题.
② 只对原图进行一次卷积操作.

2.1 SPP Net的金字塔池化

深度学习之目标检测(一)原理篇_第3张图片

如上图所示, 输入图片经过多个卷积层操作, 再将输出的feature map输入到SPP Net池化层, 最后将池化后的特征输入全连接层.
下面针对上图来说说SPP Net池化层的思想.可以参见这里.
我们使用三层的金字塔池化层pooling,分别设置图片切分成多少块,论文中设置的分别是(1,4,16),然后按照层次对这个特征图feature A进行分别处理(用代码实现就是for(1,2,3层)),也就是在第一层对这个特征图feature A整个特征图进行池化(池化又分为:最大池化,平均池化,随机池化),论文中使用的是最大池化,得到1个特征。
第二层先将这个特征图feature A切分为4个(20,30)的小的特征图,然后使用对应的大小的池化核对其进行池化得到4个特征,
第三层先将这个特征图feature A切分为16个(10,15)的小的特征图,然后使用对应大小的池化核对其进行池化得到16个特征.
最后将这1+4+16=21个特征输入到全连接层,进行权重计算. 当然了,这个层数是可以随意设定的,以及这个图片划分也是可以随意的,只要效果好同时最后能组合成我们需要的特征个数即可.

2.2 SPP Net的一次卷积

由于R-CNN先获取proposal,再进行resize,最后输入CNN卷积, 这样做效率很低. SPP Net针对这一缺点, 提出了只进行一次原图的卷积操, 得到feature map , 然后找到每一个proposal在feature map上对应的patch, 将这个patch作为每个proposal的卷积特征输入到SPP Net中,进行后续运算. 速度提升百倍.

3. Fast R-CNN

Fast R-CNN主要作用是实现了对R-CNN的加速, 它在R-CNN的基础上主要有以下几个方面的改进:
① 借鉴了SPP Net的思路, 提出了简化版的ROI池化层(没有使用金字塔), 同时加入了候选框映射的功能, 使得网络能够进行反向传播, 解决了SPP的整体网络训练的问题.
② 多任务Loss层. 1) 使用了softmax代替SVM进行多分类. 2) SmoothL1Loss取代了 Bounding Box回归.

3.1 基本工作流程

  1. 接收一个图像, 使用Selective Search选择大约2000个从上到下的类无关的候选区域(proposal).
  2. 对整张图片进行卷积操作提取特征, 得到feature map.
  3. 找到每个候选框在feature map中的映射patch. 将patch作为每个候选框的特征输入到ROI池化层及后面的层.
  4. 将提取出的候选框的特征输入到softmax分类器中进行分类.==>替换了R-CNN的SVM分类.
  5. 使用SmoothL1Loss回归的方法对于候选框进一步调整位置.
    3.2 Fast R-CNN的优点及其不足之处
  6. 优点
    融合了R-CNN和SPP Net的精髓, 并且引入了多任务损失函数 ,极大地特高了算法的效率, 使得整个网络的训练和测试变得较为简单(相对R-CNN而言).
  7. 不足
    没有对Selective Search进行候选区域(region proposal)的选择进行改进, 仍然不能实现真正意义上的edge-to-edge(端到端)的训练和测试.

4. Faster R-CNN

Faster R-CNN和Faste R-CNN的不同点主要是使用RPN网络进行region proposal的选择, 并且将RPN网络合并到CNN网络中, 真正地实现了端到端的目标检测.这也是 Faster R-CNN的里程碑式的贡献.
Faster R-CNN的网络拓扑图如下图所示.
深度学习之目标检测(一)原理篇_第4张图片

4.1 基本工作流程

  1. 对整张图片输进CNN网络,得到feature map.
  2. 卷积特征输入到RPN,得到候选框的特征信息.
  3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类.
  4. 对于属于某一特征的候选框,用回归器进一步调整其位置.

4.2 RPN

用于提取region proposal的神经网络叫做Region Proposal Network(简称RPN).
RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高), 提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。目标分类只需要区分候选框内特征为前景或者背景。
深度学习之目标检测(一)原理篇_第5张图片

  1. 候选框的选取依据:
    ① 对于IoU大于等于0.7的标记为前景样本, 低于0.3的样本标记为后景样本.
    ② 丢弃①中所有的边界样本
    对于每一个位置,通过两个全连接层(目标分类+边框回归)对每个候选框(anchor)进行判断,并且结合概率值进行舍弃(仅保留约300个anchor),没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。
  2. 损失函数
    同时使用两种损失函数:
    a. 分类的误差.
    b. 前景样本的窗口位置的偏差.
  3. 模型训练
    从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式描述为:
    1)根据现有网络初始化权值w,训练RPN;
    2)用RPN提取训练集上的候选区域,用候选区域训练FastRCNN,更新权值w;
    3)重复1、2,直到收敛.

4.3 Faster R-CNN的优点及其不足之处

  1. 优点
    Faster R-CNN将我们一直以来的目标检测的几个过程(预选框生成, CNN特征提取, SVM/softmax/CNN预选框分类,y 预选框位置微调)完全被统一到同一个网络中去, 从真正意义上实现了从端到端的训练和测试.
  2. 不足
    预先获取预选区域,再对预选区域进行分类, 仍然具有较大的运算量, 还是没有实现真正意义上的实时检测的要求.

小结:本节介绍基于region proposal的目标检测与识别算法, 从最初的R-CNN, fast R-CNN, 直到最后的faster R-CNN, 逐步实现了端到端的目标识别和检测的网络.网络训练和测试的效率也有了一个较大的提升.可以说基于region proposal的R-CNN系列目标检测与识别算法是当前目标最主要的一个分支。
原文链接:深度学习之目标检测与目标识别

三、基于深度学习的回归方法

5.YOLO (CVPR2016, oral)

(You Only Look Once: Unified, Real-Time Object Detection)
Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。
我们直接看上面YOLO的目标检测的流程图:
深度学习之目标检测(一)原理篇_第6张图片

(1) 给个一个输入图像,首先将图像划分成77的网格
(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出7
7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。
可以看到整个过程非常简单,不再需要中间的Region Proposal找目标,直接回归便完成了位置和类别的判定。
深度学习之目标检测(一)原理篇_第7张图片

小结:YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。
但是YOLO也存在问题:没有了Region Proposal机制,只使用7*7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。

6.SSD

(SSD: Single Shot MultiBox Detector)
上面分析了YOLO存在的问题,使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合Region Proposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了这点。
深度学习之目标检测(一)原理篇_第8张图片

上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征(感觉更合理一些)。
那么如何建立某个位置和其特征的对应关系呢?可能你已经想到了,使用Faster R-CNN的anchor机制。如SSD的框架图所示,假如某一层特征图(图b)大小是88,那么就使用33的滑窗提取每个位置的特征,然后这个特征回归得到目标的坐标信息和类别信息(图c)。
不同于Faster R-CNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度(不同层的feature map 3*3滑窗感受野不同)。

小结:SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster R-CNN一样比较精准。SSD在VOC2007上mAP可以达到72.1%,速度在GPU上达到58帧每秒。
原文链接:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

扩展阅读

一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
目标检测算法汇总比较
修订版 | 目标检测:速度和准确性比较(Faster R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)

你可能感兴趣的:(深度学习,深度学习,图像识别,tensorflow)