CNN-- convolutional neural network (CIFAR10 classification code) from the R-CNN to be understood that R-CNN's Faster

1. What is CNN

Convolutional neural network (Convolutional Neural Networks, CNN) is a class that contains convolution calculation possessed deep structure of feed-forward neural network (Feedforward Neural Networks), is the depth of learning one of the representatives algorithm (deep learning) is.

Let's look at each convolution neural network hierarchy diagram:

CNN thing to do is figure above: Given a picture, car or horse is unknown, is also unknown what kind of car, now need to determine the model in this picture is a concrete something, in short, the output of a result: If the car is What is that car.

  • The far left is the data input layer (input layer), do some processing on the data, such as to mean (to input data into the center of each dimension are zero, to avoid excessive deviation data, affect the training effect), normalized (all the a property of the data to the same range), PCA / whitening and the like. CNN only do "to mean" This step is the training set.
  • CONV: convolution calculation layer (conv layer), a linear summing the products.
  • RELU: excitation layer (activation layer), mentioned hereinafter: ReLU is an activation function.
  • POOL: Pool layer (pooling layer), in short, i.e. average or maximum extraction region.
  • FC: fully connected layer (FC layer).

In these parts, the core layer is a convolution computation of CNN.

1.1 input layer

In doing input, the picture needs to deal with the same size of the picture to be able to be processed.

Common way of handling data are:

  1. To mean ( common )

    • AlexNet : one million images in the training set, averaging for each pixel to obtain a mean image, when training minus the mean image with the original.
    • VGG : taking the input on all three color channels R / G / B average, only three values obtained by subtracting the mean of the corresponding color channel when training. ( High efficiency of this method )

    TIPS: minus the mean of the training set in the training and test sets.

  2. Normalized

    Amplitude normalized to the same range.

  3. PCA / Albino ( rarely used )

    • With PCA dimension reduction
    • Albino amplitude data for each feature is normalized shaft.

1.2 convolution calculation layer (CONV)

Image (different data window data) and the filter matrix (a set of fixed weights weight: Because the weight of each neuron of a plurality of fixed weight, so they can be seen as a filter constant filter) to make the inner product (element-wise multiplication and then sum) operation is called "convolution" operation, but also the name of the source convolution neural network.

What filter filter is it! See below. FIG part of the left original input data, the intermediate portion is a filter in FIG filter, the right figure is a new two-dimensional data output.

image

Different filters filter the output data will be different, such as color depth, contour. Extracting an image corresponding to the different features, you can learn to model various features. Filters with different filter, to extract specific information about the desired image: color depth or profile. As shown below.

In the CNN, the filter filter (with a fixed set of heavy weights neurons) local input data subjected to convolutional calculation. Remove each local data within a data window is calculated, translating continuously sliding data window, until all the data is calculated. This process, there are so few parameters:

  • Depth depth: neuron number, depth determines the thickness of the output. Simultaneously represent the number of filters.
  • Step stride: decide how many steps you can slide to the edge.
  • Padding value zero-padding: the peripheral edge supplemented several turns 0, from an initial position to facilitate the steps of units can be just slipped end position, simply is the total length to be divisible step.

  • Parameter sharing mechanism

    假设每个神经元连接数据窗的权重是固定对的。固定每个神经元连接权重,可以看做模板,每个神经元只关注一个特性(模板),这使得需要估算的权重个数减少:一层中从1亿到3.5万。

  • 一组固定的权重和不同窗口内数据做内积:卷积

  • 作用在于捕捉某一种模式,具体表现为很大的值。

卷积操作的本质特性包括稀疏交互和参数共享

1.3 激励层

把卷积层输出结果做非线性映射。

激活函数有:

UTOOLS1556084241657.png

  • sigmoid:在两端斜率接近于0,梯度消失。
  • ReLu:修正线性单元,有可能出现斜率为0,但概率很小,因为mini-batch是一批样本损失求导之和。

