【图像卷积基础】卷积过程&卷积实现通道扩充与压缩&池化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层了。

相关推荐
蜀中廖化5 小时前
关于架空输电线识别树障or测距相关论文阅读
论文阅读·深度学习·输电线与杆塔·输电线与树木测距
__星辰大海__5 小时前
相机成像中的平行平面成像
计算机视觉·相机
飞翔的佩奇5 小时前
【完整源码+数据集+部署教程】【运动的&足球】足球比赛分析系统源码&数据集全套:改进yolo11-RFAConv
前端·python·yolo·计算机视觉·数据集·yolo11·足球比赛分析系统
杰克船长有烦恼5 小时前
基于深度学习计算s21参数,在射频中的应用
人工智能·深度学习·射频工程
CoovallyAIHub5 小时前
计算机视觉遇见手绘图表,如何教会机器理解流程图?
深度学习·算法·计算机视觉
CoovallyAIHub5 小时前
首个自监督微调Stable Diffusion框架!更清晰、更泛化的单目深度估计(附代码地址)
深度学习·算法·计算机视觉
格林威5 小时前
常规点光源在工业视觉检测上的应用
大数据·人工智能·数码相机·计算机视觉·视觉检测·制造·视觉光源
技术闲聊DD5 小时前
深度学习(14)-Pytorch torch 手册
人工智能·pytorch·深度学习