卷积神经网络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中保留空间信息和有效处理图像边缘信息非常重要。
卷积结果计算公式
长度:
宽度:
其中:W1、H1表示输入的宽度、长度;W2、H2表示输出特征图的宽度、长度;
F表示卷积核长和宽的大小;S表示滑动窗口的步长;P表示边界填充(加几圈0)
例:如果输入数据是32*32*3的图像,用10个5*5*3的filter来进行卷积操作,指定步长为1,边界填充为2,最终输出规模为?
输出规模为:32*32*12
经过卷积操作后也可以保持特征图长度、宽度不变。
池化层(下采样层)
有几个卷积核就有多少个特征图,现实中情况肯定更为复杂,也就会有更多的卷积核,那么就会有更多的特征图,当特征图非常多的时候,意味着我们得到的特征也非常多,但是这么多特征都是我们所需要的吗?显然不是,其实有很多特征我们是不需要的,而这些多余的特征通常会给我们带来如下两个问题:
- 过拟合
- 维度过高
为了解决这个问题,我们可以利用池化层,那什么是池化层呢?池化层又称为下采样,也就是说,当我们进行卷积操作后,再将得到的特征图进行特征提取,将其中最具有代表性的特征提取出来,可以起到减小过拟合和降低维度的作用
最大池化
最大池化就是每次取正方形中所有值的最大值,这个最大值也就相当于当前位置最具有代表性的特征,这个过程如下所示:
这里有几个参数需要说明一下:
- kernel_size = 2:池化过程使用的正方形尺寸是2×2,如果是在卷积的过程中就说明卷积核的大小是2×2
- stride = 2:每次正方形移动两个位置(从左到右,从上到下),这个过程其实和卷积的操作过程一样
- padding = 0:这个之前介绍过,如果此值为0,说明没有进行拓展
平均池化
平均池化就是取此正方形区域中所有值的平均值,考虑到每个位置的值对于此处特征的影响,平均池化计算也比较简单,整个过程如下图所示:
计算平均值时采用向上取整方式
池化层的好处
- 在减少参数量的同时,还保留了原图像的原始特征。
- 有效防止过拟合。
- 为卷积神经网络带来平移不变性。
平移不变性
可以看到,两张原始图片的位置有所不同,一个是正常的,另一个是人的脑袋稍稍左移了一些,经过卷积操作后,得到各自对应的特征图,这两张特征图也和原始图片的位置相对应,一个眼睛特征的位置是正常的,另一个眼睛特征的位置稍稍左移了一些,虽然人可以分辨,但是经过神经网络计算后,就可能带来误差,因为应该出现眼睛的位置并没有出现眼睛,那应该怎么办呢?此时使用池化层进行池化操作,可以发现,虽然池化之前两幅图片的眼睛特征不在一个位置,但是经过池化之后,眼睛特征的位置都是相同的,这就为后续神经网络的计算带来了方便,此性质就是池化的平移不变性。。
激活层与激活函数
Sigmoid函数
最常用于逻辑回归
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
3个3*3卷积核所需参数=3×C×(3×3×C)=27
很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随之增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成特征提取操作。
总结
以上就是卷积神经网络的相关知识。
参考博主:卷积神经网络(CNN)详细介绍及其原理详解-CSDN博客
原文地址:https://blog.csdn.net/m0_67761835/article/details/143900819
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!