TIPS:

  • CNN慎用sigmoid!慎用sigmoid!慎用sigmoid!
  • 首先试RELU,因为快,但要小心点。
  • 如果RELU失效,请用 Leaky ReLU或者Maxout。
  • 某些情况下tanh倒是有不错的结果,但是很少。

1.4 池化层

也叫下采样层,就算通过了卷积层,纬度还是很高 ,需要进行池化层操作。

  • 夹在连续的卷积层中间。
  • 压缩数据和参数的量,降低维度。
  • 减小过拟合。
  • 具有特征不变性。

方式有:Max pooling、average pooling

image

Max pooling

取出每个部分的最大值作为输出,例如上图左上角的4个黄色方块取最大值为3作为输出,以此类推。

average pooling

每个部分进行计算得到平均值作为输出,例如上图左上角的4个黄色方块取得平均值2作为输出,以此类推。

1.5 全连接层

全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全连接的特性,一般全连接层的参数也是最多的。

  • 两层之间所有神经元都有权重连接
  • 通常全连接层在卷积神经网络尾部

1.6 层次结构小结

CNN层次结构 作用
输入层 卷积网络的原始输入,可以是原始或预处理后的像素矩阵
卷积层 参数共享、局部连接,利用平移不变性从全局特征图提取局部特征
激活层 将卷积层的输出结果进行非线性映射
池化层 进一步筛选特征,可以有效减少后续网络层次所需的参数量
全连接层 用于把该层之前提取到的特征综合起来。

1.7 CNN优缺点

优点:

  • 共享卷积核,优化计算量。
  • 无需手动选取特征,训练好权重,即得特征。
  • 深层次的网络抽取图像信息丰富,表达效果好。
  • 保持了层级网络结构。
  • 不同层次有不同形式与功能。

缺点:

  • 需要调参,需要大样本量,GPU等硬件依赖。
  • 物理含义不明确。

与NLP/Speech共性:

都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。

2. 典型CNN发展历程

  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如objectdetection)上效果很好
  • ResNet(深度残差网络(Deep Residual Network,ResNet)), 2015ILSVRC比赛冠军,结构修正(残差学习)以适应深层次CNN训练。
  • DenseNet, CVPR2017 best paper,把ResNet的add变成concat

3. 图像相关任务

image

3.1 图像识别与定位

  1. classification:C个类别识别

    • input:Image
    • Output:类别标签
    • Evaluation metric:准确率
  2. Localization定位)

    • Input:Image

    • Output:物体边界框(x,y,w,h)

    • Evaluation metric:交并准则(IOU) > 0.5 图中阴影部分所占面积

      image

3.1.1 思路1:识别+定位过程

  1. 识别可以看作多分类问题(用softmax),用别人训练好的CNN模型做fine-tune

  2. 定位的目标是(x,y,w,h)是连续值,当回归问题解决(mse)

    1的CNN尾部展开(例如把最后一层拿开),接上一个(x,y,w,h)的神经网络,成为classification+regression的模型

    更细致的识别可以提前规定好有k个组成部分,做成k个部分的回归,

    例如:框出两只眼睛和两条腿,4元祖*4=16(个连续值)

  3. Regression部分用欧氏距离损失,使用SGD训练。

image

3.1.2 思路2:图窗+识别

  • 类似刚才的classification+regression思路
  • 咱们取不同大小的“框”
  • 让框出现在不同的位置
  • 判定得分
  • 按照得分的高低对“结果框”做抽样和合并

3.2 物体检测(object detection)

3.2.1 过程

当图像有很多物体怎么办的?难度可是一下暴增啊。

那任务就变成了:多物体识别+定位多个物体,那把这个任务看做分类问题?

image

看成分类问题有何不妥?

  • 你需要找很多位置, 给很多个不同大小的框
  • 你还需要对框内的图像分类
  • 当然, 如果你的GPU很强大, 恩, 那加油做吧…

边缘策略:想办法先找到可能包含内容的图框(候选框),然后进行分类问题的识别。

