卷积运算与相关运算

在计算机视觉领域,卷积核、滤波器通常为较小尺寸的矩阵,比如3×33×3、5×55×5等,数字图像是相对较大尺寸的2维(多维)矩阵(张量),图像卷积运算与相关运算的关系如下图所示(图片来自链接),其中FF为滤波器,XX为图像,OO为结果。

相关是将滤波器在图像上滑动,对应位置相乘求和;卷积则先将滤波器旋转180度(行列均对称翻转),然后使用旋转后的滤波器进行相关运算。两者在计算方式上可以等价,有时为了简化,虽然名义上说是“卷积”,但实际实现时是相关。

在二维图像上,使用Sobel Gx滤波器进行卷积如下图所示(图片来自链接),

当输入为多维图像(或者多通道特征图)时,多通道卷积如下图所示(图片来自链接),图中输入图像尺寸为6×66×6,通道数为3,卷积核有2个,每个尺寸为3×33×3,通道数为3(与输入图像通道数一致),卷积时,仍是以滑动窗口的形式,从左至右,从上至下,3个通道的对应位置相乘求和,输出结果为2张4×44×4的特征图。一般地,当输入为m×n×cm×n×c时,每个卷积核为k×k×ck×k×c,即每个卷积核的通道数应与输入的通道数相同(因为多通道需同时卷积),输出的特征图数量与卷积核数量一致,这里不再赘述。

理解卷积

这里提供两个理解卷积的角度:

  1. 从函数(或者说映射、变换)的角度理解。 卷积过程是在图像每个位置进行线性变换映射成新值的过程,将卷积核看成权重,若拉成向量记为ww,图像对应位置的像素拉成向量记为xx,则该位置卷积结果为y=w′x+by=w′x+b,即向量内积+偏置,将xx变换为yy。从这个角度看,多层卷积是在进行逐层映射,整体构成一个复杂函数,训练过程是在学习每个局部映射所需的权重,训练过程可以看成是函数拟合的过程。

  2. 从模版匹配的角度理解。 前面我们已经知道,卷积与相关在计算上可以等价,相关运算常用模板匹配,即认为卷积核定义了某种模式,卷积(相关)运算是在计算每个位置与该模式的相似程度,或者说每个位置具有该模式的分量有多少,当前位置与该模式越像,响应越强。下图为图像层面的模板匹配(图片来自链接),右图为响应图,可见狗头位置的响应最大。当然,也可以在特征层面进行模版匹配,卷积神经网络中的隐藏层即可以看成是在特征层面进行模板匹配。这时,响应图中每个元素代表的是当前位置与该模式的相似程度,单看响应图其实看不出什么,可以想像每个位置都有个“狗头”,越亮的地方越像“狗头”,若给定模板甚至可以通过反卷积的方式将图像复原出来。这里多说一句,我们真的是想把图像复原出来吗,我们希望的是在图像中找到需要的模式,若是通过一个非线性函数,将响应图中完全不像“狗头”的地方清零,而将像“狗头”的地方保留,然后再将图像复原,发现复原图中只有一个“狗头”,这是不是更美好——因为我们明确了图像中的模式,而减少了其他信息的干扰!

本篇文章将倾向于从第2个角度来理解卷积神经网络。

卷积能抽取特征

上一节中提到了“狗头”模板,如果把卷积核定为“狗头”模板会有什么问题?将缺乏灵活性,或者说泛化能力不够,因为狗的姿态变化是多样的,如果直接把卷积核定义得这么“死板”,狗换个姿势或者换一条狗就不认得了。

那么,为了适应目标的多样性,卷积核该怎么设计呢?这个问题,我们在下一节回答,这里先看看人工定义的卷积核是如何提取特征的。

以下图sobel算子为例(图片来自链接),对图像进行卷积,获得图像的边缘响应图,当我们看到响应图时,要知道图中每个位置的响应代表着这个位置在原图中有个形似sobel算子的边缘,信息被压缩了,响应图里的一个数值其实代表了这个位置有个相应强度的sobel边缘模式,我们通过卷积抽取到了特征。

