zoukankan      html  css  js  c++  java
  • CNN卷积神经网络 基础理论知识

    卷积

    说到卷积,就不得不提互相关(cross-orrelation)。卷积实质就是一种互相关运算,只不过要在进行互相关运算前,要把(kernal)上下左右进行翻转。即(cross-correlation)的计算顺序是从左到右,从上到下,而(convolution)的顺序是从右到左,从下到上。
    卷积在数字图像处理中最重要的作用是进行特征提取。对原始图像,设计相应的核,进行卷积运算,得到特征图。

    卷积神经网络

    卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络。
    在进一步介绍CNN之前,介绍两个概念。

    特征图

    在CNN中,二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。

    感受野

    影响元素(x)的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做(x)的感受野(receptive field)。
    我们可以通过卷积神经网络的深度使特征图中单个元素的感受野变得更加广阔,从而捕捉输入上更大尺寸的特征。

    CNN特点

    局部卷积

    假如采用全连接网络进行图像分类,那么涉及到的运算量大,效率十分低。
    而卷积网络的特点就是局部感知。特征图只需要和原始输入图像中的局部像素连接即可。
    为什么可以使用局部感知呢?因为在图像中有一个很重要的point:在一个小范围内,图像的特征分布变化是很小的。即局部像素,距离越近,联系也就越密切,距离较远的像素,相关性较低。
    因此,每一个神经元只需要对局部的像素进行感知,再在更高层对局部信息进行综合,就可以得到全局的信息。
    对于局部感知这个特点,可以联系数字图像处理中学习的Filter。可以把卷积想象成作用于矩阵的一个滑动窗口函数。对于给定的输入图像,输出的特征图中的每个像素实际上是输入图像中局部区域中像素的加权平均。其权值由卷积核定义。

    参数共享

    每个神经元都对应着卷积核大小(长*宽)个参数,那么这些参数是共享的,其被看成是卷积提取特征的方式,该方式与位置无关。

    多卷积核

    为了充分提取特征,CNN中可以使用多个卷积核,这些卷积核的尺寸、参数可以不同。
    每个卷积核都会对输入图像进行卷积处理,生成一幅图像。不同卷积核生成的不同图像可以理解为是该输入图像的不同通道。
    当输入数据含多个通道时,我们需要构造一个输入通道数与输入数据的通道数相同的卷积核,从而能够与含多通道的输入数据做互相关运算。假设输入数据的通道数为(c_i) ,那么卷积核的输入通道数同样为(c_i)。设卷积核窗口形状为(k_h imes k_w) 。当(c_i=1)时,我们知道卷积核只包含一个形状为(k_h imes k_w)的二维数组。当(c_i>1)时,我们将会为每个输入通道各分配一个形状为(k_h imes k_w)的核数组。把这(c_i)个数组在输入通道维上连结,即得到一个形状为 (c_i imes k_h imes k_w)的卷积核。由于输入和卷积核各有(c_i)个通道,我们可以在各个通道上对输入的二维数组和卷积核的二维核数组做互相关运算,再将这 (c_i)个互相关运算的二维输出按通道相加,得到一个二维数组。这就是含多个通道的输入数据与多输入通道的卷积核做二维互相关运算的输出。
    如下图,是含两个输入通道的互相关计算:

    池化处理

    通过卷积层输出的特征图直接来进行训练(如使用softmax分类器),那么计算量会很大。因而在卷积层之后,一般会进行池化处理。
    如果我们构造的卷积核输出(Y[i, j]=1),那么说明输入中(X[i, j])(X[i, j+1])数值不一样。这可能意味着物体边缘通过这两个元素之间。但实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个边缘对应的输出可能出现在卷积输出(Y)中的不同位置,进而对后面的模式识别造成不便。
    池化处理的提出可以缓解卷积层对位置的过度敏感性。
    池化的优点:

    • 降维
    • 克服过拟合
    • 在图像识别领域,池化还能提供平移和旋转不变性

    池化处理:也叫作降采样处理(down-pooling),是对不同位置的特征进行聚合统计。相应的层就叫做池化层或者降采样层。
    同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。在二维最大池化中,池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的最大值即输出数组中相应位置的元素。
    如下图,是池化窗口形状为(2 imes2)的最大池化:

    最大池化:提取图片的纹理
    平均池化:保留图片的背景特征

    多通道

    池化层和卷积层一样,都可以手动指定填充和步幅。
    在处理多通道输入数据时,池化层对输入通道分别进行池化,而不是像卷积层那样将各通道的输入按通道相加。这意味着池化层的输出通道数与输入通道数相等。

    多层处理

    一般而言,在图像处理中,一层卷积及降采样往往只学到了局部的特征。层数越多,学到的特征越全局化。因此通过多层处理,低级的特征组合形成更高级的特征表示。

  • 相关阅读:
    C++ Call C# COM
    C ++ / CLI 语法
    C#调用C++ DLL动态库的两种方式
    Linux下的JMeter部署及使用
    同时处理多请求(带超时时间)
    同时处理多请求
    curl命令
    mysql命令
    SpringBoot配置文件敏感信息加密-jasypt
    spring boot升级到2.x的坑
  • 原文地址:https://www.cnblogs.com/CuteyThyme/p/12732374.html
Copyright © 2011-2022 走看看