RCNN

Scene understanding

  1. Image classification
  2. Object detection
  3. Semantic segmentation
  4. Instance segmentation
1. Image classification

goals: the task of object classification requires binary labels indication whether objects are present in an image.(对目标是否出如今图片给出判别,yes or no)python

2. object detection

goals:detecting an object entails both stating that an object belonging to a specified class is present, and localizing it in the image.The location of an object is typically represented by a bounding box.(对目标属于什么类别进行判断,进行目标的定位)算法

3. Semantic scene labeling

goals:the task of labeling semantic objects in a scene requires that each pixel of an image be labeled as belonging to a category, such as sky, chair, steet,etc. In contrast to the detection task, individual instances of objects do not need to be segmented.(要求对图片的像素进行分类,是属于天空、街道等等,须要进行目标检测任务,可是不须要进行分割任务)网络

4. Instance segment

实例分割是物体检测+语义分割的综合体。相对物体检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割能够标注出图上同一物体的不一样个体(羊1,羊2,羊3...)架构

经典目标检测算法

  1. RCNN
  2. Fast RCNN
  3. Faster RCNN
  4. Mask RCNN

1. RCNN

R-CNN: Region Proposal + CNN + Category-specific Linears SVMsapp

RCNN算法分为4个步骤less

  • 一张图生成1k~2K个候选区域
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM分类器,判断属于的类别
  • 使用回归器精细修正候选框的位置

wraped region:包裹的区域dom

RCNN思想:输入一张图片。提取区域,建议大约2k个区域。而后依次将这些区域送入CNN,进行区域目标区域的分类,和区域框bbox的线性回归。bbox(就是每一个区域region矩形框的位置)ide

论文概要与背景知识整理

backgound

在当时,用 CNN 作 Object Detection 与 Single-label Image Classification 之间的 Gap,或者说这个问题 challenging 的地方一共有两处:性能

  1. 一个就是以前没有过用 CNN 作 Object Detection 的工做。不一样于 Image Classification,Object Detection 要求 localizing objects within an image. 这个 Location 信息要怎么给出?在当时流行的 CNN架构AlexNet ,只被用来作图像分类任务。
  2. 另一个就是,labeled data for detection is scarce. AlexNet 在 Single-label Image Classification 上取得成功,是由于 ImageNet 正好有上千万幅标注好的分类图像,可是对于 Object Detection,当时最大的 VOC dataset 可不足以支撑训练其那么多的神经网络参数。

abstract 摘要

论文成果,在PASCAL VOC数据集上,mAP达到53.3%,相比VOC 2012的结果增长30%。主要有两个关键思想:一是能够将高性能的CNN网络应用于自底而上(从背景到前景)的region proposals,以便进行目标检测和定位;二是当有标签的数据不多时,用监督预训练(supervised pre—training)做为一个辅助任务,而后对特别区域进行微调,能够显著提升模型表现力。学习

introduction

bbox(bounding box)的定位location 是一个回归问题。

能够选择滑动窗口 to localizing objects within an image.为了保持图像高分辨率,CNN通常只有两层convolution and pooling layers. 在本文中,尝试使用sliding-window approach, 可是随着网络的加深,(5个convolution layers),会有很大的receptive fields(感觉野 195 * 195 pixels),strides(32 * 32) in the image。这使得滑动窗口的精肯定位变得很困难。

本文为了解决CNN网络的定位问题,采用了“recognition using regions”方法。we use a simple technique(affine image warping) to compute a fixed-size CNN input from each region proposal, regardless of the region's shape.

本文的第二个问题:有标签的数据不多,不足以支持CNN的训练。传统方法是使用无监督的预训练,而后接下来的使用无监督的微调(fine-tuning)。

本文的第二个贡献:在一个大的数据集上进行supervised pre-training, followed by domian special fine-tuning on a small dataset, is an effective paradigm(一个领域主流的理念、方法、行事套路) for learning high-capacity CNNs when data is scarce.

Object detection with R-CNN

目标检测主要有三个模块组成。
第一个生成单一类的目标区域。第二是对于each region,CNN网络提取固定长度(fixed-length)特征向量.第三个是线性分类器SVM.

2.1 模块设计

test-time detection