人工能定义边缘这样的简单卷积核来描述简单模式,但是更复杂的模式怎么办,像人脸、猫、狗等等,尽管每个狗长得都不一样,但是我们即使从未见过某种狗,当看到了也会知道那是狗,所以对于狗这个群体一定是存在着某种共有的模式,让我们人能够辨认出来,但问题是这种模式如何定义?在上一节,我们知道“死板”地定义个狗的模板是不行的,其缺乏泛化能力,我们该怎么办?

通过多层卷积,来将简单模式组合成复杂模式,通过这种灵活的组合来保证具有足够的表达能力和泛化能力。

多层卷积能抽取复杂特征

为了直观,我们先上图,图片出自论文《Visualizing and Understanding Convolutional Networks》,作者可视化了卷积神经网络每层学到的特征,当输入给定图片时,每层学到的特征如下图所示,注意,我们上面提到过每层得到的特征图直接观察是看不出什么的,因为其中每个位置都代表了某种模式,需要在这个位置将模式复现出来才能形成人能够理解的图像,作者在文中将这个复现过程称之为deconvolution,详细查看论文(前文已经有所暗示,读者可以先独自思考下复现会怎么做)。

从图中可知,浅层layer学到的特征为简单的边缘、角点、纹理、几何形状、表面等,到深层layer学到的特征则更为复杂抽象,为狗、人脸、键盘等等,有几点需要注意:

  1. 卷积神经网络每层的卷积核权重是由数据驱动学习得来,不是人工设计的,人工只能胜任简单卷积核的设计,像边缘,但在边缘响应图之上设计出能描述复杂模式的卷积核则十分困难。

  2. 数据驱动卷积神经网络逐层学到由简单到复杂的特征(模式),复杂模式是由简单模式组合而成,比如Layer4的狗脸是由Layer3的几何图形组合而成,Layer3的几何图形是由Layer2的纹理组合而成,Layer2的纹理是由Layer1的边缘组合而成,从特征图上看的话,Layer4特征图上一个点代表Layer3某种几何图形或表面的组合,Layer3特征图上一个点代表Layer2某种纹理的组合,Layer2特征图上一个点代表Layer1某种边缘的组合。

  3. 这种组合是一种相对灵活的方式在进行,不同的边缘→不同纹理→不同几何图形和表面→不同的狗脸、不同的物体……,前面层模式的组合可以多种多样,使后面层可以描述的模式也可以多种多样,所以具有很强的表达能力,不是“死板”的模板,而是“灵活”的模板,泛化能力更强。

  4. 卷积神经网络真正使用时,还需要配合池化、激活函数等,以获得更强的表达能力,但模式蕴含在卷积核中,如果没有非线性激活函数,网络仍能学到模式,但表达能力会下降,由论文《Systematic evaluation of CNN advances on the ImageNet》,在ImageNet上,使用调整后的caffenet,不使用非线性激活函数相比使用ReLU的性能会下降约8个百分点,如下图所示。通过池化和激活函数的配合,可以看到复现出的每层学到的特征是非常单纯的,狗、人、物体是清晰的,少有其他其他元素的干扰,可见网络学到了待检测对象区别于其他对象的模式。

总结

本文仅对卷积神经网络中的卷积计算、作用以及其中隐含的思想做了介绍,有些个人理解难免片面甚至错误,欢迎交流指正。

参考

  • Kernel (image processing)
  • Forward And Backpropagation in Convolutional Neural Network
  • 《Visualizing and Understanding Convolutional Networks》
  • 《Systematic evaluation of CNN advances on the ImageNet》
  • Deep Learning Specialization

