资讯详情

4. 卷积神经网络CNN

文章目录

  • 4. 卷积神经网络CNN
    • 4.1 概念
      • 4.1.1 概念
      • 4.1.2 用途
    • 4.2 结构介绍
      • 4.2.1 结构简介
      • 4.2.2 卷积层
        • 1) 基本概念
        • 2) 前期准备
        • 3) 参数共享
        • 4) 卷积运算
          • a) 二维卷积运算
          • b) 偏置
          • c) 填充
          • d) 三维卷积运算
        • 5) 小结
      • 4.2.3 池化层
        • 1) 基本概念
        • 2) 小结
      • 4.2.4 全连接层
        • 1) 基本概念
        • 2) 例子
      • 4.2.5 激活函数RelU
      • 4.2.6 小结
    • 4.2.7 各种计算公式
        • 1) 卷积计算公式
        • 2) 膨胀卷积计算公式
        • 3) 池化计算公式
        • 4) 转移卷积公式
    • 4.3 典型CNN
      • 4.3.1 LeNet
        • 1) 基本概念
        • 2) 网络结构
        • 3) 特点
      • 4.3.2 AlexNet
        • 1) 基本概念
        • 2) 网络结构
        • 3) 网络特点
      • 4.3.3 VGGNet
        • 1) 基本概念
        • 2) 网络结构
        • 3) 网络特点
      • 4.3.4 ResNet
        • 1) 基本概念
        • 2) 网络结构
        • 3) 网络特点

4. 卷积神经网络CNN

文章链接

https://gitee.com/fakerlove/deep-learning 

算法类别可分为三类:

  • 常用于图像数据的分析和处理
  • 文本分析或自然语言处理
  • 常用于数据生成或非监督学习应用

资料参考

https://www.zybuluo.com/hanbingtao/note/485480 

参考资料2

https://www.cnblogs.com/wj-1314/p/9754072.html 

4.1 概念

4.1.1 概念

参考资料

https://blog.csdn.net/qq_25762497/article/details/51052861 

卷积神经网络是近年来发展起来的一种高效的识别方法,引起了广泛的关注。Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。

现在,CNN它已成为许多科学领域的研究热点之一,特别是在模式分类领域。由于该网络避免了图像的复杂早期预处理,可以直接输入原始图像,因此得到了更广泛的应用。 K.Fukushima1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研人员改进了网络。其中,具有代表性的研究成果是Alexander和Taylor该方法结合了各种改进方法的优点,避免了耗时的误差反向传播。

那么有什么区别呢?默认情况下,卷积神经网络的输入是图像,可以将特定的性质编码到网络结构中,使我们的前馈函数更有效率,减少大量参数。

使用输入卷积神经网络是图片的特征,将神经元设计成三个维度 : , , (注意这个depth用来描述神经元的不是神经网络的深度) 。例如,输入图片的大小是 32 × 32 × 3 (rgb),那么输入神经元也有 32×32×3 的维度。

传统神经网络

这里写图片描述

卷积神经网络

卷积神经网络由多层组成,其输入为三维,输出为三维,有的层有参数,有的层不需要参数。

4.1.2 用途

顾名思义就是将图像进行类别筛选,通过深度学习方法识别图片属于哪种分类类别,其主要重点在于一张图像只包含一种分类类别,即使该影像内容可能有多个目标,所以单纯图像分类的应用并不普遍。然而,由于单一目标识别是深度学习算法中最正确的,许多应用程序实际上会首先通过目标检测方法找到目标,然后缩小图像分类的捕获范围。因此,图像分类法通常用于目标检测的应用范围。

图像分类也是许多用于测试算法基准的方法之一,ImageNet大规模视觉识别挑战(ILSVRC)算法测试中提供的公开图像数据。属于图像分类CNN其相关算法也是最容易理解的基础,因此初学者应首先将图像分类作为深度学习分析的起点。使用图像分类进行识别,通常输入图像,输出为文本类。

图像中可以有一个或多个目标,目标也可以属于不同的类别。算法主要有两个目的:找到目标坐标并识别目标类别。简单地说,除了知道目标是什么,它还需要知道它在哪里。

目标检测的应用非常普遍,包括文章开头提到的人脸识别相关技术的结合应用,或制造业的缺陷检测,甚至医院用于X射线和超声波检测特定身体部位的病情。目标识别的基础可以想象为在图像分类中增加标记位置的功能,因此图像分类的基础是学习的。然而,目标检测中标记的坐标通常是矩形或方形,只知道目标的位置,不能描述目标的边缘,因此常用的应用通常是「了解目标位置」作为目标。

