从问题出发深入理解“卷积”

news/2024/7/21 5:38:57 标签: 卷积神经网络, 图像处理

对卷积的理解

对卷积这个名词的理解:所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。

在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。

整体看来是这么个过程:

翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加.....

多次滑动得到的一系列叠加值,构成了卷积函数。

卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;

卷积的“积”,指的是滑动积分/加权求和。

卷积核心思想就是最末时间点的响应,是由初始时刻到当前时刻的激励在整段时间的顺序叠加造成的。即最初激励影响了最长时间,第二时刻激励影响了最长时间减一时刻的时间。依次类推。事实上总结来说,卷积就是考虑时变激励的时间累积影响

问题:

1. 为什么一维卷积要反转?

一维卷积要翻转,究其原因,是因为“时间的相对

站在现在时刻t,向左看,看到的是h(3),h(2),h(1),h(0),倒过来的实际上输入信号f(t)和系统响应函数g(t)中的t从一开始就不在同一个坐标系中,f(t)中的t是给定时间轴上的上的坐标,而g(t)中的t则是从信号输入后过了t时间这么久,也就是说它实际上就是△t,对于给定时刻T而言,在给定时间轴上的某一点t,其△t=T-t,所以我一直觉得g(t)这个写法是不便于理解的。表述为 输入信号f(t),系统响应函数g(△t) 更合适。

例子:信号分析

如下图所示,输入信号是 f(t) ,是随时间变化的。系统响应函数是 g(t) ,图中的响应函数是随时间指数下降的,它的物理意义是说:如果在 t=0 的时刻有一个输入,那么随着时间的流逝,这个输入将不断衰减。换言之,到了 t=T时刻,原来在 t=0 时刻的输入f(0)的值将衰减为f(0)g(T)。
在这里插入图片描述
显然,上面的对应关系看上去比较难看,是拧着的,所以,我们把g函数对折一下,变成了g(-t),这样就好看一些了。看到了吗?这就是为什么卷积要“卷”,要翻转的原因,这是从它的物理意义中给出的。
在这里插入图片描述

2. 卷积和相关

相关是信号与信号间的关系,参考如何通俗易懂地解释「协方差」与「相关系数」的概念?,衡量两个信号是正线性相关/负线性相关/无相关关系。
卷积是信号与系统间的关系,某时刻输入信号,系统的输出是什么。在一维时间序列信号情况下,系统的输出不仅取决于当前时刻的输入,还取决于之前时刻的输入,而这是因为系统对某时刻的响应h(n)是一个串会对”未来“产生影响。(仅限于1维时间序列)

3. 为什么传统二维卷积要翻转?

什么是二维卷积:

二维卷积就是一维卷积的扩展,原理差不多。核心还是(反转),移动,乘积,求和。这里二维的反转就是将卷积核沿反对角线翻转,比如
在这里插入图片描述
之后,卷积核在二维平面上平移,并且卷积核的每个元素与被卷积图像对应位置相乘,再求和。通过卷积核的不断移动,我们就有了一个新的图像,这个图像完全由卷积核在各个位置时的乘积求和的结果组成。

翻转的理由:

传统图像/信号处理中,二维卷积(比如对图像)也要翻转。
这个应该是对1中一维时间序列卷积的定义延续与统一。(参考了一些博文和看法,我认为其实不翻转也行的,因为如果不是时间序列,某个局部patch响应就不会”未来“产生影响)

4. 为什么深度学习卷积不翻转?

解释1:因为卷积核是from stratch学习到的,如果翻转是必须的,那么学习到的卷积核就应该已经是翻转过后的卷积核了(从语义的角度上说,就是机器已经计算了翻转这一步)
解释2:如3中我猜想的,图像(二维/三维)没有时间概念,所以没有类似1中信号与“系统”的概念,没有旧时刻输入对现在时刻输出的影响效应,其实是不需要卷积的。而深度学习借用了图像处理的空间“卷积”这个词,而图像处理的“卷积”本质上也是不用翻转的(相关),所以深度学习卷积不用翻转。所以,深度学习,用的应该是上面第2个问题中所说的“相关”这个概念。而这种隐含的“关系”也更合理。

