• 卷积神经网络(李宏毅老师系列)


    自学参考:
    一文搞懂卷积神经网络(CNN)的原理
    视频课
    课件+资料
    笔记

    一、引入

    • cnn设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。
    • 常用场景:image classification
      • 基本步骤:
        • 把所有图片都先rescale成大小一样
        • 把每一个类别,表示成一个one-hot的vector(dimension length决定了模型可以辨识出多少种类的东东)
        • 把图像输入到模型中
          直接摊开的话参数量过大。若输入的向量长度是100* 100*3,有1000个neuron,则第一层的weight就有1000 * 100 *100 * 3,即3 *107,是一个庞大的数量。
          虽说随着参数的增加,可以增加模型的弹性,增加其能力,但也增加了overfitting的风险
          ⇒考虑到影像辨识问题本身的特性,无名并非一定需要fully connected,无需每一个neuron和input的每一个dimension都有一个weight
          在这里插入图片描述

    二、神经元角度

    • 思考①:模型通过识别一些“特定模式”来识别物体,而非“整张图”
      ⇒neuron也许并不需要把整张图片当作输入,只需把图片的一小部分当作输入,就足以让它们侦测某些特别关键的pattern是否出现
      在这里插入图片描述

    • 简化①:设定感受野receptive field
      每个神经元只需要考察特定范围内的图像信息,把图像内容展平后输入到神经元即可。其中:

      • 感受野之间可重叠
      • 一个感受野可有多个神经元选择(共享权重)
      • 感受野大小可以“有大有小”(一般不做过大的kernal Size,常常设定为3*3)
      • 感受野可以只考虑某些channel
      • 感受野可以是“长方形”的
      • 感受野理论上不一定要“相连”
        在这里插入图片描述
    • 感受野的一般设置typical setting

      • 看所有的channel
        一般在做影像辨识时会看全部的channel,则描述一个感受野时无需说明其channel数,只要说明其高宽即可
        ⇒kernel size
      • 每个感受野会有不止一个神经元进行守备
        ⇒输出通道数/卷积核数
      • 不同的感受野之间的关系
        ⇒感受野的平移位移:stride(超参数)
        一般会让感受野之间有重叠,避免交界处的pattern被遗漏
      • 感受野超出影响的范围
        ⇒padding(补值)
        补0;补平均值;补边缘值
      • 垂直方向移动
        在这里插入图片描述
    • 思考②:同样的pattern可能出现在图片的不同位置
      侦测同样pattern的神经元做的工作是类似的
      ⇒共享参数
      在这里插入图片描述

    • 简化②:Parameter Sharing权值共享(不同感受野的神经元共享参数)
      守备的 Receptive Field 不一样,但是它们的参数一样(守备相同感受野的神经元,不希望参数一样,否则无意义)
      在这里插入图片描述

    • 参数共享的一般设定
      对每个感受野,都使用一组相同的神经元进行守备;这一组神经元被称作filter,对不同感受野使用的filter参数相同
      在这里插入图片描述

    • 卷积层的优势
      卷积层是“受限”(弹性变小)的FC

      • FC可通过“学习”决定要看到的图片的范围。加上“感受野”概念后,就只能看某一个范围
      • FC可以自由决定守备不同“感受野”的各个神经元参数。加上“权值共享”概念后,守备不同感受野的同一个滤波器filter参数相同
        在这里插入图片描述
        一般而言,model bias小,model的flexibility很高时,容易overfitting。FC层样样通,样样松(可以做各种各样的事情,可以有各种各样的变化,但可能无法在任何特定任务上做好)
        CNN的bias较大,专门为影像设计,则它在影像上可以做得很好

    三、滤波器角度

    • 卷积层基本定义:
      卷积层中有若干个filter,每个filter可用来抓取图片中的某一特征(特征pattern的大小 小于感受野大小)。
      filter的参数,即为神经元中的权值weight
      不同的filter扫过一张图片,将会产生“新的图片”,每个filter会产生图片中的一个channel(feature map)
      filter的计算是内积:filter和图片对应位置的数值直接相乘,所有乘完后再相加在这里插入图片描述
      在这里插入图片描述
    • 多层卷积:让小卷积核看见大pattern
      如下图,第一层的卷积结果,产生了一张 3 × 3 × 64 3\times3\times64 3×3×64的feature map。
      继续卷积时,需要对64个channel都进行处理
      ⇒filter的“高度”为64
      在这里插入图片描述
      这里,在第二层中考虑 3 × 3 3\times3 3×3的范围,在原图实际上考虑了 5 × 5 5\times5 5×5范围内的pattern。当卷积层越来越深时,即使只是 3 × 3 3\times3 3×3的filter,看到的范围也会越来越大。
      在这里插入图片描述
    • 卷积运算中也有bias,一般忽略
    • 小结:
      在这里插入图片描述
      • 不用看整张image
        • 神经元角度:只要守备感受野
        • 滤波器角度:使用滤波器侦测模式pattern
      • 图片不同位置的相同模式pattern:
        • 神经元角度:守备不同感受野的神经元共用参数
        • 滤波器角度:滤波器“扫过”整张图片
    • 思考③:图片降采样不影响图片的辨析
      ⇒Pooling(池化)把图片变小,减小运算量
      Pooling本身没有参数,所以它不是一个 Layer,没有要 Learn 的东西。行为类似于一个 Activation Function(Sigmoid , ReLU ),是一个 Operator,它的行为都是固定好的。
      在这里插入图片描述
      大小可调整
      在这里插入图片描述
      在这里插入图片描述
    • The whole CNN(典型分类网络结构):conv-pooling-…(循环)-flatten-FC-softmax
      在这里插入图片描述
      一般:卷积与池化(可选,减小运算量)交替使用
      在这里插入图片描述
      Pooling对 Performance,会带来一点伤害的。如果你运算资源足够支撑你不做 Pooling 的话,很多 Network 的架构的设计,往往今天就不做 Pooling,全 Convolution。

    四、应用

    在这里插入图片描述

  • 相关阅读:
    【python笔记】客户运营 - cohort分析
    【camera】【ISP】Lens Shading Correction镜头阴影校正
    linux下载安装高斯(opengauss)数据库
    嘴笨的技术人员怎么发言
    【Spring注解】@Conditional注解的使用
    18亿欧元大动作,法国瞄准实现量子飞跃
    Cannot deserialize value of type `java.util.Date` from String
    Linux开机默认进入命令行或图形化模式
    TensorFlow 2.9的零零碎碎(一)
    防火墙组网
  • 原文地址:https://blog.csdn.net/Moliay/article/details/141091756