最常见的算法是YOLO及R-CNN。其中YOLO由于算法特性识别速度快,已经到来v3版本。R-CNN搜索目标位置及辨识算法和YOLO稍有不同,虽然速度稍较YOLO慢,但正确率稍高于YOLO。使用目标检测进行识别,通常输入为一张图像,而输出为一个或数个文字类别和一组或多组坐标。

算法会针对一张图像中的每个像素进行识别,也就是说不同于目标检测,语义分割可以正确区别各目标的边界像素,简单来说,语义分割就是像素级别的图像分类,针对每个像素进行分类。当然这类应用的模型就会需要较强大的GPU和花较多时间进行训练。

常见应用类似目标检测,但会使用在对于图像识别有较高精细度,如需要描绘出目标边界的应用。例如制造业上的瑕疵检测,针对不规则形状的大小瑕疵,都可以正确描绘。医学上常用于分辨病理切片上的病变细胞,或是透过MRI、X光或超音波描绘出病变的区块及类别。算法如U-Net或是Mask R-CNN都是常见的实作方法。使用语义分割进行识别,通常输入为一张图像,而输出也为一张等大小的图像,但图像中会以不同色调描绘不同类别的像素。

4.2 结构介绍

资料参考

https://blog.csdn.net/qq_25762497/article/details/51052861

4.2.1 结构简介

  • ,卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
  • ,这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。
  • ,通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
  • , 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

4.2.2 卷积层

1) 基本概念

普通神经网络把输入层和隐含层进行““的设计。从计算的角度来讲,相对较小的图像从整幅图像中计算特征是可行的。

但是,如果是更大的图像(如$96\times 96 $的图像),要通过这种全联通网络的这种方法来学习整幅图像上的特征,从计算角度而言,将变得非常耗时。

你需要设计 1 0 4 ( = 10000 ) 10^4(=10000) 104(=10000)个输入单元,假设你要学习 100 个特征,那么就有 1 0 6 10^6 106个参数需要去学习。与$ 28\times 28 $的小块图像相比较, $96\times 96 $的图像使用前向输送或者后向传导的计算方式,计算过程也会慢 100 100 100倍。

  • 卷积层的输入数据

  • 卷积层输出数据

  • 每个隐含单元连接的输入区域大小叫r神经元的

  • 由于卷积层的神经元也是三维的,所以也具有深度。

卷积层解决这类问题的一种简单方法是对隐含单元和输入单元间的连接加以限制:

例如,每个隐含单元仅仅连接输入图像的一小片相邻区域。(对于不同于图像输入的输入形式,也会有一些特别的连接到单隐含层的输入信号“连接区域”选择方式。如音频作为一种信号输入方式,一个隐含单元所需要连接的输入单元的子集,可能仅仅是一段音频输入所对应的某个时间段上的信号。)

具体如下图所示,样例输入单元大小是32×32×3, 输出单元的深度是5, 对于输出单元不同深度的同一位置,与输入图片连接的区域是相同的,但是参数(过滤器)不同。

,但是值的计算方法是没有变的,都是权重和输入的点积,然后加上偏置,这点与普通神经网络是一样的,如下图所示:

2) 前期准备

一个输出单元的大小有以下三个量控制:,

  • : 顾名思义,它控制输出单元的深度,也就是filter的个数,连接同一块区域的神经元个数。又名:
  • :它控制在同一深度的相邻两个隐含单元,与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少。
  • : 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

我们先定义几个符号:

  • W W W : 输入单元的大小(宽或高)
  • F F F : 感受野(receptive field)
  • S S S : 步幅(stride)
  • P P P : 补零(zero-padding)的数量
  • K K K : 深度,输出单元的深度

则可以用以下公式计算一个维度(宽或高)内一个输出单元里可以有几个

W − F + 2 P S + 1 \frac{W-F+2P}{S}+1 SW−F+2P​+1

如果计算结果不是一个整数,则说明现有参数不能正好适合输入,步幅(stride)设置的不合适,或者需要补零,证明略,下面用一个例子来说明一下。

这是一个一维的例子,左边模型输入单元有5个,即 W = 5 W=5 W=5​,

边界各补了一个零,即 P = 1 P=1 P=1​,

步幅是1, 即 S = 1 S=1 S=1​,感受野是3,

因为每个输出隐藏单元连接3个输入单元,即 F = 3 F=3 F=3​,

根据上面公式可以计算出输出隐藏单元的个数是 5 − 3 + 2 1 + 1 = 5 \frac{5-3+2}{1}+1=5 15−3+2​+1=5​:与图示吻合。

右边那个模型是把步幅变为2,其余不变,可以算出输出大小为: 5 − 3 + 2 2 + 1 \frac{5-3+2}{2}+1 25−3+2​+1,也与图示吻合。

若把步幅改为3,则公式不能整除,说明步幅为3不能恰好吻合输入单元大小。

