卷积运算(二维、三维)
1 边缘检测(Edge detection)
卷积运算是卷积神经网络最基本的组成部分,看一个例子,这是一个 6×6 的灰度图像,因为是灰度图像,所以它是 6×6×1 的矩阵,而不是 6×6×3 的,因为没有 RGB 三通道,为了检测图像中的垂直边缘,可以构造一个 3×3矩阵,像这样,它被称为过滤器,在论文它有时候会被称为核。对这个 6×6 的图像进行卷积运算,卷积运算用“∗”来表示,用 3×3的过滤器对其进行卷积。这个卷积运算的输出将会是一个 4×4 的矩阵,你可以将它看成一个 4×4 的图像,在 4×4 左上角的那个元素,使用 3×3 的过滤器,将其覆盖在输入图像,如下图所示,然后进行元素乘法(element-wise products)运算,所以:,然后将该矩阵每个元素相加,得到左上角元素为-5,其他依次计算得到4×4 的矩阵:
再看一个例子:
为什么这个可以做垂直边缘检测呢?这是一个简单的 6×6 图像,左边的一半是 10,右边一般是 0,左边那部分看起来是白色的,像素值 10 是比较亮的像素值,右边像素值比较暗,我使用灰色来表示 0 , 图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色, 当你用一个 3×3 过滤器进行卷积运算的时候,这个 3×3 的过滤器可视化为下面这个样子,在左边有明亮的像素,然后有一个过渡,0 在中间,然后右边是深色的,卷积运算后,你得到的是右边的矩阵,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。
还可以检测出水平的边缘,此时用到的过滤器是这样的:,其他操作与上面的垂直边缘检测类似,这里不做详细的解释。
当然也可以使用这种过滤器:,叫做 Sobel 的过滤器,它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些。
或者这种:,这叫做 Scharr 过滤器,它有着和之前完全不同的特性,实际上也是一种垂直边缘检测,如果将其翻转 90 度,就能得到对应水平边缘检测。
2 三维卷积(Convolutions over volumes)
假如说你不仅想检测灰度图像的特征,也想检测 RGB 彩色图像的特征。彩色图像如果是 6×6×3,这里的 3 指的是三个颜色通道,你可以把它想象成三个 6×6图像的堆叠。为了检测图像的边缘或者其他的特征,不是把它跟原来的 3×3 的过滤器做卷积,而是跟一个三维的过滤器,它的维度是 3×3×3,,这个 3×3×3 的过滤器有 27 个数,27 个参数就是 3 的立方,这样这个过滤器也有三层,对应红绿、蓝三个通道,以下两张图片详细说明了三维卷积运算。
理论上,我们的过滤器只关注红色通道,或者只关注绿色或者蓝色通道也是可行的。在卷积运算中,我们也可以使用多个过滤器,下图写出了详细的计算过程,和第一个过滤器卷积,可以得到第一个 4×4 的输出,然后卷积第二个过滤器,得到一个不同的 4×4 的输出,我们做完卷积,然后把这两个 4×4 的输出,取第一个把它放到前面,然后取第二个过滤器输出,我把它画在这,放到后面。所以把这两个输出堆叠在一起,这样你就都得到了一个 4×4×2 的输出立方体。
本文来自博客园,作者:zhang-X,转载请注明原文链接:https://www.cnblogs.com/YY-zhang/p/15067799.html
原文地址:https://www.cnblogs.com/YY-zhang/p/15067799.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 细品Redis高性能数据结构之hash对象
- pyspark之常用算子
- linux之shell综合例子之定时任务
- spring之配置单例的集合bean,以供多个bean进行引用
- 【python-leetcode25-翻转链表】K 个一组翻转链表
- spring之通过实例工厂方法配置Bean
- 细品redis分布式锁
- 【python-leetcode102-树的宽度遍历】二叉树的层次遍历
- 【python-树的宽度遍历】二叉树的反向层次遍历
- 基于TypeScript封装Axios笔记(二)
- redis高性能数据结构之有序集
- spring之通过静态工厂方法配置Bean
- 【python-leetcode107-树的宽度遍历】二叉树的层次遍历Ⅱ
- spring之通过注解方式配置Bean(一)
- React17新特性:启发式更新算法