机器学习——卷积神经网络计算相关推荐

  1. 分布式卷积神经网络计算平台(通用神经网络数据处理卡 Kintex Ultra Scale 系列 KU115)

    TES115 是一款基于 KU115 FPGA 的分布式卷积神经网络计算平台.该计算平台采用 Xilinx 的 Kintex Ultra Scale 系列 FPGA 作为主处理器,完成复杂的神经网络数 ...

  2. 白话机器学习-卷积神经网络CNN

    一 背景 在卷积神经网络CNN 出现之前,图像对于人工智能来说就是一个灾难,主要是有两个原因: 图像需要处理的数据量太大,导致成本很高,效率很低: 图像在数值化的过程中很难保留原有的特征,导致图像处理 ...

  3. 机器学习|卷积神经网络(CNN) 手写体识别 (MNIST)入门

    人工智能,机器学习,监督学习,神经网络,无论哪一个都是非常大的话题,都覆盖到可能就成一本书了,所以这篇文档只会包含在 RT-Thread 物联网操作系统,上面加载 MNIST 手写体识别模型相关的部分 ...

  4. 机器学习-卷积神经网络简介

    一.简介 CNN由对输入进行过滤(卷积)以获得有用信息的层组成. 这些卷积层具有可以学习的参数(内核),因此可以自动调整这些过滤器以提取针对手头任务的最有用信息,而无需选择特征. CNN最好与图像一起 ...

  5. 卷积神经网络计算题试题_卷积神经网络的计算

    转自:https://zhuanlan.zhihu.com/p/63174774 1. 卷积 卷积神经网络中的卷积是指定义好卷积核(kernel),并对图像(或者特征图,feature map)进行滑 ...

  6. 机器学习 卷积神经网络 Convolutional Neural Network(CNN)

    Convolutional Neural Network(CNN)- 卷积神经网络 CNN专用在影像上的神经网络,目的是作影像辨识.影像分类,即通过输入的影像,输出影像中的内容. 对于CNN,有两种解 ...

  7. 卷积神经网络计算题试题_卷积神经网络算法实例

    卷积神经网络CNN是Deep Learning的一个重要算法,在很多应用上表现出卓越的效果,[1]中对比多重算法在文档字符识别的效果,结论是CNN优于其他所有的算法.CNN在手写体识别取得最好的效果, ...

  8. 机器学习—卷积神经网络

    卷积神经网络 卷积 池化层 整体架构 经典网络架构 感受野 卷积中输入的是三维数据:h * w * c (channel) 整体架构:输入层.卷积层.池化层.全连接层 卷积 如图像数据维度为三维,32 ...

  9. 使用paddle框架无人驾驶 —— 卷积神经网络计算方向盘打角

    前言 之前一直在弄车道线的检测和识别,效果都不佳,要么车道线分割太慢了,要么容易出现丢线的情况处理的不是很好,所以索性直接用卷积神经网络做一个线性拟合. 完整文章地址 古月居博客网站 效果 用魔法玩欧 ...

最新文章

  1. 两个时间计算毫秒在线_SPL 的日期时间函数(下)
  2. 硬盘安装 solaris
  3. 用O(1)的时间复杂度删除单链表中的某个节点
  4. thinkphp福娃源码交易网站源码
  5. Vue——vue-resource
  6. 英文聊天常用缩写单词
  7. 为什么有些工厂,3000块一个月不包吃住还能招到工人?
  8. 零基础学python要多久-零基础学Python要多久
  9. DimDate populate data
  10. Java常量不能二次赋值与常量不能修改值意思一样吗?
  11. BOM offset client scroll
  12. 2022淘宝618超级喵运会怎么玩?2022淘宝618喵运会玩法技巧
  13. Java程序崩溃原因分析:错误日志分析及解决(Cannot allocate memory)
  14. web前端简历怎么写?
  15. 基于SSM的博客系统-原创教程
  16. The Little Schemer 笔记(第一章)
  17. Json工具Demo(二)
  18. ajax有哪些常用参数?ajax参数介绍
  19. ue5 lyra camera
  20. 面试题之窒息翻译:类加载机制的双亲委派(正解:父委派模型)

热门文章

  1. 【菜鸡学算法】用最笨最直观的方法讨论递归取中值时是不是陷入死循环
  2. Learnopengl
  3. 【Computer Organization笔记12】流水线技术概述
  4. 虚拟机VMware的Ubuntu下安装tensorflow详解
  5. 商户权限表mysql_MySQL 事务之 Yii2.0 商户提现
  6. java多线程的api_java多线程之:线程对象一些api
  7. 计算机应用入学考试,本科计算机应用入学考试模拟试题.doc
  8. mac mysql root不能登陆_Mac下新安装的MySQL无法登陆root用户解决方法
  9. 无法访问windows installer服务
  10. oracle 中的参数 optimizer_mod的各个参数的意义