R-CNN《Rich feature hierarchies for Accurate Object Detection and Segmentation》这篇文章的算法思想又被称之为:R-CNN(Regions with Convolutional Neural Network Features),是物体检测领域曾经获得state-of-art精度的经典文献 这篇paper的思想,改变了物体检测的总思路,现在好多文献关于深度学习的物体检测的算法,基本上都是继承了这个思想,这篇文章解释了物体检测和图片分类的区别:图片分类不需要定位,而物体检测需要定位出物体的位置,也就是相当于把物体的bbox检测出来,还有一点物体检测是要把所有图片中的物体都识别定位出来paper采用的方法是:首先输入一张图片,我们先定位出2000个物体候选框,对于每一个region proposal 都wrap到固定的大小的scale,227*227(AlexNet Input),然后采用CNN提取每个候选框中图片的特征向量,特征向量的维度为4096维,对于每一个类别,我们都会得到很多的feature vector,然后把这些特征向量直接放到svm现行分类器去判断,当前region所对应的实物是background还是所对应的物体类别,每个region 都会给出所对应的score,接着采用svm算法对各个候选框中的物体进行分类识别。
也就是总个过程分为三个程序:a、找出候选框;b、利用CNN提取特征向量;c、利用SVM进行特征向量分类,d、用bounding box regression来提高定位精度具体的流程如下图片所示:优点:相比于传统的DPM通过滑窗方式提取传统特征(HOG)的方法,R-CNN将region proposal 与通过CNN来提取特征结合起来缺点:每个region proposal都要通过CNN提取特征,工作很重复且很麻烦,CNN和SVM结合度不是很好(个人感觉)SPPnet R-CNN提取特征比较耗时,需要对每个warp的区域进行学习,而SPPNet只对图像进行一次卷积,之后使用SPPNet在特征图上提取特征 SPP层的结构如下,将紧跟最后一个卷积层的池化层使用SPP代替,输出向量大小为kM,k=#filters,M=#bins,作为全连接层的输入至此,网络不仅可对任意长宽比的图像进行处理,而且可对任意尺度的图像进行处理尺度在深层网络学习中也很重要 当我们有很多层网络的时候,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的奥义(多尺度特征提取出固定大小的特征向量) 优点:输入图片可以是任意大小,只对图像进行一次卷积,之后使用SPPNet在特征图上提取特征,比R-CNN更快。
缺点:还是沿用R-CNN用SVM做分类的方法Fast R-CNN为何有了R-CNN和SPP-Net之后还要提出Fast RCNN(简称FRCN)?因为前者有三个缺点1.训练的时候,pipeline是隔离的,先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regressionFRCN实现了end-to-end的joint training(提proposal阶段除外)2.训练时间和空间开销大RCNN中ROI-centric的运算开销大,所以FRCN用了image-centric的训练方式来通过卷积的share特性来降低运算开销;RCNN提取特征给SVM训练时候需要中间要大量的磁盘空间存放特征,FRCN去掉了SVM这一步,所有的特征都暂存在显存中,就不需要额外的磁盘空间了3.测试时间开销大依然是因为ROI-centric的原因,这点SPP-Net已经改进,然后FRCN进一步通过single scale testing和SVD分解全连接来提速整体框架如果以AlexNet(5个卷积和3个全连接)为例,大致的训练过程可以理解为:1.selective search在一张图片中得到约2k个object proposal(这里称为RoI)2.缩放图片的scale得到图片金字塔,FP得到conv5的特征金字塔。
3.对于每个scale的每个ROI,求取映射关系,在conv5中crop出对应的patch并用一个单层的SPP layer(这里称为Rol pooling layer)来统一到一样的尺度(对于AlexNet是6x6)4.继续经过两个全连接得到特征,这特征有分别share到两个新的全连接,连接上两个优化目标第一个优化目标是分类,使用softmax,第二个优化目标是bbox regression,使用了一个smooth的L1-loss.除了1,上面的2-4是joint training的 整体框架大致如上述所示了,对比回来SPP-Net,可以看出FRCN大致就是一个joint training版本的SPP-Net,改进如下:SPP-Net在实现上无法同时tuning在SPP layer两边的卷积层和全连接层SPP-Net后面的需要将第二层FC的特征放到硬盘上训练SVM,之后再额外训练bbox regressor优点:实现了end to end的训练和微调,舍弃了SVM,直接使用神经网络做分类,需要优化的是softmax loss和bbox regression缺点:需要SS得到批量region proposal ,费时Faster R-CNN 技术上将RPN网络和Fast R-CNN网络结合到了一起,将RPN获取到的proposal直接连到ROI pooling层,是一个CNN网络实现端到端目标检测的框架。
RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口RPN网络结构图如上所示(ZF模型:256维),假设给定600*1000的输入图像,经过卷积操作得到最后一层的卷积feature map(大小约为40*60),最后一层卷积层共有256个feature map 在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获得一个256维的特征向量因为这个3*3的区域上,每一个特征图上得到一个1维向量,256个特性图即可得到256维特征向量 3*3滑窗中心点位置,对应预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的regionproposal,这种映射的机制称为anchor,产生了k=9个anchor即每个3*3区域可以产生9个region proposal所以对于这个40*60的feature map,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal 后边接入到两个全连接层,即cls layer和reg layer分别用于分类和边框回归。
Cls layer包含2个元素,用于判别目标和非目标的估计概率reglayer包含4个坐标元素(x,y,w,h),用于确定目标位置 最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测优点:首次将整张图片作为输入,通过CNN来产生region proposal,几乎是cost-free,且RPN网络与CNN网络共享特征YOLO1. YOLO的核心思想YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别faster RCNN中也直接用整张图作为输入,但是faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了2.YOLO的实现方法将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object 每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的: 其中如果有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 整个网络结构如下图所示: 在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处理,就得到最终的检测结果优点:系统简单,很好训练,测试时间很短缺点:当被检测目标集中在某个区域是效果很差,因为每个格子只能对应预测一个bounding box和类别概率,因此无法预测邻近区域的物体检测精度下降了SSD本文的主要贡献总结如下:1.提出了新的物体检测方法:SSD,比原先最快的 方法,还要快,还要精确保证速度的同时,其结果的 mAP 可与使用 region proposals 技术的方法(如 Faster R-CNN)相媲美2.SSD 方法的核心就是 predict object(物体),以及其 归属类别的 score(得分);同时,在 feature map 上使用小的卷积核,去 predict 一系列 bounding boxes 的 box offsets3.本文中为了得到高精度的检测结果,在不同层次的 feature maps 上去 predict object、box offsets,同时,还得到不同 aspect ratio 的 predictions。
本文的这些改进设计,能够在当输入分辨率较低的图像时,保证检测的精度同时,这个整体 end-to-end 的设计,训练也变得简单在检测速度、检测精度之间取得较好的 trade-off4.本文提出的模型(model)在不同的数据集上,如 PASCAL VOC、MS COCO、ILSVRC, 都进行了测试在检测时间(timing)、检测精度(accuracy)上,均与目前物体检测领域 state-of-art 的检测方法进行了比较feature map cell 就是将 feature map 切分成 8×8 或者 4×4 之后的一个个 格子;而 default box 就是每一个格子上,一系列固定大小的 box,即图中虚线所形成的一系列 boxesModel SSD 是基于一个前向传播 CNN 网络,产生一系列 固定大小(fixed-size) 的 bounding boxes,以及每一个 box 中包含物体实例的可能性,即 score之后,进行一个 非极大值抑制(Non-maximum suppression) 得到最终的 predictionsSSD 模型的最开始部分,本文称作 base network,是用于图像分类的标准架构。
在 base network 之后,本文添加了额外辅助的网络结构:Multi-scale feature maps for detection在基础网络结构后,添加了额外的卷积层,这些卷积层的大小是逐层递减的,可以在多尺度下进行 predictionsConvolutional predictors for detection每一个添加的特征层(或者在基础网络结构中的特征层),可以使用一系列 convolutional filters,去产生一系列固定大小的 predictions对于一个大小为m×n,具有 p 通道的特征层,使用的 convolutional filters 就是3×3×p的 kernels产生的 predictions,那么就是归属类别的一个得分,要么就是相对于 default box coordinate 的 shape offsets在每一个m×n的特征图位置上,使用上面的3×3的 kernel,会产生一个输出值bounding box offset 值是输出的 default box 与此时 feature map location 之间的相对距离(YOLO 架构则是用一个全连接层来代替这里的卷积层)。
Default boxes and aspect ratios每一个 box 相对于与其对应的 feature map cell 的位置是固定的 在每一个 feature map cell 中,我们要 predict得到的 box 与 default box 之间的 offsets,以及每一个 box 中包含物体的 score(每一个类别概率都要计算出) 因此,对于一个位置上的 k 个boxes 中的每一个 box,我们需要计算出 c个类,每一个类的 score,还有这个 box 相对于 它的默认 box 的 4 个偏移值(offsets)于是,在 feature map 中的每一个 feature map cell 上,就需要有 (c+4)×k 个 filters对于一张m×n 大小的 feature map,即会产生(c+4)×k×m×n个输出结果这里的 default box 很类似于 Faster R-CNN 中的 Anchor boxes,关于这里的 Anchor boxes,详细的参见原论文但是又不同于 Faster R-CNN 中的,本文中的 Anchor boxes 用在了不同分辨率的 feature maps 上。
R-FCN这个是大概看了下效仿 R-CNN,采用流行的物体检测策略,包括region proposal和region classfication两步基于区域的系统在不同 benchmarks 上依然精度领先用更快 R-CNN 中的RPN网络提取region proposal,该 RPN 为全卷积网络效仿更快 R-CNN,共享 RPN 和 R-FCN 的特征RPN 给出感兴趣区域,R-FCN 对该感兴趣区域分类R-FCN 在与 RPN 共享的卷积层后多加1个卷积层所以,R-FCN 与 RPN 一样,输入为整幅图像但 R-FCN 最后1个卷积层的输出从整幅图像的卷积响应图像中分割出感兴趣区域的卷积响应图像R-FCN 最后1个卷积层在整幅图像上为每类生成k2个位置敏感分数图,有C类物体外加1个背景,因此有k2*(C+1)个通道的输出层k2个分数图对应描述位置的空间网格R-FCN 最后用位置敏感 RoI 池化层,给每个 RoI 一个分数下面的工式计算的是第C类别的第(i , j)个小方块的池化响应选择性池化图解:看上图的橙色响应图像 (top−left),抠出橙色方块 RoI,池化橙色方块 RoI 得到橙色小方块 (分数);其它颜色的响应图像同理。
对所有颜色的小方块投票 (或池化) 得到1类的响应结果优点:这个方法的目前的mAP相对很高,保证了检测速度和检测精度的平衡缺点:网络基于Resnet101,训练起来太庞大!!!(层数吓我一跳)。