CV:CNN(Convolutional Neural Networks,卷积神经网络)概述【(卷积层×n+池化层)×m+全连接层】【卷积层输出长宽维度:O= (I+2P-F)/S+1、通道数:K 】

本文详细介绍了卷积神经网络(CNN)的原理与组成,包括输入层、卷积层、激活函数、池化层、全连接层等关键组件。讨论了卷积层的感受野、过滤器、参数数量计算,以及CNN与全连接层的区别。此外,还涵盖了CNN在Keras中的实现、训练过程、权值更新方法、优缺点以及典型CNN模型,如LeNet和AlexNet。文章强调了Fine-Tuning的重要性,并提供了CNN参数优化的建议。
摘要由CSDN通过智能技术生成

一、概述

  • 卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,全连接神经网络(DNN)里的一些计算技巧到这里依旧适用。

  • CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,从而进行图像识别等等功能。

  • 一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。

  • 卷积神经网络与其他神经网络的区别:卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

  • 卷积神经网络(CNN)结构由以下层组成:

    • 输入层
    • 卷积层(Convolutional layer):卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
    • 激活函数:
      • Sigmoid:解析值介于0和1之间
      • TanH: 将值解析为介于-1和1之间
      • ReLU(Rectified Linear Units):如果值为负,则变为0,否则保持不变
    • 池化层(Pooling layer):通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
    • 全连接层(Fully-Connected layer):把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

在这里插入图片描述

  • 卷积神经网络各层应用实例:
    在这里插入图片描述
  • 卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
  • CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。
  • 卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

二、CNN的组成

1、输入层

具有三维体积的神经元(3D volumes of neurons):卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 7 × 7 × 3 (rgb),那么输入神经元就也具有 7×7×3 的维度。

2、卷积层(Convolution)

  • 全连接神经网络把输入层和隐含层进行“全连接(Full Connected)“的设计。从计算的角度来讲,相对较小的图像从整幅图像中计算特征是可行的。但是,如果是更大的图像,要通过这种全联通网络的这种方法来学习整幅图像上的特征,从计算角度而言,将变得非常耗时。
  • 卷积层的卷积操作解决全连接神经网络计算量庞大的问题:对卷积核输入单元间的连接加以限制:每个卷积核仅仅只能连接输入单元的一部分。
  • 卷积层的神经元也可以是三维的,所以也具有深度。一个神经元可以包含一系列过滤器(filter),每个过滤器(filter)训练一个深度,某个神经元包含几个过滤器(filter),该神经元的输出单元就具有多少深度。

2.1 感受野(Receptive Field)

  • 在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(Feature Map)上的像素点在输入图片上映射的区域大小。通俗点的解释是,特征图上的一个点对应输入图上的区域。

  • The receptive field is defined as the region in the input space that a particular CNN’s feature is looking at (i.e. be affected by).

  • 卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,kernel size 均为3×3,stride均为1,绿色标记的是Layer2 每个神经元看到的区域,黄色标记的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1 上 3×3 大小的区域,Layer3 每个神经元看到Layer2 上 3×3 大小的区域,该区域可以又看到Layer1 上 5×5 大小的区域。
    在这里插入图片描述

  • 所以,感受野是个相对概念,某层卷积层的特征图(Feature Map)上的元素看到前面各个不同卷积层上的区域范围是不同的,通常在不特殊指定的情况下,感受野指的是看到输入图像上的区域

  • 感受野大小的计算是个递推公式。参考:彻底搞懂感受野的含义与计算

2.2 过滤器(Filter)/卷积核(Kernel)

  • 过滤器(Filter)可以由一层卷积核(Kernel)组成【输入数据只有一个通道】,也可以由多层卷积核(Kernel)组成【输入数据有多个通道,每个通道用一个卷积核来进行卷积操作】
  • 每层卷积层有n个过滤器(Filter),那么该层卷积层就会输出几个特征图(Feature Map)。即: 一个过滤器就对应一层特征图
  • 每个过滤器(Filter)的深度(Kernel/卷积核数量)的设定要与输入数据的深度(Channel/通道数量)一致
  • 几个小的卷积核(例如3×3)生成的几个特征图(Feature Map)叠加(stack)在一起,相比较一个大的卷积核(例如7×7)生成的1个特征图(Feature Map)来说,与原图的连通性不变,但是却大大降低了参数的个数,从而降低了计算的复杂度!这就是深度学习,喜欢小而深,厌恶大而浅。这里指的是每层卷积层中卷积核的大小和个数。
  • 卷积核大小通常是奇数。

2.3 过滤器(Filter)对单通道(channels)图片的卷积操作

  • 每一个过滤器(Filter)中的每个元素就是该神经网络的待求参数。

在这里插入图片描述

2.4 过滤器(Filter)对多通道(channels)图片的卷积操作

在这里插入图片描述
在这里插入图片描述

  • 彩色图像,一般都是RGB三个通道(channels)的,因此输入数据的维度一般有三个:(长,宽,通道)。
    比如一个像素为 7 × 7 7×7 7×7 的RGB图片,维度就是 ( 7 , 7 , 3 ) (7,7,3) (7,7,3)
  • 我们的过滤器(Filter)的维度可以设为 ( 3 , 3 , 3 ) (3,3,3) (3,3,3) ( 4 , 4 , 3 ) (4,4,3) (4,4,3) 或者 ( 5 , 5 , 3 ) (5,5,3) (5,5,3),它的最后一维要跟输入的channel维度一致。
  • 也就是说每个过滤器(Filter)由3层卷积核(Kernel)组成。

