在学习机器学习和图像处理的过程中,经常会遇到卷积这个概念。我每次遇到这个概念都有点似懂非懂的样子。有时候清楚它的直观解释,但又搞不清公式中是如何体现的。究其原因,还是我没有完全搞懂这个概念。 维基百科上有一个动态图来演示这个概念,但对于我来说还是有些复杂。于是自己在网上找了很多文章来研究,终于有了比较直观的印象,这里就趁热把我理解的解释一下,作为总结。

一、一维卷积

1.1 数学定义

维基百科上,卷积的形式化定义如下:

1.2 直观解释

先来分析一下这个公式:

  1. f(x)∗g(x) 表示 f(x) 和 g(x) 的卷积,注意此处自变量为 x;
  2. 它是对 (−∞,∞) 区间上对 τ 求积分;
  3. 积分对象为两个函数的乘积:f(τ) 和 g(x−τ)。
  4. 等式右边只有 g(x−τ) 提到了 x,其他部分都在关注 τ

这样一个公式恐怕还是难以理解,接下来将通过一个例子来进行解释。

1.3 例子

试想小明有一段时间每天都要去输液,输的药会在身体里残留直至失效,药效随着时间是不断衰落的。 这里为简便起见,假设药效 4 天就失效,而且药效持续函数是离散的。如下图所示:

图中,横坐标为天数,纵坐标为药效。输液当天(day=0)药效为 100%,第二天减弱为 80%,第三天减弱为 40%,第四天减弱为 0。
现在先定义一些符号:
记天数为 t,每天输液的药量为 m(t), 药效函数为 eff(t),小明身上残留的药效为 rest(t)
其中药效函数:

下面观察一下小明从第一天起,连续三天输液后身上所留下的药效(假设每天药量固定为10)。

第一天,小明去医院输完液后,药效为 10(rest(t)=m(t)⋅eff(0))。

第二天,小明去医院准备输液
输液前,他身上带着前一天的药效,此时已经衰减为 10⋅ 80%=8,即 m(t−1)⋅eff(1)。
输液后,他身上携带的药效为:8 + 10 = 18(rest(t)=m(t−1)⋅eff(1)+m(t)⋅eff(0))

第三天,小明去医院准备输液
输液前,他身上带着前两天的药效,第一天的此时已衰减为 10⋅ 40%=4(m(t−2)⋅eff(2)),第二天的此时衰减为 10⋅ 80%=8(m(t−1)⋅eff(1))。
输液后,他身上携带的药效为:4 + 8 + 10 = 22(rest(t)=m(t−2)⋅eff(2)+m(t−1)⋅eff(1)+m(t)⋅eff(0))。

1.4 分析

从上面的分析我们可以得到,小明第 t 天身上残留的药效 rest(t)=∑ni=1m(t−i)eff(i),其中 n 为药效有效的最大天数。 我们不难想象,但药效函数 eff(t) 为连续时,上式中的求和就应改为积分;而当药效能无限期有效时,上式中 n 就为 ∞。 无限期有效的药效函数,所对应的 rest(t)=∫∞−∞m(t−τ)eff(τ)dτ(本例中严格来说应该是 ∫∞0 ,这里推广到了 (−∞,∞))。推导到这里,基本就是维基百科上卷积的定义了。

1.5 总结

我之前对卷积概念的困惑主要是因为对公式 1 的那个 τ 的意义理解错了,总以为 τ 是随着坐标轴变化的量。 事实上,在上面举的例子中,τ 是作为沿着纵坐标遍历的量:它的作用是对“纵向”上,历次函数 eff(t) 在当前点(t)残余量(rest(t))的求和。积分也是对纵向上的积分,而非横向上沿自变量的积分。

横坐标变化的量始终为 t,而且在卷积中并没有明显体现出 t 的变化。

最后重新回顾一下上面的整个过程:比较三天以来的示意图可以发现,如果我们以“当天”而不是第 t 天为参考的话,就会看到 eff(t) 随着时间是在向左平移(深蓝的线表示当天,前几天的线都在其左边),然后各天衰落后的药量残余等于 eff(t) 值乘上初始的药量值,最后将各天的药量残余求个和。整个过程的核心就是“(反转),移动,乘积,求和”,这里面“反转”的概念也好理解,就是本来 eff(t) 是“朝着右边”走的函数,t=0,t=1,⋯,eff(t) 是形容t 天后的药量的,然而实际例子中我们是以当天为参考系,我们是在“朝着左边”看的,因而要“反转”。我认为这个“反转”是一个很自然的过程,不算是整个卷积的核心。 此外,在计算机领域,至少我接触到的图像处理、机器学习方面用到的卷积,其卷积核(就是例子中不断平移的函数 eff(t))一般是对称的,所以这个反转的概念也不是那么必要。

二、二维卷积

