zoukankan      html  css  js  c++  java
  • 卷积神经网络CNN-学习1

    卷积神经网络CNN-学习1

     

          十年磨一剑,霜刃未曾试。

     

    简介:卷积神经网络CNN学习。

    CNN中文视频学习链接:卷积神经网络工作原理视频-中文版

    CNN英语原文学习链接:卷积神经网络工作原理视频-英文版

    一、定义

         卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。其创始人Yann LeCun是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。

    二、CNN灵感来源?

         人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。
    人脑进行人脸识别示例

    对于不同的物体,人类视觉也是通过这样逐层分级,来进行如下认知的。

     人类视觉识别示例

          在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。于是便模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类。

    三、卷积神经网络解决了什么?

    概括来说就是保留图像特征,参数降维,复杂参数简单化。

    图像像素RGB

    众所周知,图像是由像素构成的,每个像素又是由颜色构成的。现在随随便便一张图片都是 1000×1000 像素以上的, 每个像素都有RGB 3个参数来表示颜色信息。

    假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数!1000×1000×3=3,000,000

    这么大量的数据处理起来是非常消耗资源的,卷积神经网络 – CNN 解决的第一个问题就是「将复杂问题简化」,把大量参数降维成少量参数,再做处理。

    更重要的是:我们在大部分场景下,降维并不会影响结果。比如1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。

    图片数字化的传统方式

          图像简单数字化无法保留图像特征,如上图假如有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但是从视觉的角度来看,图像的内容(本质)并没有发生变化,只是位置发生了变化。所以当我们移动图像中的物体,用传统的方式的得出来的参数会差异很大!这是不符合图像处理的要求的。而 CNN 解决了这个问题,他用类似视觉的方式【模仿人类大脑视觉原理,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类】保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。

    四、卷积神经网络的架构

     典型的 CNN 由卷积层、池化层、全连接层3个部分构成:

    典型CNN组成部分

    更为完善的也有分为如下五个层级结构:
    1、数据输入层:Input layer
    2、卷积计算层:CONV layer
    3、ReLU激励层:ReLU layer
    4、池化层:Pooling layer
    5、全连接层:FC layer

    五、数据输入层

    数据输入层主要是对原始图形数据进行数据预处理,包括去均值、归一化、PCA/白化。
    去均值:
    把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
    归一化:
    幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
    PCA/白化:
    用PCA降维度,白化是对数据各个特征轴上的幅度归一化。
    去均值&归一化效果图

     去相关与白化效果图

    六、卷积计算层

    卷积层有两个重要的操作,一个是局部关联,每个神经元看做一个滤波器filter;另一个是窗口滑动,filter对局部数据计算。

    卷积层的运算过程如下图,用一个卷积核扫完整张图片:

    卷积层动态运算图

    卷积层的运算过程,可以当做使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值,即卷积层通过卷积核的过滤提取出图片中局部的特征。

    卷积层运算图

     

    卷积层计算过程动图

     七、激励层

    激励层是把卷积层输出结果做非线性映射。CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元)。


    八、池化层

    池化层在连续的卷积层中间,其用于压缩数据和参数的量,减少过拟合。最重要的作用就是保持特性不变,压缩图像,降低数据维度。


          池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。Max pooling思想:对于每个2 * 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 * 2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推,保持特征不变地降低维度。

    Max pooling图


    动态池化图

    我们可以看到动态池化图中,原始图片20×20的,我们对其进行下采样,采样窗口10×10,最终将其下采样成为一个2×2大小的特征图

    九、全连接层

    全连接层在卷积神经网络尾部,该层负责输出结果,是最后一步。其跟传统的神经网络神经元的连接方式一样。
    全连接层连接方式

     

    十、CNN实际应用场景

    图像分类/检索、目标定位检测、目标分割、人脸识别、骨骼识别等。

    CNN人脸识别

    Finally

    CNN中文视频学习链接:卷积神经网络工作原理视频-中文版

    CNN英语原文学习链接:卷积神经网络工作原理视频-英文版

     

    十年磨一剑

        霜刃未曾试

     

  • 相关阅读:
    洛谷.4717.[模板]快速沃尔什变换(FWT)
    BZOJ.4589.Hard Nim(FWT)
    BZOJ.1758.[WC2010]重建计划(分数规划 点分治 单调队列/长链剖分 线段树)
    BZOJ.4543.[POI2014]Hotel加强版(长链剖分 树形DP)
    Vijos.lxhgww的奇思妙想(k级祖先 长链剖分)
    Codeforces.741D.Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree 思路)
    Codeforces.600E.Lomsat gelral(dsu on tree)
    11.7 NOIP模拟赛
    11.5 正睿停课训练 Day16
    Maven与Nexus3.x环境构建详解
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/14193522.html
Copyright © 2011-2022 走看看