在测试图片上,提取大约2000 region proposals。wraps each proposal and forward propagate it through the CNN。对于每一类,咱们使用SVM进行训练,

all parameters are shared across all categories.在分类中,全部的CNN参数是共享的。也就是说分类任务使用的是同一个CNN网络。

2.2 Model

R-CNN = Region Proposal + CNN + Category-specific Linear SVMs + Non-Maximum Suppression + Bounding Box Regression

  1. The first generates category-independent region proposals.
  2. The second module is a large convolutional neural network that extracts a fixed-length feature vector from each region.
  3. The third module is a set of class-specific linear SVMs.

Module 1:Region Proposal

Region Proposal 用 Selective Search 实现,选这个文章里到没有说是有什么优势采选 SS,而是为了跟其余已有的方法对比,他们用了 SS。因此彻底能够用其余 Region Proposal 方法,好比 BING 之类的。

目前我能理解的 detection 的思路其实就是 region classification,肯定了哪些 region 里面有什么类的 object 也就完成了 detection,至于怎么产生这些 region,能够用 sliding-window,也能够用 region proposal,其实我以为 sliding-window 就是一种特别简化的 region proposal 嘛。

Module 2:Feature Extraction

CNN 就是用来抽取特征的,输出是 softmax,但这个只是在训练 CNN fine-tunning 的阶段用,最分类仍是用的 SVM.

CNN 对输入的要求是必须都是固定大小的,可是 Region Proposal method 产生的 region 每一个都各不相同,怎么把这不规则的 region 输入须要固定大小输入的 CNN,这是怎么解决的呢?Regardless of the size or aspect ratio of the candidate region, we warp all pixels in a tight bounding box around it to the required size.

Module 3: Classification

SVM 用来分类。

Module 4: Non-Maximum Suppression

Given all scored regions in an image, we apply a greedy non-maximum suppression (for each class independently) that rejects a region if it has an intersection-over-union (IoU) overlap with a higher scoring selected region larger than a learned threshold.

去除重复的 Proposal,因此 R-CNN 这里是有大量的冗余计算的,先产生大量的 Proposal,而后最后再剔除掉绝大部分,若是一开始就能够产生少许高质量的 Proposal 就行了,这就是后面改进工做(Faster R-CNN)的 Motivation 了。

Module 5:Bounding Box Regression

Inspired by the bounding box regression employed in DPM [15], we train a linear regression model to predict a new detection window given the pool 5 features for a selective search region proposal.

Conclusion

We achieved this performance through two insights. The first is to apply highh-capacity convolutional neural networks to bottom-up region proposals in order to localize and segment objects.The second is a paredigm for training large CNNs when labeled training data is scarce. We show that it is highly effective to pre-train the network with supervision——for a auxiliary task with abundant data(image classification) and then to fine-tune the network for the target task where data is scarce(detection).

问题一:如何生成候选区域,依据什么规则?

候选区域的生成

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。Selective Search以下:

  • 使用Efficient GraphBased Image Segmentation中的方法来获得region
  • 获得全部region之间两两的类似度
  • 合并最像的两个region
  • 从新计算新合并region与其余region的类似度
  • 重复上述过程直到整张图片都聚合成一个大的region
  • 使用一种随机的计分方式给每一个region打分,按照分数进行ranking,取出top k的子集,就是selective search的结果

类似度的考虑能够结合多种策略

策略多样化(Diversification Strategies)
  • 颜色(颜色直方图)类似度
  • 纹理(梯度直方图)类似度
  • 大小类似度
  • 吻合(fit)类似度
  • 最后把上述类似度按照不一样的权重结合到一块儿

问题二:候选区域的尺寸不一,如何处理?

答:regardless of the size or aspect ratio of the candidate region, we warp(至关于python中的resize操做) all pixels in a tight bounding box around it to the required size.

问题三:使用的CNN网络模型是什么?

答:对于 pre-training: discriminatively pre-trained the CNN on a large auxiliary dataset (ILSVRC 2012) with image-level annotations,就是 pretrained AlexNet。

