自学内容网 自学内容网

卷积神经网络CNN

图像处理常见概念

颜色空间

颜色空间也称彩色模型,用于描述色彩。

常见的颜色空间包括:RGB、CMYK(多用在纺织领域)、YUV(智能设备)、L*a*b、HSL和HSV/HSB等。

对于RGB:

r、g、b的取值范围分别为0~255。

其中:白色(0,0,0);黑色(255,255,255),共有256×256×256种颜色(大约1600多万个),这些颜色几乎包括了人类视觉能力所能感知到的所有颜色。


图像颜色通道

颜色空间如RGB,用于表示图像的色彩。


HSV色彩模式

色相(Hue):指物体传导或反射的波长。更常见的是以颜色(如红色、橘色或绿色)来辨识,取0~360度的数值来衡量。

饱和度(Saturation):又称色度,是指色彩的强度或纯度,取值范围为0%~100%。

明度(Value):表示颜色明亮的程度,取值范围为0%(黑)~100%(白)。


灰度图

灰度图通常由unit8、unit16、单精度类型或者双精度类型的数值来描述。

通常0代表黑色,1、255、65635(为数据矩阵的取值范围上限)代表白色。


数据图像的输入格式

彩色图像通常表示为三维张量,包含高度(H)、宽度(W)和通道数(C)。

灰度图通过将颜色通道数减少到1来表示图像的亮度信息。


卷积神经网络基础概念

卷积做了一件什么事?

首先卷积核是一个二维矩阵,当然这个二维矩阵要比输入图像的二维矩阵要小或相等,卷积核通过在输入图像的二维矩阵上不停的移动,每一次移动都进行一次乘积的求和,作为此位置的值,这个过程如下图所示:

卷积核(kernal):3×3      input:H×W×C    output:特征图



图像输入:7×7×3(H=7  W=7  C=3)

 计算:

卷积核向右移动两个像素……依次向右、向下移动两个像素。

卷积:各个点上的内积之和。


 卷积参数共享

与全连接相比,卷积参数量大量减少。

例:数据是7*7*3的图像,用10个3*3*3的filter来进行卷积,所需的权重参数有多少个呢?

解:

卷积:3*3*3=27,表示每一个卷积核只需要27个参数,此时有10个不同的卷积核,就需要10*27=270个卷积核参数,不要忘了还有b参数,每个卷积核都有一个对应的偏置参数,最终只需要270+10=280个权重参数。

全连接:(7*7*3)*(3*3*3)*10


 卷积层涉及参数

  • 滑动窗口步长
  • 卷积核尺寸
  • 边缘填充
  • 卷积核个数

边缘填充

我们可以在原始的输入图像的二维矩阵周围在扩展一圈或者几圈,这样每个位置都可以被公平的计算到了,也不会丢失任何特征,此过程可见下面两种情况,这种通过拓展解决特征丢失的方法又被称为Padding。

                 Padding为1时卷积的过程                                Padding为2时卷积的过程


如果不使用填充,卷积核的中心将无法对齐到输入图像的边缘,导致输出特征图尺寸变小。

数据填充的主要目的是确保卷积核能够覆盖输入图像的边缘区域,同时保持输出特征图的大小。这对于在CNN中保留空间信息和有效处理图像边缘信息非常重要。

卷积结果计算公式

长度:H_{2}=\frac{H_{1}-F_{W}+2P}{S}+1

宽度:W_{2}=\frac{W_{1}-F_{W}+2P}{S}+1         

其中:W1、H1表示输入的宽度、长度;W2、H2表示输出特征图的宽度、长度;

           F表示卷积核长和宽的大小;S表示滑动窗口的步长;P表示边界填充(加几圈0)

例:如果输入数据是32*32*3的图像,用10个5*5*3的filter来进行卷积操作,指定步长为1,边界填充为2,最终输出规模为? 

输出规模为:32*32*12

经过卷积操作后也可以保持特征图长度、宽度不变。

池化层(下采样层)

有几个卷积核就有多少个特征图,现实中情况肯定更为复杂,也就会有更多的卷积核,那么就会有更多的特征图,当特征图非常多的时候,意味着我们得到的特征也非常多,但是这么多特征都是我们所需要的吗?显然不是,其实有很多特征我们是不需要的,而这些多余的特征通常会给我们带来如下两个问题:

  • 过拟合
  • 维度过高

  为了解决这个问题,我们可以利用池化层,那什么是池化层呢?池化层又称为下采样,也就是说,当我们进行卷积操作后,再将得到的特征图进行特征提取,将其中最具有代表性的特征提取出来,可以起到减小过拟合和降低维度的作用

