当前位置: 首页 > article >正文

Convolution 卷积

卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;同时,“卷”还有滑动的意味在里面(吸取了网友李文清的建议)。如果把卷积翻译为“褶积”,那么这个“褶”字就只有翻转的含义了。

卷积的“积”,指的是积分(连续)/加权求和(离散)。

所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。是一种组合数组或函数(而不是数字)的方法

卷积计算过程中相乘又相加的计算属性可以让我们用矩阵表示。未对齐的元素用0补齐。

模型解释:

从案例入手:抛两个骰子,计算两个骰子的各个点数和的出现的概率。

将结果表示在表格中可以发现相同点数和的组合都排在同一对角线上,所以只需要计算对角线上有多少个元素即可就能告诉出现某个点数和的概率

现在思考另一种方式展示这个问题,把两枚骰子的所有可能分别放到一行,然后把第二行翻转,这样所有点数和为7的组合就会纵向对齐(这里很好的解释了卷积的式子里为什么函数g里面是t-x)

这个案例中隐含假设就没每个骰子向上的概率是相同的,可如果不同呢?就需要分别计算每组出现的概率再相加

两个数组的卷积将A和B数组的值交汇,两组数的卷积生成了新的这组数,新的数列包含11个值,每个值都是两数组中若干数对之积的加和

另一种思考卷积的方式是列一个表格,计算各个组合的乘积,然后沿着各个对角线相加,就把两个数组混合起来了,得到了一个包含11种数的数组

总结:卷积的结果是一个列表,它的第n项定义为把下标ij之和为n的所有元素的乘积累加起来

应用:

滑动均值滤波,模糊

求和得出概率分布

每次迭代相当于将数据中的每个元素都乘以1/5,然后将它们加起来 - 求这个小窗口数据的平均值,总的来说,这个过程给了你一个原数据的平滑版本(滑动均值滤波)

可以用其他和为1的数组进行滑动平均,在这个例子中滑动平均会给中间的值更大的权重

如果你在二维上进行类似的操作,就能得到一个把图片变模糊的方法卧槽这不是抗锯齿的算法的模糊化。用一个3×3的网格沿着原图像移动

这些数值乘以它底下对应的像素值,当然在计算机科学中,我们把颜色当作三维向量。

把每个向量都乘以1/9然后求和就得到每个颜色通道的平均值,就得到每个颜色通道的平均值。对每个像素都如此计算,相当于每个像素都混杂了一部分到相邻的像素,这就得到了一个比原图更模糊的版本,用术语来说:右图就是原图和旋转180°小网络的卷积(本例中是否旋转无区别)

运用不同网络能得到不同效果的模糊,比如高斯模糊(模拟镜头失焦)

这些值都从一个钟形曲线(高斯分布 / 正态分布)中采样得来,将更多的权重赋予中间的像素

边界检测

黑的向量是0向量,白的向量是1,将图中像素与网络卷积的结果为负数,负数填充为红色,正数填充为蓝色。也可知当所有像素颜色相同时,结果为0。这个过程是在检测从左到右像素是否有变化,所以它可判别出图像中的所有竖向边界

用同样的逻辑,如果我们旋转这个网络,用来检测从上到下像素是个否变化就能判断横向边界

这个小网络称之为“核” Kernal

选择不同的核就可以产生不同的图像处理效果,不只是模糊化边缘检测,图像的锐化也可以,卷积神经网络,他的思路就是用数据算出应该选取什么样的核这取决于想用神经网络来检测的目标

纯数学上的卷积产生的数组总是比两个初始数组更长,在计算机中需要刻意裁掉一些输出值。且计算中fftconvolve 快速傅里叶卷积会让输出过程加快很多(其实巧妙的点就是每个点前一半的结果和后一半一样,省了)

在两个多项式相乘时,之前提到的表格计算组合乘积,再沿着每条对角线求和,就对应着每一个输出结果。此时沿着对角线求和就相当于合并同类项,扩展多项式然后合并同类项其实和卷积的过程是一样的

快速卷积算法 Fast Convolution algorithm

使用卷积的地方都能看到FFT

一句话记住fft本质:单位圆上的等角复根可以通过自乘来旋转到下个解

卷积定理:时域的卷积=频域的乘积

将时间复杂度降到nlogn是程序员的基本素质        

当需要将两个数组进行卷积时,将他们视为两个多项式的系数(点表示),N阶多项式就采样至少N+1个点,对这些样本逐点相乘,然后求解并恢复出系数。

应用FFT,我们现在采样的点替换为特定的复数来求解,这些复数便是单位圆上均匀分布的单位根。找到一个取幂时输出总在单位圆上循环的数就行,于是我们在计算不同项时会出现很多冗余

(不必计算就能知道值的项),从而降低计算的时间复杂度。这个输出集合被称为系数的离散傅里叶变换。多亏这些冗余项,我们才能快速地把系数转换到这些输出点,原来需要复杂度为O(n^2)的操作现在只需要O(NlogN),输入数组越大这个方法的优势就越明显。

你也可以利用IFFT将输出对应成系数

两函数的傅里叶变换的乘积等于他们乘积后的傅里叶变换


Reference

(4 条消息) 如何通俗易懂地解释卷积? - 知乎

为什么卷积的底层是傅立叶变换?_哔哩哔哩_bilibili

【官方双语】那么……什么是卷积?_哔哩哔哩_bilibili


http://www.kler.cn/a/373256.html

相关文章:

  • Docker Compose一键部署Spring Boot + Vue项目
  • 如何在Linux系统中使用Zabbix进行监控
  • 数据库 示例解析
  • 奔走相告! ClickHouse 全新构建了强大的 JSON 数据类型
  • 双11猫咪好物盛典开启,线上抢购不停 购物清单新鲜出炉
  • 部署Leanote 蚂蚁笔记
  • QT 实现自定义动态选择指示器
  • git的学习之远程进行操作
  • AIGC与教育行业的邂逅--其在数学领域的应用与实现
  • 【代码随想录Day55】图论Part07
  • 后台管理系统的通用权限解决方案(二)SpringBoot整合Swagger Springfox实现接口日志文档
  • Android系统架构
  • 新品上市|RNA提取系列上市了!
  • 和鲸科技 CEO 范向伟受邀揭牌启动南京大学 2024 级大学生人工智能素养大赛
  • 数据库真的是能够决定架构的
  • 论文提交步骤 | 2024年第五届MathorCup大数据竞赛
  • 阿里云物联网的通信方式
  • C++第九讲:模板进阶
  • 第三方软件检测公司分享:软件性能测试有哪些好用的测试工具?
  • 机器人技术基础(4章逆运动解算和雅克比矩阵)
  • wsl 使用docker 部署oracle11g数据库
  • IDEA集成JProfiler
  • 【已解决,含泪总结】非root权限在服务器Ubuntu18.04上配置python和torch环境,代码最终成功训练(二)
  • SpringBoot利用InitializingBean实现策略模式
  • 一:Linux学习笔记(第一阶段)-- 安装软件 vmware workstation 虚拟机软件 centos系统
  • XQT_UI 组件|01|颜色