卷积的理解,卷积与通道的关系

写这篇博文是因为在写 卷积层(Convolutional Layer)类 这篇博文的过程中,遇到了一个问题。

在使用 nn.Conv2d 时,需要 指定卷积核的一些参数,包括输入通道数、输出通道数、卷积核大小、步长等。

这里卷积核大小和步长很容易理解,对通道数的理解参见博文:输入通道数 & 输出通道数 - 理解

那么输出通道数是怎么来的呢?
是根据输入通道数和卷积核得到输出通道数吗?
如果是的,那么是怎么样得到的呢?
如果不是,那么输出通道数难道是自己想设哪个值就设哪个值吗?
我不懂呀 !!!!!!(痛苦面具 * 6)

神经网络中的卷积操作

卷积:卷积是原始图像与卷积核之间的滑动局部加乘计算过程。卷积运算是矩阵的一种哈德马积,不是线性代数中常用的乘积。

请添加图片描述

卷积在图像领域的功能

在图像和计算机视觉领域,卷积其实已经有几十年的发展历史。在传统的计算机视觉和模式识别中,卷积又被称为滤波器(Filter)。卷积就是对信息(信号)进行“过滤”(滤波),它能够“过滤出”我们感兴趣、对我们有用的信息。

对一张图片,进行卷积操作,可以得到很多种神奇的效果。图5来自维基百科,最上面是卷积核是一个单位矩阵,使用单位矩阵对原图进行卷积操作,得到的输出与原图一样;接下来的几个卷积核可以检测到物体边缘,或者进行锐化和模糊。(感叹:卷积好像“美颜”滤镜啊)

在这里插入图片描述

经过多年的研究,人们已经能够设计出不同的核矩阵,对图片进行转换,以达到不同的效果。不过,在深度学习出现之前,卷积核是人工设计的,当然需要消耗大量的时间和精力。

感谢梯度下降和反向传播,深度学习的出现使得不再需要人工设计卷积核。在卷积神经网络里,卷积核在初始化的时候是一些随机值,经过了训练,核矩阵是可以被学习出来的。或者说,卷积核是一些参数,可以通过机器学习训练得到

下图展示了不同的5*5卷积核经过梯度下降法的训练,不断更新变化的过程:

请添加图片描述

单通道卷积

以单通道卷积为例,输入为(1,5,5),分别表示1个通道(可以理解为 input 只有一个特征图),宽为5,高为5。假设一个卷积核大小为3x3,padding=0,stride=1。

卷积过程(对应位置相乘之后再求和)如下:
在这里插入图片描述

卷积内核不断的在图像上进行遍历,最后得到3x3的卷积结果,结果如下:
在这里插入图片描述

多通道卷积(1个卷积核)

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

  • 因为要对每一个通道的像素值进行卷积运算,所以每一个卷积核的通道数量必须要与输入通道数量保持一致,这里都是3通道;
  • 因为是一张图像的不同通道,所以不同通道的内核的大小必须一致,这里都是3x3;
  • 3个3x3 内核分别对应图像的3个通道,但是不同通道上的内核的参数并不相同。
  • 每一个通道的像素值与对应的卷积核通道的数值(即内核)进行卷积,因此每一个通道会对应一个输出卷积结果,三个卷积结果对应位置累加求和,得到最终的卷积结果。
  • 最后得到的卷积结果,即输出的特征图 faturemap 是一个通道,因为卷积核只有1个。(这里不理解先继续往下看)
  • 可以这么理解:最终得到的卷积结果是原始图像各个通道上的综合信息结果。实际操作中会添加多个卷积核,因为一个卷积核无法提取训练所满足的特征。

在这里插入图片描述

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

在这里插入图片描述

多通道卷积(多个卷积核)

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

在这里插入图片描述

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

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

在这里插入图片描述
备注:上面的feature map的颜色,只是为了表示不同的卷积核对应的输出通道结果,不是表示对应的输出颜色。

然后将每个卷积核对应的输出通道结果(feature map)进行拼接,图中共有m个卷积核,则输出大小变为(m * w’ * h’),其中w’、h’表示卷积后的通道尺寸,原始输入大小为(n * w * h)。

总结

  • 卷积核通道个数 = 输入通道个数
  • 卷积核的内核个数 = 卷积核通道个数,一个通道对应一个内核
  • 输出通道个数 = 卷积核个数
  1. 卷积核

权值:

卷积核的值就是待学习的权重参数。

网络训练时,输出的结果会和数据集标签做损失计算,然后把计算得到的损失反向梯度下降去更新卷积核里的每一个参数。所以卷积核里面的参数最终是训练得到的

偏置:

每一个 滤波器 都包括一个偏置参数(bias)。这个偏置参数是该 滤波器 中所有 内核 共享的。最终的卷积结果需要在加上该偏置值。