最大池化

最大池化就是每次取正方形中所有值的最大值,这个最大值也就相当于当前位置最具有代表性的特征,这个过程如下所示:

这里有几个参数需要说明一下:

  1. kernel_size = 2:池化过程使用的正方形尺寸是2×2,如果是在卷积的过程中就说明卷积核的大小是2×2
  2. stride = 2:每次正方形移动两个位置(从左到右,从上到下),这个过程其实和卷积的操作过程一样
  3. padding = 0:这个之前介绍过,如果此值为0,说明没有进行拓展

平均池化

平均池化就是取此正方形区域中所有值的平均值,考虑到每个位置的值对于此处特征的影响,平均池化计算也比较简单,整个过程如下图所示:

计算平均值时采用向上取整方式

池化层的好处

  • 在减少参数量的同时,还保留了原图像的原始特征。
  • 有效防止过拟合。
  • 为卷积神经网络带来平移不变性。

平移不变性

可以看到,两张原始图片的位置有所不同,一个是正常的,另一个是人的脑袋稍稍左移了一些,经过卷积操作后,得到各自对应的特征图,这两张特征图也和原始图片的位置相对应,一个眼睛特征的位置是正常的,另一个眼睛特征的位置稍稍左移了一些,虽然人可以分辨,但是经过神经网络计算后,就可能带来误差,因为应该出现眼睛的位置并没有出现眼睛,那应该怎么办呢?此时使用池化层进行池化操作,可以发现,虽然池化之前两幅图片的眼睛特征不在一个位置,但是经过池化之后,眼睛特征的位置都是相同的,这就为后续神经网络的计算带来了方便,此性质就是池化的平移不变性。。

激活层与激活函数

Sigmoid函数

f(x)=\sigma (x)=\frac{1}{1+e^{-x}}

最常用于逻辑回归

Sigmoid函数的导数

Sigmoid函数的缺点

  • 易导致梯度消失(倒数的范围始终小于0.25)
  • 幂计算复杂,计算速度慢

激活函数

tanh函数

值域[-1,1]

关于x,y轴对称

tanh函数的导数

值域[0,1]

tanh激活函数的缺点

  • 易导致梯度消失
  • 幂计算复杂,计算速度慢

ReLU激活函数

ReLU激活函数的导数

ReLU激活函数的导数是一个阶跃函数

ReLU激活函数的特点

  • 在正区间内解决了梯度消失问题。
  • 使用时只需要判断输入是否大于0,大于0时,计算速度非常快,训练参数时的收敛速度比sigmoid和tanh快。
  • 会存在Dead Relu问题,也就是送入激活函数的输入特征是负数时,激活函数输出为0,反向传播得到的梯度是0,导致参数无法更新,造成神经元死亡。

全连接层(FC层)

假设还是上面人的脑袋的示例,现在我们已经通过卷积和池化提取到了这个人的眼睛、鼻子和嘴的特征,如果我想利用这些特征来识别这个图片是否是人的脑袋该怎么办呢?此时我们只需要将提取到的所有特征图进行“展平”,将其维度变为1 × x 1×x1×x,这个过程就是全连接的过程,也就是说,此步我们将所有的特征都展开并进行运算,最后会得到一个概率值,这个概率值就是输入图片是否是人的概率,这个过程如下所示:

单看这个过程可能还是不太清晰,所以我们可以把之前的过程与全连接层结合起来,如下图所示:

 可以看到,经过两次卷积和最大池化之后,得到最后的特征图,此时的特征都是经过计算后得到的,所以代表性比较强,最后经过全连接层,展开为一维的向量,再经过一次计算后,得到最终的识别概率,这就是卷积神经网络的整个过程。

特征图变化

感受野

如果堆叠3个3*3的卷积层,并且保持滑动窗口步长为1,其感受野就是7*7的了,这跟一个使用7*7卷积核的结果是一样的,那为什么非要堆叠3个小卷积呢?

一般情况下,希望感受野大一些。

假设输入大小都是H*W*C,并且都是用c个卷积核(得到C个特征图),可以来计算一下其各自所需参数:

一个7*7卷积核所需参数=C×(7×7×C)=49 C^{2}

3个3*3卷积核所需参数=3×C×(3×3×C)=27 C^{2}

很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随之增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成特征提取操作。

总结

以上就是卷积神经网络的相关知识。

参考博主:卷积神经网络(CNN)详细介绍及其原理详解-CSDN博客


原文地址:https://blog.csdn.net/m0_67761835/article/details/143900819

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!