问题四:分类和回归任务是分开作的,仍是同时进行的?

  1. 对于 fine-tunning: Domain-specific fine-tuning on VOC
  • 这个 VOC 是 VOC Detection,并非 Classification,
  • 注意的是,这里是把 Object Region 和 Background Region 输入 CNN,并非整张图像,并且每一个 Region Proposal 都是被 resize 到 227 × 227 大小,为了符合 AlexNet 对输入的要求(由于 fully-connected layer 的要求)。因此只要把 AlexNet 最后分类的 1000 类改为 VOC 的 21 类就能够了,网络结构不用变,由于 R-CNN 背后的思想是 Object Detection by Region Proposal Classification,因此 Classification Network 能够直接拿来用。
  • 构造 Batch 的时候,mini-batch size 是 128,32 个 positive window,从每类里面均匀分布随机采样;96 个 Background window。之因此背景样本比 Object 样本多不少,由于实际状况就是这样的。
    对于 Classification: 对于每个 category,确定是要构建 positive 和 negative 两类啦
    对于彻底是 背景 or 彻底含有目标的 Proposal,很容易判断是 positive or Negative
    对于只包含部分的 Proposal,是算 IOU,阈值是 0.3,这是做者作了网格搜索验证后的结果,后面的研究彷佛也都沿用了 0.3 这个值。

    问题:在有标签数据不多时,传统方法先unsupervised pre-training, followed by domian-specific fine-tune的概念?

    答:无监督的预训练不能帮助咱们寻找到更好的初始化权重。

无监督的预训练并不能下降训练集的偏差,预先训练的模型比随机初始化的模型产生更低的测试成本。它的优势彷佛是更好的泛化,而不只仅是更好的优化过程。

无参数的预训练会带来相似于正则化的效用,是某种特殊的先验分布带来的正则化(此处甚是懵逼),这种效用会随着模型的复杂性的增大而增大。

问题:为何要用SVM,直接用softmax分类器很差吗?

suppliment里面提到,用softmax效果下降4个百分点。缘由有下:

  1. the definition of positive examples used in fine-tuning does not emphasize precise localization
  2. the softmax classifier was trained on randomly sampled negative examples rather than on the subset of “hard negatives” used for SVM training.

非极大抑制(Non-Maximum Suppression)

目标检测中,NMS被用在后期的物体边界框去除。

NMS 对检测获得的所有boxes进行局部的最大搜索,以搜索某邻域范围内的最大值,从而滤出一部分 boxes,提高最终的检测精度。

简而言之,找出score比较region,其中须要考虑不一样region的一个重叠问题。

  • 输入:检测到的Boxes(同一个物体可能被检测到不少Boxes,每一个box均有分类score)
  • 输出:最优的box
  • 过程:去除冗余的重叠 Boxes,对所有的 Boxes 进行迭代-遍历-消除.
  1. 将全部框的得分排序,选中最高分及其对应的框;
  2. 遍历其他的框,若是和当前最高分框的重叠面积(IOU)大于必定阈值,则将框删除;
  3. 从未处理的框中继续选一个得分最高的,重复上述过程.

假设从一个图像中获得了2000 region proposals,经过在CNN以后咱们会获得2000×4096的一个特征矩阵,而后经过N的SVM来判断每个region属于N的类的scores。其中,SVM的权重矩阵大小为4096×N,最后获得2000*N的一个score矩阵(其中,N为类别的数量)。

Non-Maximum Suppression就是须要根据score矩阵和region的坐标信息,从中找到置信度比较高的bounding box。首先,NMS计算出每个bounding box的面积,而后根据score进行排序,把score最大的bounding box做为队列中。接下来,计算其他bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box。而后重复上面的过程,直至候选bounding box为空。最终,检测了bounding box的过程当中有两个阈值,一个就是IoU,另外一个是在过程以后,从候选的bounding box中剔除score小于阈值的bounding box。须要注意的是:Non-Maximum Suppression一次处理一个类别,若是有N个类别,Non-Maximum Suppression就须要执行N次。

例如:

假设某物体检测到 4 个 Boxes,每一个 Box 分别对应一个类别 Score,根据 Score 从小到大排列依次为,(B1, S1), (B2, S2), (B3, S3), (B4, S4). S4 > S3 > S2 > S1.

  • Step 1. 根据Score 大小,从 Box B4 框开始;
  • Step 2. 分别计算 B1, B2, B3 与 B4 的重叠程度 IoU,判断是否大于预设定的阈值;若是大于设定阈值,则舍弃该 Box;同时标记保留的 Box. 假设 B3 与 B4 的阈值超过设定阈值,则舍弃 B3,标记 B4 为要保留的 Box;
  • Step 3. 从剩余的 Boxes 中 B1, B2 中选取 Score 最大的 B2, 而后计算 B2 与 剩余的 B1 的重叠程度 IoU;若是大于设定阈值,一样丢弃该 Box;同时标记保留的 Box.
    重复以上过程,直到找到所有的保留 Boxes.

