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

  • 神经网络中的卷积操作
  • 卷积在图像领域的功能
  • 单通道卷积
  • 多通道卷积(1个卷积核)
  • 多通道卷积(多个卷积核)
  • 总结
  • 扩展 图像处理中的卷积核
    • 恒等(Identity)
    • 边缘检测(Edge detection)
    • 锐化(Sharpen)
    • 盒模糊(Box blur)
    • 高斯模糊(Gaussian blur)

写这篇博文是因为在写 卷积层(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 要更模糊一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203455.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP ABAP ALV Tree 的使用

在 SAP 业务系统中,大量地使用到了ALV Tree 对象,该对象在表格基础上对同类数据 进行归类,并对各分类能进行数据汇总,如图8-10 所示。 以航班表(SPFLI)为例: (1)按国家…

主流数据库类型总结

前言:随着互联网的高速发展,为了满足不同的应用场景,数据库的种类越来越多容易混淆,所以有必要在此总结一下。数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(Key-…

深度学习之十二(图像翻译AI算法--UNIT(Unified Neural Translation))

概念 UNIT(Unified Neural Translation)是一种用于图像翻译的 AI 模型。它是一种基于生成对抗网络(GAN)的框架,用于将图像从一个域转换到另一个域。在图像翻译中,这意味着将一个风格或内容的图像转换为另一个风格或内容的图像,而不改变图像的内容或语义。 UNIT 的核心…

微服务--06--Sentinel 限流、熔断

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.微服务保护雪崩问题服务保护方案1.1.请求限流1.2.线程隔离1.3.服务熔断 2.Sentinel2.1.介绍和安装官方网站:[https://sentinelguard.io/zh-cn/](https…

Windows安装EMQX(搭建MQTT服务)

1、EMQX介绍 EMQ X是云原生分布式物联网接入平台。 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是…

自学MySql(一)

1.安装下载 下载网址 2、将mysql的bin目录添加到环境变量(可选) 3、使用一下命令测试

最新消息:滴滴 P0 事故原因,原因出来了

最新消息滴滴P0故障原因,是由于k8s集群升级导致的,后面又进行版本回退,由于现在大型互联网公司基本都是基于K8s进行部署的,如果K8s集群一出问题,上面运行的业务Pod和运维系统全部都得宕机,导致没法回滚。 …

深入理解网络阻塞 I/O:BIO

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏&…

源码安装mysql

使用源码安装mysql,这里选择的版本是mysql5.7.35 ,系统是Centos7.6 官网下载地址:https://downloads.mysql.com/archives/community/ 下载源码压缩包 [rootlocalhost ~]# cd /opt[rootlocalhost opt]# wget https://downloads.mysql.com/archives/get/…

一觉醒来!Keras 3.0史诗级更新,大一统深度学习三大后端框架【Tensorflow/PyTorch/Jax】

不知道大家入门上手机器学习项目是首先入坑的哪个深度学习框架,对于我来说,最先看到的听到的就是Tensorflow了,但是实际上手做项目开发的时候却发现了一个很重要的问题,不容易上手,基于原生的tf框架来直接开发模总是有…

ssh-keygen(centos)

A—免密登陆—>B (1)A 机器,通过命令”ssh-keygen -t rsa“, 生成id_rsa,id_rsa.pub authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥 id_rsa : 生成的私钥文件 id_rsa.pub : 生成的公钥文件 know_hosts : 已知的主机公钥…

javaagent字节码增强浅尝

概述 javaagent 技术广泛应用于对代码的增强,比如统计方法执行时间、GC 信息打印、分布式链路跟踪等;实现方式包括 javassist 和 bytebuddy,bytebuddy 是对 javassist 的改进;类似于 spring 中的 AOP; Instrumentati…

SpringBoot application.yml配置文件写法

1,基本介绍 (1)YAML 是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties。 (2)在创建一个 SpringBoot 项目时,引入的 spri…

231129 刷题日报

本周值班第3天,今天终于收到二面电话,一度以为挂了。。加油卷! 今天尊重下艾宾浩斯遗忘曲线,重复下前几天看的01背包,子集背包,完全背包。 416. 分割等和子集 518. 零钱兑换 II 38min做了一道新题&#…

OSI七层参考模型及其协议和各层设备

OSI网络模型是开放系统互联(Open Systems Interconnection)参考模型,它是由国际标准化组织(ISO)制定的。这个模型将网络系统划分为七个层次,OSI网络模型的七层是:物理层、数据链路层、网络层、传…

【网络奇遇之旅】:那年我与计算机网络的初相遇

🎥 屿小夏 : 个人主页 🔥个人专栏 : 计算机网络 🌄 莫道桑榆晚,为霞尚满天! 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…

MyBatis教程之简介(一)

1、MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 iBatis一词来源于“inter…

android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战

背景 hi,粉丝朋友们: 大家都知道马哥课程以实战为特色,这里的实战就是最贴近公司里面开发的实战项目。这些实战主要来自哪呢? 1、以前在公司的工作积累,自己在公司做过什么,这部分比较好毕竟都是搞过的 2…

常见的类 nn.Conv2d,nn.BatchNorm2D,nn.AdaptiveAvgPool2d

nn.Conv2d理论部分代码部分PaddlePaddle 版torch 版分析 nn.BatchNorm2D理论部分代码部分PaddlePaddle 版Torch 版分析PaddlePaddle 版Torch 版 nn.AdaptiveAvgPool2d理论部分代码部分PaddlePaddle 版分析Torch 版 可以到适配的飞桨公开项目更好的理解:练习 PyTorch…

浅谈安科瑞ASJ继电器在菲律宾矿厂的应用

摘要:对电气线路进行接地故障保护,方式接地故障电流引起的设备和电气火灾事故越来越成为日常所需。针对用户侧主要的用能节点,设计安装剩余电流继电器,实时监控各用能回路的剩余电流状态。通过实时监控用能以及相关电力参数、提高…