在这里插入图片描述

  • 上图中的输入图像是 ( 7 , 7 , 3 ) (7,7,3) (7,7,3),filter有2个(Filter W0、Filter W1),这两个Filter的大小均为 ( 3 , 3 , 3 ) (3,3,3) (3,3,3),步幅为2,则得到的输出为 ( 3 , 3 , 2 ) (3,3,2) (3,3,2),最后一个维度 2 2 2 表示由 2 2 2 个filter生成的 2 2 2 个特征图(Feature Map)。

2.5 神经元

  • 当我们的输入是一个(7×7)的图像,
  • 那么我们如果想获得两个特征,我们使用(3×3)的两个过滤器(Filter)即可,这样经过一次卷积以后,得到两个(5×5)的特征图,
  • 那么该层卷积层的神经元的个数就是50个(5×5×2)。原因在于像素的个数就是神经元的个数。

2.6 空间排列(Spatial arrangement)

一层卷积层的输出单元(由多个Feature Map组成)的大小有以下三个量控制:深度(depth)、步幅(stride)、补零(zero-padding)。

  • 深度(depth) : 顾名思义,它控制输出单元的深度,也就是Filter的个数,连接同一块区域的神经元个数。又名:depth column
  • 步幅(stride):每次移动的步长;它控制在同一深度的相邻两个隐含单元与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少。在Pytorch中stride可以是int或tuple,如果是tuple的话,比如 ( 1 , 2 ) (1,2) (1,2)表示行步长为1,列步长为2;
  • 补零(zero-padding) : 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

2.7 每层卷积层参数数量

在这里插入图片描述

  • 如上图中的过滤器 Filter W 0 W_0 W0、Filter W 1 W_1 W1
    • k × k k×k k×k: kernel size: k × k = 3 × 3 k×k=3×3 k×k=3×3
    • I I I: number of input channels: I = 3 I=3 I=3
    • O O O: number of output channels: O = 2 O=2 O=2
  • 该层卷积层的参数的总数量 = ( k × k × I ) × O = 3 × 3 × 3 × 2 = 54 (k×k×I)×O=3×3×3×2=54 (k×k×I)×O=3×3×3×2=54

2.8 每层卷积层的输入维度、输出维度

  • 输入:三维数据,(宽 w i n w_{in} win×高 h i n h_{in} hin×深 d i n d_{in} din)
  • 每层卷积层的参数:
    • 感受野(receptive field)的大小 f f f(kernel_size)
    • 过滤器(Filter)的数量(决定输出单元的深度) k k k (out_channels)
    • 步幅(Stride) s s s
    • 补零(zero-padding)的数量 p p p
  • 输出:三维单元,(宽 w o u t w_{out} wout×高 h o u t h_{out} hout×深 d o u t d_{out} dout),其中各维度大小为:
    • w o u t = w i n + 2 p − f s + 1 w_{out}=\cfrac{w_{in}+2p-f}{s}+1 wout=swin+2pf+1
    • h o u t = h i n + 2 p − f s + 1 h_{out}=\cfrac{h_{in}+2p-f}{s}+1 hout=shin+2pf+1
    • d o u t = k d_{out}=k dout=k

2.9 卷积层与全连接神经网络的区别

在这里插入图片描述

3、激活函数

  • 激活函数(activation function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络之所以能解决非线性问题,本质上就是激活函数加入了非线性因素,弥补了线性模型的表达力,把“激活的神经元的特征”通过函数保留并映射到下一层。
  • 激活函数不会更改输入数据的维度,也就是输入和输出的维度是相同的。
  • 典型激活函数:Sigmoid函数、TanH函数、ReLU函数

4、下采样层(Subsampling)/池化层(Pooling Layer)

池化(pool)即下采样(downsamples),目的是为了减小特征图(Feature Map),保留主要的特征同时减少参数和计算量,防止过拟合,提高模型泛化能力

池化操作对每个深度切片独立,规模一般为 2 × 2 2×2 2×2,相对于卷积层进行卷积运算,池化层进行的运算一般有以下几种:

  • 最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
  • 均值池化(Mean Pooling)。取4个点的均值。
  • 高斯池化。借鉴高斯模糊的方法。不常用。
  • 可训练池化。训练函数 f f f ,接受4个点为输入,出入1个点。不常用。

4.1 2×2 池化层

  • 最常见的池化层是规模为 2 × 2 2×2 2×2, 步幅为 2 2 2,对输入的每个深度切片进行下采样。每个MAX操作对四个数进行,如下图所示:

在这里插入图片描述

  • 池化操作将保存深度大小不变。
  • 如果池化层的输入单元大小不是二的整数倍,一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。

4.2 每层池化层的输入、输出、参数

  • 输入:三维数据,(宽 w i n w_{in} win×高 h i n h_{in} hin×深 d i n d_{in} din)
  • 每层池化层的参数(hyperparameters):
    • 感受野(receptive field)的大小 f f f
    • 步幅(Stride) s s s
  • 输出:三维单元,(宽 w o u t w_{out} wout×高 h o u t h_{out} hout×深 d o u t d_{out} dout),其中:
    • w o u t = w i n − f s w_{out}=\cfrac{w_{in}-f}{s} wout=swinf
    • h o u t = h i n − f s + 1 h_{out}=\cfrac{h_{in}-f}{s}+1 hout=shinf+1
    • d o u t = d i n d_{out}=d_{in} dout=din

5、上采样层(Upsampling)

在这里插入图片描述
在这里插入图片描述

6、全连接层(Fully-connected layer)

全连接层和卷积层可以相互转换:

  • 对于任意一个卷积层,要把它变成全连接层只需要把权重变成一个巨大的矩阵,其中大部分都是0 除了一些特定区块(因为局部感知),而且好多区块的权值还相同(由于权重共享)。
  • 相反地,对于任何一个全连接层也可以变为卷积层。比如一个 k =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值