滤波器与内核的关系:

  • 内核(kernel)是一个二维矩阵,长*宽;
  • 滤波器(filter)也叫卷积核,过滤器。是一个三维立方体,长× 宽 × 深度, 其中深度便是由 多少张内核构成,与输入层的深度一致。

两者之间的关系:可以说 kernel 是 filter 的基本元素, 多张 kernel 组成一个 filter。
详见:

激活:

卷积与偏置加和后的值,还需要再经过激活函数(比如 ReLU)才得到最终特征图上的值,图像一般都选ReLU作为激活函数,因为大于1的时候趋向无穷大,这样反向计算损失的时候不会出现梯度消失的风险。

  1. out_channels

out_channels 表示卷积层中卷积核的数量,也就是提取特征的数量

  • 一个卷积核可以提取一种特定的特征,比如边缘、角落等。

  • 当我们需要从输入数据中提取多种不同的特征时,就需要使用多个卷积核,每个卷积核都可以提取一种不同的特征。

  • out_channels 的数量就是卷积核的数量,即每个卷积核各自生成一个输出特征图,这些特征图汇总起来,就是最终的输出特征图

输出通道数 out_channels 的值 可以根据具体的任务需求和模型设计来确定。

  • 一般来说,out_channels 的数量比较大时,能够提取更多的特征信息,让模型拥有更强的表达能力,但是会增加参数量和计算量,从而降低模型的运行效率;
  • 相反,当输出通道数比较小时,计算速度会比较快,但是可能会导致模型容量不足,无法很好地学习和表达输入数据。

实际中,我们可以通过调整输出通道数,不断尝试和调整以找到一个合适的输出通道数。在深度卷积神经网络中,通常会随着网络深度的增加,逐渐增加输出通道数,以增强网络的特征提取能力。在训练过程中,通过交叉验证等方法来确定最优的超参数(包括输出通道数),从而得到一个最佳的模型。

扩展 图像处理中的卷积核

原图像:

在这里插入图片描述

恒等(Identity)

identity 恒等卷积核如下所示,
在这里插入图片描述

在 identity 卷积核中,只有中心位置 [2, 2] 位置处的权重为 1,其余均为 0,所以在进行卷积运算加权后时,像素只与自己本身位置进行了运算,最后返回的还是原像素的值,所以图像处理后是不变的。

边缘检测(Edge detection)

edge detction(边缘检测)对图像识别中的特征提取是非常有作用的,边缘检测卷积核都有一个共同点,就是能够突出图片矩阵中变化剧烈的位置。矩阵如下所示,三种边缘检测核的效果是越来越明显,主要原因就是加强了卷积核中 [2, 2] 位置处与周围元素的区别,图片中变化剧烈位置的在加权后,数值大的更大,数值小的更小,形成了边缘检测效果。

在这里插入图片描述
比对三个核:

  • 第一个核中的权重左上往右下都是 1、0、1,而右上往左下是-1、0、-1,在进行卷积运算时,对角方向的边缘更容易识别出来;
  • 第二个核中,权重从左往右是 1、-4、1,从上往下也是 1、-4、1,所以水平和垂直方向的边缘更容易识别出来;
  • 第三个核中权重水平垂直和对角都是-1、8、-1,所以水平和倾斜的边缘都容易识别。

锐化(Sharpen)

锐化的本质还是利用的边缘检测的原理,放大 [2, 2] 位置与周围元素的权重的区别。与边缘检测权重和为 0 相比,锐化卷积核中所有权重加起来后的值为 1。当权重和大于 1 时,会整体使图片变亮,小于 1 会变暗,等于 1 就会保留原始亮度,所以锐化卷积核保留了原始图形的亮度,而上述的三个边缘检测核使图像变暗。
在这里插入图片描述

盒模糊(Box blur)

在盒模糊卷积核中,所有位置的权重均为 1/9,所以 [2, 2] 位置处的元素值会以一个相同权重与周围变得更相似,达到均匀模糊的效果。
在这里插入图片描述

高斯模糊(Gaussian blur)

高斯模糊卷积核依赖的是高斯函数,所以卷积核的值是围绕着中心点分布的,离中心点越近,贡献也就越大,所以权重值就越高,二维区域高斯曲线图如下:
在这里插入图片描述
首先列出一个 3×3 的高斯模糊卷积核,中心点权重为 4,离得最近的上下左右权重都是 2,稍远一点的对角位置贡献的权重都是 1,最后除以权重和 16,矩阵和效果如下所示:
在这里插入图片描述
可以发现,因为权重更加聚焦到中心点位置,高斯模糊的效果相比盒模糊要更清晰一些。

再列出 5×5 的高斯模糊卷积核,和 3×3 类似,以中心点画圆,离圆心越远权重越小,最后除以权重和 256,矩阵和效果图如下:

在这里插入图片描述
与 3×3 的高斯模糊对比,由于距离中心点更远的位置也贡献了权重,所以 5×5 要更模糊一些。

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯水果茶!

谢谢你的水果茶啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值