深度解析卷积:从原理到应用(卷积到底是什么)
itomcoil 2025-07-08 19:24 4 浏览
一、卷积的基本概念
卷积是一种在数学领域尤其是分析数学中占据重要地位的运算方式。它通过两个函数 和 来生成第三个函数。设 和 是 上的两个可积函数,卷积的积分表达式为: 。在离散情况下,卷积定义为 。
从实际应用的角度来看,卷积在多个领域有着广泛的作用。例如在统计学中,加权的滑动平均就是一种卷积;在概率论中,两个统计独立变量 与 的和的概率密度函数是 与 的概率密度函数的卷积;在声学中,回声可以用源声与一个反映各种反射效应的函数的卷积表示;在电子工程与信号处理中,任一个线性系统的输出都可以通过将输入信号与系统函数(系统的冲激响应)做卷积获得;在物理学中,任何一个线性系统(符合叠加原理)都存在卷积。
卷积具有一些重要的性质,如交换律、结合律、分配律和数乘结合律等。其中,交换律即 。卷积定理指出,函数卷积的傅里叶变换是函数傅里叶变换的乘积,这一定理对多种傅里叶变换的变体同样成立,利用卷积定理可以简化卷积的运算量。对于长度为 的序列,按照卷积的定义进行计算,需要做 组对位乘法,而利用傅里叶变换将序列变换到频域上后,只需要一组对位乘法,利用傅里叶变换的快速算法之后,总的计算复杂度大大降低。
二、卷积的计算过程
(一)单通道卷积
以单通道卷积为例,假设输入为(1,5,5),即 1 个通道,宽和高均为 5。卷积核大小为 3x3,padding=0,stride=1。在这个过程中,相应的卷积核不断在图像上进行遍历。具体来说,卷积核从输入图像的左上角开始,每次移动一个像素的位置,对当前窗口内的像素值与卷积核对应位置的值进行乘法运算,然后将这些乘积相加,得到一个输出像素值。这样不断重复这个过程,直到遍历完整个输入图像,最后得到一个 3x3 的卷积结果。
(二)多通道卷积
- 多通道卷积 1:以彩色图像为例,彩色图像包含三个通道,分别表示 RGB 三原色的像素值,输入为(3,5,5),即 3 个通道,每个通道的宽和高均为 5。假设卷积核只有 1 个,卷积核通道为 3,每个通道的卷积核大小仍为 3x3,padding=0,stride=1。在这个过程中,每一个通道的像素值与对应的卷积核通道的数值进行卷积,因此每一个通道会对应一个输出卷积结果。然后,将三个卷积结果对应位置累加求和,得到最终的卷积结果。输出结果是原始图像各个通道综合信息的原因在于,每个通道的卷积结果反映了该通道的特征信息,而最终的累加求和则是将三个通道的特征信息进行融合,得到了原始图像各个通道的综合信息。
- 多通道卷积 2:如果要实现卷积后也输出多通道,可以增加卷积核的数量。原理在于,每一个卷积核会产生一个通道的输出结果。例如,假设有 m 个卷积核,那么输出的大小就变为(mw’h’),其中 w’、h’表示卷积后的通道尺寸,原始输入大小为(nwh)。整个卷积层的尺寸为(mnk1*k2),其中 m 表示卷积核的数量,n 表示通道数量,k1 表示每一个卷积核通道的宽,k2 表示每一个卷积核通道的高。具体过程是,每个卷积核对应的输出通道结果(feature map)进行拼接,从而实现多通道输出。例如,有三个彩色图像通道,若有两个卷积核,第一个卷积核与三个通道进行卷积运算后得到一个输出通道结果,第二个卷积核同样进行运算得到另一个输出通道结果,最后将这两个输出通道结果拼接起来,就实现了两通道的输出。
三、卷积的关键因素
(一)填充
填充(Padding)是卷积过程中的一个重要概念。在卷积操作中,填充是指在输入图像的周围添加额外的像素值,通常是零值。填充的作用主要有以下几点:
- 防止图像边缘信息损失:在进行卷积操作时,卷积核一般是一个小窗口,在输入图像上滑动。如果没有填充,每次卷积核移动计算后,都会导致卷积的输出尺寸变小,最终可能使得输入图像的边缘信息丢失。而通过填充,可以在输入图像的周围添加额外的像素,使得卷积核在边缘处也能进行完整的计算,从而保留输入图像的边缘特征。
- 增加输出的高和宽:填充可以增加输出的高和宽,使得输出尺寸更加接近输入尺寸。例如,对于一个尺寸为 的输入图像,使用尺寸为 的卷积核进行卷积操作,如果不进行填充,输出尺寸为 和 ,其中 为步幅。如果在输入图像周围添加 层填充,输出尺寸变为 和 。可以看出,填充可以增加输出的高和宽。
- 允许网络从输入数据的边缘学习更多特征信息:零填充是在输入数据的周围添加一圈零值,目的是保持原始数据的分布不变,并允许网络从输入数据的边缘学习更多的特征信息。在卷积神经网络中,常用零填充来控制卷积操作的输出尺寸,以保持与网络输入的要求相匹配。通过零填充,我们可以在卷积过程中保留输入数据的边缘特征,并且能够更好地处理边缘像素。这种技术在图像处理中特别有用,因为它可以防止边缘信息在卷积过程中被丢失,从而提高网络的性能和准确度。
(二)步幅
步幅(Stride)是卷积操作中的另一个关键因素。步幅是指卷积核在输入数组上滑动的行数和列数。例如,步幅为 表示卷积核每次在输入数组上滑动一个像素的位置,而步幅为 表示卷积核每次在输入数组上滑动两个像素的位置。步幅的作用主要有以下几点:
- 影响输出形状:步幅可以改变卷积窗口在输入数组上的滑动行数和列数,从而影响输出形状。例如,对于一个尺寸为 的输入图像,使用尺寸为 的卷积核进行卷积操作,如果步幅为 ,输出尺寸为 和 。可以看出,步幅越大,输出尺寸越小。
- 减少计算量:较大的步幅可以减少卷积操作的计算量,因为卷积核在输入数组上滑动的次数减少了。这对于处理大规模图像数据非常有用,可以提高计算效率。
- 改变感受野大小:步幅还可以改变卷积操作的感受野大小。感受野是指卷积核在输入数组上看到的区域大小。较大的步幅会导致感受野减小,而较小的步幅会导致感受野增加。这可以影响网络对不同特征的感知能力,从而影响网络的性能。
四、卷积的实际应用
(一)图像降噪平滑操作中的卷积应用
在图像处理中,卷积有着广泛的应用,特别是在图像降噪和平滑操作方面。其中,均值卷积核和高斯滤波是两种常见的方法。
1. 均值卷积核
- 原理:均值滤波是最简单的一种滤波操作,用一片图像区域的各个像素的均值来代替原图像中的各个像素值。均值滤波的卷积核中每个像素的权重相等,一般是一个全为 1 的矩阵。对于 RGB 图像,需要对每一个通道都进行求均值操作。例如,对于一个 3x3 的均值卷积核,其作用过程是将卷积核在图像上滑动,将核的锚点放在特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合。然后对卷积核内的所有像素值求平均,将所得结果放到与锚点对应的像素上。对图像所有像素重复上述过程。
- 效果:优点是操作简单,效率高,易于实现。但缺点也很明显,不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
2. 高斯滤波
- 原理:高斯滤波是一种线性平滑滤波,广泛应用于图像滤波领域,即图像去噪。它对于抑制服从正态分布的噪声非常有效,正态分布的噪声也就是高斯噪声。高斯滤波是将所有信号进行加权平均的过程,信号中的每个值,均由其本身和邻域内的其他信号值经过加权平均后得到。具体操作是用一个模板掩模对信号中的每个值进行扫描,用模板确定邻域内信号的加权平均值来替换模板中心值。在图像处理中,用一个用户指定的模板(或称卷积、掩膜)去扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。二维的高斯函数为: ,其中 为点坐标, 是标准差。要得到一个高斯滤波器的模板,可以对高斯函数进行离散化,得到的高斯函数值作为模板的系数。例如要产生一个 的高斯滤波器模板,以模板的中心位置为坐标原点进行取样,模板在各个位置的坐标根据高斯函数计算系数。
- 效果:高斯滤波器相比于均值滤波器对图像的模糊程度较小。因为高斯滤波器的模板系数随着距离模板中心的增大而系数减小,而均值滤波器的模板系数都是相同的为 1。高斯滤波能够在平滑物体表面的同时,更好地保持图像的边缘和轮廓。通常情况下,为了尽量保留图像原有的信息,卷积核中心的权值应该最高,越远离核中心的权值越小。例如,对于一个 5x5 的高斯滤波模板,中间点的权值最大,向四周逐渐减小。一般来说,高斯滤波的标准差 决定了模板的系数分布。如果 较小,生成的模板的中心系数较大,而周围的系数较小,对图像的平滑效果就不是很明显;反之, 较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。
相关推荐
- 信创系统下的Anaconda离线配置全攻略
-
原文链接:「链接」Hello,大家好啊,今天给大家带来一篇信创操作系统上离线配置Anaconda的文章,欢迎大家分享点赞,点个在看和关注吧!在信创环境下使用Anaconda对Python进行包...
- 【Python】Mac中Anaconda安装与使用(2025)
-
一、anaconda介绍我是一个多年的Java工程师,之前也写过一些简单的Python程序,随着AI的发展,后续使用Python会越来越多,和Java一样,Python涉及环境配置...
- 在豆包的协助下,折腾了一天,电脑盲终于把Doccano安装好了
-
折腾了一天,终于把Doccano软件装好了。先是用Deepseek,提示词:给新手小白出一个在新电脑上安装doccano的教程新手小白安装Doccano终极教程无需编程基础,两种方法任选,全程避坑...
- 用Python开发日常小软件,让生活与工作更高效!附实例代码
-
引言:Python如何让生活更轻松?在数字化时代,编程早已不是程序员的专属技能。Python凭借其简洁易学的特点,成为普通人提升效率、解决日常问题的得力工具。无论是自动化重复任务、处理数据,还是开发个...
- 用python怎么做最简单的桌面计算器
-
有网友问,用python怎么做一个最简单的桌面计算器。如果只强调简单,在本机运行,不考虑安全性和容错等的话,你能想到的最简单的方案是什么呢?我觉得用tkinter加eval就够简单的。现在开整。首先创...
- 用python操作excel、word、pdf非常迅速方便,迅速教会你
-
你会用python操作excel、word、pdf吗?不会也没关系,这篇文章教会你~【文末领取】案例篇幅有限,给大家准备了电子版PDF获取方式:...
- 10 个每个初学者都应该知道的 Python 技巧
-
1.无需临时变量交换两个变量的值之前:a=5b=10temp=aa=bb=temp之后:a,b=5,10a,b=b,aprint(a,b)#输出:1051...
- SQL用了两年多,分享2个最常用的小技巧
-
导读:SQL是所有数据从业者必须打牢的基本功之一,扎实的SQL查询和适当的调优技巧是检验SQL能力的两大重要准则。个人曾经专门花费过好多时间用于提升SQL能力,期间也刷了大量的SQL题目,在这期间也...
- Python 高手的 15 个代码技巧,让你的编程效率翻倍
-
在Python编程的世界里,我们总能遇到一些代码写得更短、更快、更整洁的开发者。他们似乎掌握了一些不为人知的秘密。本文将揭示15个实用的Python技巧,这些技巧在初学者教程中鲜有提及,却...
- 30天学会Python编程:16. Python常用标准库使用教程
-
16.1collections模块16.1.1高级数据结构16.1.2示例fromcollectionsimportdefaultdict,Counter,deque#默认字典...
- 7 个小 Python 技巧(python技巧总结60)
-
1.使用_作为临时变量这一点很微小,但非常强大。有时候你需要一个循环或一个你实际上不会使用的值。比如:for_inrange(3):print("Hello")过去...
- 如何系统的学python?(如何系统的学剪辑)
-
我不喜欢一上来就推荐一堆参考资料的东西,那只会让初学者更迷茫。好比一个婴儿,你告诉他学会走路的方法有100种,他只会变的对走路毫无兴趣,他要的只是一种最有效的学会走路的办法,而不是100种。同样的,下...
- Python 静态方法、类方法与多态方法:特性解析与实战应用
-
在Python面向对象编程的重要概念,它们各自具备独特的特性和应用场景,为开发者提供了多样化的编程方式。静态方法不依赖实例状态,类方法以类为操作主体,多态方法则实现了不同类对象对同一消息的差异化响...
- 用 Python 库 PySimpleGUI 制作自动化办公小软件
-
Python在运维和办公自动化中扮演着重要的角色,PySimpleGUI是一款很棒的自动化辅助模块,让你更轻松的实现日常任务的自动化。1PySimpleGUI安装在命令行/终端输入:pipin...
- 一日多技:8个有趣的Python实用技巧
-
在这一小节中,我们将看到8个实用的python技巧,这些技巧使用比较高频且有用。列表的反向查找:我们可以使用reverse()函数让列表中的元素反向,它处理列表中存在的数字和字符串数据类型。下面我们直...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)