目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:
①基于区域建议的目标检测与识别算法,如R-CNN,Fast-R-CNN,Faster-R-CNN;
②基于回归的目标检测与识别算法,如YOLO,SSD;
③基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法.
目前,目标识别主要有以下几个应用场景:
① 安全领域:指纹识别、人脸识别等,代表项目如Face++、依图科技、深醒科技等。
② 军事领域:地形勘察、飞行物识别等,代表项目全悉科技。
③ 交通领域:车牌号识别、无人驾驶、交通标志识别等,代表项目纵目科技、TuSimple(图森科技)、驭势科技等。
④ 医疗领域:心电图、B超、健康管理、营养学等,代表项目智影医疗、图玛深维等。
⑤ 生活领域:智能家居、购物、智能测肤等,代表项目Yi+、木薯科技、肌秘等。
具体可参考这里:从图像识别多样化的应用场景,看计算机视觉的未来价值
预测的过程和训练基本相同,不同的是:
其实简单来说, 预测的过程就是根据在训练过程中找到的CNN回归值与所要预测的Grounding Truth之间的关系, 反向推导Grounding Truth的位置.
为了后面介绍Fast R-CNN, 这里我们简要介绍下SPP Net的相关内容.
SPP Net具有两个特点:
① 结合金字塔的思想, 实现了实现了CNNs的多尺寸输入. 解决了因为CNNs对输入的格式要求而进行的预处理(如crop,warp等)操作造成的数据信息的丢失问题.
② 只对原图进行一次卷积操作.
如上图所示, 输入图片经过多个卷积层操作, 再将输出的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个特征输入到全连接层,进行权重计算. 当然了,这个层数是可以随意设定的,以及这个图片划分也是可以随意的,只要效果好同时最后能组合成我们需要的特征个数即可.
由于R-CNN先获取proposal,再进行resize,最后输入CNN卷积, 这样做效率很低. SPP Net针对这一缺点, 提出了只进行一次原图的卷积操, 得到feature map , 然后找到每一个proposal在feature map上对应的patch, 将这个patch作为每个proposal的卷积特征输入到SPP Net中,进行后续运算. 速度提升百倍.
Fast R-CNN主要作用是实现了对R-CNN的加速, 它在R-CNN的基础上主要有以下几个方面的改进:
① 借鉴了SPP Net的思路, 提出了简化版的ROI池化层(没有使用金字塔), 同时加入了候选框映射的功能, 使得网络能够进行反向传播, 解决了SPP的整体网络训练的问题.
② 多任务Loss层. 1) 使用了softmax代替SVM进行多分类. 2) SmoothL1Loss取代了 Bounding Box回归.
Faster R-CNN和Faste R-CNN的不同点主要是使用RPN网络进行region proposal的选择, 并且将RPN网络合并到CNN网络中, 真正地实现了端到端的目标检测.这也是 Faster R-CNN的里程碑式的贡献.
Faster R-CNN的网络拓扑图如下图所示.
用于提取region proposal的神经网络叫做Region Proposal Network(简称RPN).
RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高), 提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。目标分类只需要区分候选框内特征为前景或者背景。
小结:本节介绍基于region proposal的目标检测与识别算法, 从最初的R-CNN, fast R-CNN, 直到最后的faster R-CNN, 逐步实现了端到端的目标识别和检测的网络.网络训练和测试的效率也有了一个较大的提升.可以说基于region proposal的R-CNN系列目标检测与识别算法是当前目标最主要的一个分支。
原文链接:深度学习之目标检测与目标识别
(You Only Look Once: Unified, Real-Time Object Detection)
Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。
我们直接看上面YOLO的目标检测的流程图:
(1) 给个一个输入图像,首先将图像划分成77的网格
(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出77*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。
可以看到整个过程非常简单,不再需要中间的Region Proposal找目标,直接回归便完成了位置和类别的判定。
小结:YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。
但是YOLO也存在问题:没有了Region Proposal机制,只使用7*7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。
(SSD: Single Shot MultiBox Detector)
上面分析了YOLO存在的问题,使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合Region Proposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了这点。
上图是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)