5. 深度学习中常说的反卷积是卷积翻转吗?

深度学习中所谓的反卷积其实是转置卷积,也不是真正意义上的反卷积
那为什么不能叫反卷积

而反卷积的数学含义为,通过反卷积可以将通过卷积的输出信号,完全还原输入信号

而事实是,转置卷积只能还原shape大小,不能还原value.因为在卷积操作的时候已经丢失了原始数据
请添加图片描述

6. 卷积的定义和真实的应用?

卷积的定义是完全具备全局处理的能力的,但是在实际使用中,由于我们应用的局限,往往效果看上去是局部的。在图像处理的例子中表现得就非常明显:首先,任何实际的图像都是有限大小的,而我们的图像处理矩阵g只是3x3的矩阵,所以其实只考虑了在3个像素附近的图像的总体状态。试想一下,如果图像本身是无限大,处理矩阵也是无限大,卷积运算给出的任何一个像素点的处理效果,就是综合了空间中所有像素的累积计算结果。


http://www.niftyadmin.cn/n/1444545.html

相关文章

opencv cv2.THRESH_OTSU 二值化

原文地址:http://www.mamicode.com/info-detail-907204.html Otsu’s二值化 我们前面说到,cv2.threshold函数是有两个返回值的,前面一直用的第二个返回值,也就是阈值处理后的图像,那么第一个返回值(得到图…

php面试题汇总三(基础篇附答案)

问题 1. 如何访问会话变量(session)? A.通过$_GET B.通过$_POST C.通过$_REQUEST D.通过全局变量 E.以上都不对 2. 哪个函数能让服务器输出如下 header&#…

uva 11595 - Crossing Streets EXTREME(切割多边形)

题目链接&#xff1a;uva 11595 - Crossing Streets EXTREME 对初始平面进行切割&#xff0c;得到所有平面&#xff0c;然后处理出所有边&#xff0c;有公共边的两个平面之间可以到达&#xff0c;对于城市的权值可以加到点上&#xff0c;进出各加一次即可。 #include <cstdi…

opencv 垂直投影分割字符

原图&#xff1a; #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include <stdio.h> using namespace cv; using namespace std;vector<Mat> horizontalProjectionMat(Mat srcI…

【Opencv3学习笔记 1】OpenCV的安装配置部署详细步骤(window + vs2019)

什么是Opencv&#xff1f; OpenCV&#xff08;开源的计算机视觉处理工具&#xff09;是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由…

Cascade:自动化测试“旅程”

\本文要点\当我们的团队规模更大、过程更为繁多并采用了微服务架构时&#xff0c;系统测试的难度增加了。 \测试的推进过程也截然不同。相比于单元测试环境中&#xff0c;我们缺乏测试特定功能点的手段。 \我们受困于代价非常大的网络调用。除非将技术栈均质化并从中抽出网络调…

面向对象实验一

一、问题陈述&#xff1a; 本软件的功能和要求是解决学校对学生选课的管理的问题&#xff0c;为进一步完善学校的对学生选课信息、成绩等的管理&#xff0c;实现学生信息数据包括与学生有关的数据的管理与操作处理,具体实现用户&#xff08;管理员、教师、学生&#xff09;信息…

Boost.Test(转)

关于测试驱动开发, C的库比较多, 选择是一个问题.Boost.Test是一个用于C开发的测试框架, 类似的还有CPPUnit, 个人认为, CPPUnit过多的照搬了JUnit的框架, 有比较浓厚的Java风格, 用起来总感觉有些束缚, 不是那么native. CXXTest 我用过Symbian版本的, 好像需要Perl, 不过Symbi…