2.1 数学定义


二维卷积在图像处理中会经常遇到,图像处理中用到的大多是二维卷积的离散形式:

2.2 图像处理中的二维卷积

二维卷积就是一维卷积的扩展,原理差不多。核心还是(反转),移动,乘积,求和。这里二维的反转就是将卷积核沿反对角线翻转,比如:

之后,卷积核在二维平面上平移,并且卷积核的每个元素与被卷积图像对应位置相乘,再求和。通过卷积核的不断移动,我们就有了一个新的图像,这个图像完全由卷积核在各个位置时的乘积求和的结果组成。

举一个最简单的均值滤波的例子:

当卷积核运动到图像右下角处(卷积中心和图像对应图像第 4 行第 4 列)时,它和图像卷积的结果如下图所示:

可以看出,二维卷积在图像中的效果就是:对图像的每个像素的邻域(邻域大小就是核的大小)加权求和得到该像素点的输出值。滤波器核在这里是作为一个“权重表”来使用的。

本文作者: Mengqi
本文链接: http://mengqi92.github.io/2015/10/06/convolution/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处!

一维卷积的意义和二维卷积(图像处理)的简单理解相关推荐

  1. 卷积可视化操作(二维卷积)

    引言:首先我们应该知道什么是卷积?干什么的?如何在自己的图像数据集上进行卷积操作?本篇文章就是解决这个为的. 1.首先谈一下什么是卷积? 答:(本人小学生六年级,哈哈)首先我们看一下这位博客的图: 是 ...

  2. python中的一维卷积conv1d和二维卷积conv2d

    先来看二维卷积conv2d conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC& ...

  3. Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

    Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  4. 一维卷积(1D-CNN)、二维卷积(2D-CNN)、三维卷积(3D-CNN)

    一维卷积神经网络(1D-CNN) 一维卷积常用在序列模型.自然语言处理领域: 假设输入数据维度为8,filter维度为5: 不加padding时,输出维度为4,如果filter的数量为16,那么输出数 ...

  5. 卷积神经网络之一维卷积、二维卷积、三维卷积

    1. 二维卷积 图中的输入的数据维度为14×1414×14,过滤器大小为5×55×5,二者做卷积,输出的数据维度为10×1010×10(14−5+1=1014−5+1=10).如果你对卷积维度的计算不 ...

  6. python图像卷积_图像处理——卷积原理、二维卷积python实现

    一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) =  - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果. 举例如下: 假设g(i)是一个一维的函数,而且代 ...

  7. 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》

    论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...

  8. 一维和二维卷积和池化

    一维卷积的卷积核是二维的,二维卷积的卷积核是三维的(因为卷积要考虑深度,即通道数) 例如输入数据为(128,32,28,28),128为batch size,32为channel,28和28是high ...

  9. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积

    [OpenCV 例程200篇]54. OpenCV 实现图像二维卷积 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

最新文章

  1. Java--对象与类(三)
  2. spring计划任务
  3. Linux共享内存编程实例
  4. PNG 图片压缩原理的两个关键点!
  5. Bugku 杂项(三)
  6. nginx转发websocket
  7. 异常规范之阿里巴巴开发手册中的异常规范讲解
  8. 【[SHOI2015]超能粒子炮·改】
  9. 唐人街神探:用数学方法确定罪犯位置
  10. 应用交付脚本工具在HTTP服务中的应用
  11. Ubuntu下安装Samba服务器
  12. FreeMarker 语法教程
  13. mid php,mid是什么格式的文件
  14. 学习一下物联网协议 wifi zigbee 蓝牙等等----从wifi就开始 wifi和wifi协议 关于wifi协议本身我们需要了解那些东西?
  15. imagej macro language tutorial(ImageJ 宏语言教程)
  16. python自主学习——Unicode
  17. Selenium自动化测试:如何使用cookie跳过验证码登录
  18. 【中等】航班预定系统
  19. (震撼实拍)垃圾场里发奋学习的兄妹俩
  20. UVa 10934 Dropping water balloons:dp(递推)

热门文章

  1. 2020新款真无线蓝牙耳机盘点,双11高性价比十款蓝牙耳机推荐
  2. 功劳是老板的、钱财是子女的、身体是自己的...
  3. 图像的峰值信噪比(peak signal to noise ratio, PSNR)
  4. Java8 Stream API 详细使用指南
  5. linux 行首加特定字符_linux shell 用sed命令在文本的行尾或行首添加字符
  6. 缺少编解码器,错误代码0xc00d5212 WIN10中AVI格式文件无法播放
  7. adroid xpose 修改java方法实例_基于xposed 修改硬件信息(xposed框架使用)
  8. redis学习笔记(十一)AKF、CAP理论
  9. 什么是EOS智能合约
  10. java模拟实现操作系统进程调度中的多级反馈队列算法