3) 参数共享

应用参数共享可以大量减少参数数量,参数共享基于一个假设:如果图像中的一点 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​)包含的特征很重要,那么它应该和图像中的另一点 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)​一样重要。

换种说法,我们把同一深度的平面叫做深度切片(depth slice)((e.g. a volume of size [55x55x96] has 96 depth slices, each of size [55x55])),那么同一个切片应该共享同一组权重和偏置。

我们仍然可以使用梯度下降的方法来学习这些权值,只需要对原始算法做一些小的改动, 这里共享权值的梯度是所有共享参数的梯度的总和。

一方面,重复单元能够对特征进行识别,而不考虑它在可视域中的位置。

另一方面,权值共享使得我们能更有效的进行特征抽取,因为它极大的减少了需要学习的自由变量的个数。通过控制模型的规模,卷积网络对视觉问题可以具有很好的泛化能力。

4) 卷积运算

如果应用参数共享的话,实际上每一层计算的操作就是输入层和权重的!这也就是卷积神经网络名字的由来。

a) 二维卷积运算

先抛开卷积,这个概念不管。为简便起见,考虑一个大小为

这里的卷积核共有9个参数,就记为 Θ = [ θ i j ] 3 × 3 Θ=[\theta_{ij}]_{3\times 3} Θ=[θij​]3×3​​​吧。

这种情况下,卷积核实际上有9个神经元,他们的输出又组成一个3×3的矩阵,称为特征图。

第一个神经元连接到图像的第一个3×3的局部,

第二个神经元则连接到第二个局部(注意,有重叠!就跟你的目光扫视时也是连续扫视一样)。

具体如下图所示。

计算过程为各个位置的卷积核的元素和输入元素的对应元素相乘,在求和

灰色方块的答案= 33 × 11 + 32 × 12 + 31 × 13 + 23 × 21 + 22 × 22 + 21 × 23 + 13 × 31 + 12 × 32 + 11 × 33 33\times 11+32\times 12+31\times 13+23\times 21+22\times 22+21\times 23+13\times 31+12\times 32+11\times 33 33×11+32×12+31×13+23×21+22×22+21×23+13×31+12×32+11×33

图的第一行是第一个神经元的输出,第二行是第二个神经元的输出。每个神经元的运算依旧是 f ( x ) = a c t ( ∑ i , j n θ ( n − j ) ( n − i ) x i j + b ) f(x)=act(\sum_{i,j}^n\theta_{(n-j)(n-i)}x_{ij}+b) f(x)=act(i,j∑n​θ(n−j)(n−i)​xij​+b) 需要注意的是,平时我们在运算时,习惯使用 θ i j x i j \theta_{ij}x_{ij} θij​xij​,这种写法,但事实上,我们这里使用的是 θ ( n − j ) ( n − i ) x i j \theta_{(n-j)(n-i)}x_{ij} θ(n−j)(n−i)​xij​

现在我们回忆一下离散卷积运算。假设有二维离散函数 f ( x , y ) , g ( x , y ) f(x,y),g(x,y) f(x,y),g(x,y)​那么它们的卷积定义为 f ( m , n ) ∗ g ( m , n ) = ∑ u ∞ ∑ v ∞ f ( u , v ) g ( m − u , n − v ) f(m,n)*g(m,n)=\sum_{u}^\infty \sum_{v}^\infty f(u,v)g(m-u,n-v) f(m,n)∗g(m,n)=u∑∞​v∑∞​f(u,v)g(m−u,n−v) 现在发现了吧!上面例子中的9个神经元均完成输出后,实际上等价于图像和卷积核的卷积操作!

输入:

4 × 4 4\times 4 4×4​的图片,

过滤器 3 × 3 3\times 3 3×3​​,

步幅1

补零0

是如何算出来的???

15是下面算出来的

1 × 2 + 2 × 0 + 3 × 1 + 0 × 0 + 1 × 1 + 2 × 2 + 3 × 1 + 0 × 0 + 1 × 2 = 2 + 3 + 1 + 4 + 3 + 2 = 15 1\times 2+2\times 0+3\times 1+0\times 0+1\times 1+2\times2+3\times 1+0\times 0+1\times 2=2+3+1+4+3+2=15 1×2+2×0+3×1+0×0+1×1+2×2+3×1+0×0+1×2=2+3+1+4+3+2=15​

b) 偏置

一般情况下怎么添加偏置

c) 填充

如果输入数据 4 × 4 4\times 4 4×4​​,滤波器 3 × 3 3\times 3 3×3​​,如果不填充 P = 0 P=0 P=0​的话,输出矩阵就是 2 × 2 2\times 2

标签: 线条连接器lrn系列热继电器j95组合式连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台