什么!卷积要旋转180度?!

全文共988个字,6张图,预计阅读时间8分钟。

一看这个标题就会想,这有什么大惊小怪的,可能好多人觉得这是个脑残话题,但我确实误解了两三年……

今天在读《OpenCV算法精解》的时候,发现对两个矩阵做卷积运算的时候,作为卷积算子的矩阵要逆时针旋转180度,这是以前从来没注意过的步骤, 说来惭愧,平时都是直接调用API,忽略了原理,以为卷积就是像很多图上画的,一个卷积核挨着扫描另一个矩阵,结果叠加起来,当初上数字图像处理课的时候也手算过卷积,不知道是老师讲错了还是我记错了,总之一直都没注意到卷积运算其实是「先翻转再平移」。

维基百科中这样描述卷积的物理意义:

在泛函分析中,卷积、叠积、摺积或旋积,是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与经过翻转和平移的g的乘积函数所围成的曲边梯形的面积。

连续卷积

数学定义是:

函数f和g是定义在Rn上的可测函数,f与g的卷积记做f*g,它是其中一个函数翻转并平移后与另一个函数的乘积的积分,是一个对平移量的函数,也就是:

连续卷积公式(From Wikipedia)

知乎上有一个关于「如何通俗易懂地解释卷积」的问答,有很多解释版本,也都通俗易懂,挺有意思,但是个人认为维基百科的下面这张图用于理解卷积已经足够。特别注意圈住的那句话,对理解卷积的意义很有帮助。

图解卷积(From Wikipedia)

离散卷积

离散卷积(From Wikipedia)

Example

我主要做图像处理,所以用到的是离散卷积。使用python做验证。

下面这个图是我们最常见的卷积运算图:

卷积运算图(来自百度图片搜索)

中间的卷积核,其实是已经逆时针旋转过180度的,即做卷积的两个矩阵其实是[[2, 1, 0, 2, 3], [9, 5, 2,4, 2, 0], [2, 3, 4, 5, 6], [1, 2, 3, 1, 0], [0, 4, 4, 2, 8]]和[[1, 0, -1], [1, 0, -1], [1, 0, -1]],没有旋转只有乘积求和就不叫卷积运算。

先来两个矩阵,根据公式手动推导一下:

手算卷积

可以发现,只有卷积核旋转180度再扫描,才会和公式推导计算的结果一样,将I和K矩阵用python做卷积:

python卷积.png

和我们手算的一样。所以自己做卷积的时候,记得「翻转再平移」……或者干脆用公式计算,至少不会错。

原文链接:https://www.jianshu.com/p/3b3a6743cab7

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2018-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习思考者

目标检测:选择性搜索策略(C++ / Python)

导读:通过本教程,我们将彻底理解一个重要的概念:目标检测中的常用方法“Selective Search”。文末也会给出使用C++或者Python的Opencv代...

6637
来自专栏企鹅号快讯

深入机器学习系列7-Random Forest

1 Bagging   采用自助采样法()采样数据。给定包含个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,样本仍...

5006
来自专栏刁寿钧的专栏

使用 Tensorflow 构建 CNN 进行情感分析实践

本次实验参照的是 Kim Yoon 的论文,代码放在我的 github 上,可直接使用。

3.1K1
来自专栏利炳根的专栏

学习笔记CB010:递归神经网络、LSTM、自动抓取字幕

递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recursive neural network...

5924
来自专栏AI研习社

浏览器中的姿态检测:PoseNet 模型(附代码)

这里附上 Youtube 上这段视频的源代码,作者是 Siraj Raval:https://youtu.be/9KqNk5keyCc

3703
来自专栏机器之心

资源 | 如何利用VGG-16等模型在CPU上测评各深度学习框架

选自GitHub 机器之心编译 参与:蒋思源、刘晓坤 本项目对比了各深度学习框架在 CPU 上运行相同模型(VGG-16 和 MobileNet)单次迭代所需要...

6738
来自专栏机器之心

资源 | 从VGG到ResNet,你想要的MXNet预训练模型轻松学

2644
来自专栏大数据挖掘DT机器学习

如何用TensorFlow和TF-Slim实现图像标注、分类与分割

本文github源码地址: 在公众号 datadw 里 回复 图像 即可获取。 笔者将和大家分享一个结合了TensorFlow和slim库的小应用,来实现...

6404
来自专栏人工智能LeadAI

简易的深度学习框架Keras代码解析与应用

总体来讲keras这个深度学习框架真的很“简易”,它体现在可参考的文档写的比较详细,不像caffe,装完以后都得靠技术博客,keras有它自己的官方文档(不过是...

7097
来自专栏杂七杂八

神经网络训练细节part1(下)

学习率的选择通过先用少部分数据来进行测试,选择一个较好的学习速率。选择的方式可以为在某个范围内随机取值,观察样本的准确率

1102

扫码关注云+社区

领取腾讯云代金券