方法:根据RGB值做区域融合。fast-CNN,共享图窗,从而加速候选框的形成。

  • R-CNN => fast-CNN => faster-RCNN 速度对比

    image

3.2.2 R-CNN

R-CNN的简要步骤如下:

  1. 输入测试图像。
  2. 利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal。
  3. 因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。
  4. 将每个Region Proposal提取到的CNN特征输入到SVM进行分类。

3.2.3 SPP-Net

SPP:Spatial Pyramid Pooling(空间金字塔池化),SPP-Net是出自2015年发表在IEEE上的论文。

众所周知,CNN一般都含有卷积部分和全连接部分,其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。所以当全连接层面对各种尺寸的输入数据时,就需要对输入数据进行crop(crop就是从一个大图扣出网络输入大小的patch,比如227×227),或warp(把一个边界框bounding box(红框)的内容resize成227×227)等一系列操作以统一图片的尺寸大小,比如224224(ImageNet)、3232(LenNet)、96*96等。

所以才如你在上文中看到的,在R-CNN中,“因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN”。

但warp/crop这种预处理,导致的问题要么被拉伸变形、要么物体不全,限制了识别精确度。没太明白?说句人话就是,一张16:9比例的图片你硬是要Resize成1:1的图片,你说图片失真不?

SPP Net的作者Kaiming He等人逆向思考,既然由于全连接FC层的存在,普通的CNN需要通过固定输入图片的大小来使得全连接层的输入固定。那借鉴卷积层可以适应任何尺寸,为何不能在卷积层的最后加入某种结构,使得后面全连接层得到的输入变成固定的呢?

这个“化腐朽为神奇”的结构就是spatial pyramid pooling layer。

它的特点有两个:

  1. 结合空间金字塔方法实现CNNs的多尺度输入。

    SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。

    换句话说,在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

    简言之,CNN原本只能固定输入、固定输出,CNN加上SSP之后,便能任意输入、固定输出。神奇吧?

  2. 只对原图提取一次卷积特征

    在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。

    而SPP Net根据这个缺点做了优化:只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。

如此这般,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次卷积,从而节省了大量的计算时间,比R-CNN有一百倍左右的提速。

3.2.4 Fast R-CNN

SPP Net真是个好方法,R-CNN的进阶版Fast R-CNN就是在R-CNN的基础上采纳了SPP Net方法,对R-CNN作了改进,使得性能进一步提高。

R-CNN有一些相当大的缺点(把这些缺点都改掉了,就成了Fast R-CNN)。

大缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。

解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征。

原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归

现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归

所以容易看见,Fast R-CNN相对于R-CNN的提速原因就在于:不过不像R-CNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。

算法步骤:

  1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)。
  2. 对整张图片输进CNN,得到feature map。
  3. 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。
  4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类。
  5. 对于属于某一类别的候选框,用回归器进一步调整其位置。

3.2.5 Faster R-CNN

Fast R-CNN存在的问题:存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?

解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。

所以,rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变化问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)。这就是Faster R-CNN。

算法步骤:

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

3.2.6 YOLO

Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。

我们直接看上面YOLO的目标检测的流程图:

  1. 给个一个输入图像,首先将图像划分成7*7的网格。
  2. 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)。
  3. 根据上一步可以预测出772个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。

小结:YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。

但是YOLO也存在问题:没有了Region Proposal机制,只使用7*7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。

3.2.7 SSD

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)大小是8*8,那么就使用3*3的滑窗提取每个位置的特征,然后这个特征回归得到目标的坐标信息和类别信息(图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帧每秒。

3.3 语义(图像)分割

识别图上pixel的类别,用全卷积网络。

image

4. 代码实现CNN

cifar10数据集分类--CNN

机器学习通俗易懂系列文章

3.png

5. 参考文献

  1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
  2. 通俗理解卷积神经网络

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

Welcome to join the discussion! Improve joint project! Group number: [541,954,936]NLP interview learning group

Guess you like

Origin www.cnblogs.com/mantch/p/11335001.html