【图像卷积基础】卷积过程&卷积实现通道扩充与压缩&池化Pooling原理和可视化

【图像卷积基础】卷积过程&卷积实现通道扩充与压缩&池化Pooling原理和可视化

一、卷积过程

1:单通道卷积

以单通道卷积为例,输入为(1,5,5),分别表示1个通道,宽为5,高为5。假设卷积核大小为3x3,padding=0,stride=1。

卷积过程如下:

相应的卷积核不断的在图像上进行遍历,最后得到3x3的卷积结果,结果如下:

2:多通道卷积1

以彩色图像为例,包含三个通道,分别表示RGB三原色的像素值,输入为(3,5,5),分别表示3个通道,每个通道的宽为5,高为5。假设卷积核只有1个,卷积核通道为3,每个通道的卷积核大小仍为3x3,padding=0,stride=1。

卷积过程如下,每一个通道的像素值与对应的卷积核通道的数值进行卷积,因此每一个通道会对应一个输出卷积结果,三个卷积结果对应位置累加求和,得到最终的卷积结果(这里卷积输出结果通道只有1个,因为卷积核只有1个。卷积多输出通道下面会继续讲到)。

可以这么理解:最终得到的卷积结果是原始图像各个通道上的综合信息结果。

上述过程中,每一个卷积核的通道数量,必须要求与输入通道数量一致,因为要对每一个通道的像素值要进行卷积运算,所以每一个卷积核的通道数量必须要与输入通道数量保持一致

我们把上述图像通道如果放在一块,计算原理过程还是与上面一样,堆叠后的表示如下:

3:多通道卷积2

在上面的多通道卷积1中,输出的卷积结果只有1个通道,把整个卷积的整个过程抽象表示,过程如下:

即:由于只有一个卷积核,因此卷积后只输出单通道的卷积结果(黄色的块状部分表示一个卷积核,黄色块状是由三个通道堆叠在一起表示的,每一个黄色通道与输入卷积通道分别进行卷积,也就是channel数量要保持一致,图片组这里只是堆叠放在一起表示而已)。

那么,如果要卷积后也输出多通道,增加卷积核(filers)的数量即可,示意图如下:

备注:上面的feature map的颜色,只是为了表示不同的卷积核对应的输出通道结果,不是表示对应的输出颜色

4、填充

填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×0+0×1+0×2+0×3=00×0+0×1+0×2+0×3=0。

一般来说,如果在高的两侧一共填充 p h p_h ph 行,在宽的两侧一共填充 p w p_w pw 列,那么输出形状将会是

( n h − k h + p h + 1 ) × ( n w − k w + p w + 1 ) (n_h - k_h + p_h + 1)\times(n_w - k_w + p_w + 1) (nh−kh+ph+1)×(nw−kw+pw+1)

也就是说,输出的高和宽会分别增加 p h p_h ph和 p w p_w pw 。

卷积神经网络经常使用奇数高宽的卷积核,如1、3、5和7,所以两端上的填充个数相等。对任意的二维数组X,设它的第i行第j列的元素为X[i,j]。当两端上的填充个数相等,并使输入和输出具有相同的高和宽时,我们就知道输出Y[i,j]是由输入以X[i,j]为中心的窗口同卷积核进行互相关计算得到的。

5、步幅

我们介绍了卷积运算。卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。我们将每次滑动的行数和列数称为步幅(stride)。

目前我们看到的例子里,在高和宽两个方向上步幅均为1。我们也可以使用更大步幅。下图展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。图中的阴影部分为输出元素及其计算所使用的输入和核数组元素:0×0+0×1+1×2+2×3=80×0+0×1+1×2+2×3=8、0×0+6×1+0×2+0×3=60×0+6×1+0×2+0×3=6。

二、卷积实现通道扩充与压缩

一张图就能表示清楚

三、池化Pooling原理和可视化

池化过程在一般卷积过程后。池化(pooling) 的本质,其实就是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行降维压缩,以加快运算速度。

采用较多的一种池化过程叫**最大池化(Max Pooling)**,其具体操作过程如下:

池化过程类似于卷积过程,如上图所示,表示的就是对一个 4X4 feature map邻域内的值,用一个 的 2x2 filter,步长为2进行'扫描',选择最大值输出到下一层,这叫做 Max Pooling。

max pooling常用的 s=2,f=2 的效果:特征图高度、宽度减半,通道数不变。

还有一种叫**平均池化(Average Pooling)**,就是从以上取某个区域的最大值改为求这个区域的平均值,其具体操作过程如下:

如上图所示,表示的就是对一个 4X4 feature map邻域内的值,用一个 2X2 的filter,步长为2进行'扫描',计算平均值输出到下一层,这叫做 Mean Pooling。

【池化层没有参数、池化层没有参数、池化层没有参数】 (重要的事情说三遍)

池化的作用:

(1)保留主要特征的同时减少参数和计算量,防止过拟合

(2)invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)。

Pooling 层说到底还是一个特征选择,信息过滤的过程。也就是说我们损失了一部分信息,这是一个和计算性能的一个妥协,随着运算速度的不断提高,我认为这个妥协会越来越小。

现在有些网络都开始少用或者不用pooling层了。

相关推荐
RWKV元始智能7 小时前
RWKV超并发项目教程,RWKV-LM训练提速40%
人工智能·rnn·深度学习·自然语言处理·开源
AI技术增长9 小时前
Pytorch图像去噪实战(六):CBDNet真实噪声去噪实战,解决合成噪声模型落地效果差的问题
pytorch·深度学习·机器学习
小糖学代码11 小时前
LLM系列:2.pytorch入门:8.神经网络的损失函数(criterion)
人工智能·深度学习·神经网络
Jmayday11 小时前
Pytorch:RNN理论基础
pytorch·rnn·深度学习
AI周红伟13 小时前
周红伟:GPT-Image-2深度解析:从技术原理到实战教程,为什么它能让整个AI圈炸锅?
人工智能·gpt·深度学习·机器学习·语言模型·openclaw
端平入洛14 小时前
梯度是什么:PyTorch 自动求导详解
人工智能·深度学习
Uopiasd1234oo14 小时前
上下文引导模块改进YOLOv26局部与全局特征融合能力双重提升
深度学习·yolo·机器学习
zhihuishuxia__14 小时前
Multiplex通讯(多路复用通讯)
网络·图像处理·数码相机·计算机视觉·自动化
懷淰メ15 小时前
【AI加持】基于PyQt+YOLO+DeepSeek的钢材焊接缺陷检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·缺陷检测·deepseek·钢材缺陷
一碗白开水一15 小时前
【论文解读】VMamba: Visual State Space Model
人工智能·计算机视觉