Fine-tuning过程

经过对imageNet上训练出来的模型(如CaffeNet、VGGNet、ResNet)进行微调,而后应用到咱们本身的数据集上。由于ImageNet数以百万计带标签的数据,使得VGGnet、ResNet等预训练模型具备具备很是强大的泛化能力。一般咱们只须要对预训练模型的后几层进行微调,而后应用到咱们的数据上,就能获得很好的结果。

简而言之,经过在预训练模型上进行Fine-tuning,可使得在目标任务达到很高的performance,并且使用相对少的数据量。

经验:在层数较深的状况下,因为deep learning自己的特性,在越高层造成的特征越抽象,而前面的卷积层则是颜色和边缘这些比较泛化的特征,因此在fine-tuning时,能够将前几层conv层的learning_rate设置为0,然后几层conv层不建议置为0,不然会对performance影响太大

目前最强大的模型是ResNet,不少视觉任务经过fine-tuning ResNet能够获得很好的performance。

fine-tuning和迁移学习的区别?

举个例子,假设今天老板给你一个新的数据集,让你作一下图片分类,这个数据集是关于Flowers的。问题是,数据集中flower的类别不多,数据集中的数据也很少,你发现从零训练开始训练CNN的效果不好,很容易过拟合。怎么办呢,因而你想到了使用Transfer Learning,用别人已经训练好的Imagenet的模型来作。
作的方法有不少:

  1. 把Alexnet里卷积层最后一层输出的特征拿出来,而后直接用SVM分类。这是Transfer Learning,由于你用到了Alexnet中已经学到了的“知识”。
  2. 把Vggnet卷积层最后的输出拿出来,用贝叶斯分类器分类。思想基本同上。
  3. 甚至你能够把Alexnet、Vggnet的输出拿出来进行组合,本身设计一个分类器分类。这个过程当中你不只用了Alexnet的“知识”,也用了Vggnet的“知识”。
  4. 最后,你也能够直接使用fine-tune这种方法,在Alexnet的基础上,从新加上全链接层,再去训练网络。

综上,Transfer Learning关心的问题是:什么是“知识”以及如何更好地运用以前获得的“知识”。这能够有不少方法和手段。而fine-tune只是其中的一种手段。

image
如何判断哪些region属于同一个物体?这个问题找不到一个统计的答案。

有些图片能够经过颜色来区分物体,而有些经过纹理区分,还有一些既不是颜色相近,也是不纹理类似。

因此须要结合多种策略,才有可能找打图片中的物体。

Multiscale
image
在上面两张图片, selective search 展现了不一样scale 的必要性。在左边的图片,咱们发现目标有不一样的scales。在右边的图片,咱们必须找到不一样的scale,由于女孩包含在tv中。

因为物体之间存在层级关系,因此Selective Search用到了Multiscale的思想。从上图看出,Select Search在不一样尺度下可以找到不一样的物体。

注意,这里说的不一样尺度,不是指经过对原图片进行缩放,或者改变窗口大小的意思,而是,经过分割的方法将图片分红不少个region,而且用合并(grouping)的方法将region聚合成大的region,重复该过程直到整张图片变成一个最大的region。这个过程就可以生成multiscale的region了,并且,也符合了上面“物体之间可能具备层级关系”的假设。

Selective Search方法简介

  • 使用Efficient GraphBased Image Segmentation中的方法来获得region
  • 获得全部region之间两两的类似度
  • 合并最像的两个region
  • 从新计算新合并region与其余region的类似度
  • 重复上述过程直到整张图片都聚合成一个大的region
  • 使用一种随机的计分方式给每一个region打分,按照分数进行ranking,取出top k的子集,就是selective search的结果

ps:(efficient GraphBased Image Segmentation)留着后面再看吧,须要补的知识有点多,丧脸!

相关文章
相关标签/搜索