概述
卷积层(Convolution) 的作用:在图片上进行 特征提取,每次在 一个小区域 进行特征提取
本文以 对 灰度图 进行 边缘检测 作为案例
人怎样识别图片
人在识别图片时,首先得找到图片中各个部分的 边缘 和 轮廓,而 边缘 和 轮廓 只与 相邻近的像素 有关。
也就是说:人识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首 先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息
这个过程就像我们看美女、帅哥,先看局部,再看整体
案例(吴恩达)
如下面的左图,经过 垂直边缘检测 和 水平边缘检测 ,得到右侧的两幅图,如下图:
本案例重点讲解 垂直边缘检测
1. 图像数据
上图是灰度图,只是黑白,假设 此图的数据是6*6*1的矩阵,如下:
2. 垂直过滤器(卷积核)
为了检测图像中的 垂直边缘 ,构造一个3*3的矩阵,如下图:
在卷积神经网络中,这个矩阵被称为 过滤器(Filter) 或者 滤波器 或者 卷积核(Kernel)。
3. 图像 与 卷积核 运算(卷积运算)
使用3*3矩阵的 卷积核 和6*6矩阵的灰度 图像 ,进行 卷积运算
过程如下:
在图像矩阵上,有一个和 卷积核 相同尺寸的 滑窗(下图粉色部分),然后将滑窗中的矩阵 与 卷积核矩阵对应位置 相乘,然后再求和,具体如下
动态图显示
https://gitee.com/65242847/images/blob/master/%E5%8D%B7%E7%A7%AF%E5%8A%A8%E7%94%BB%E5%9B%BE.md
第1次运算:
第一步:
将图像上 滑窗 3*3矩阵,与 3*3的 卷积核 做乘法运算:
运算过程如下:
第二步:
然后将该矩阵 每个元素相加,即3 + 1 + 2 + 0 + 0 + 0 + (-1) + (-8) + (-2)= -5,结果-5就是4*4矩阵第一行第一个元素
注意: 此步需要加上 一个 偏置量(bias),偏置量 默认为0,所以没体现,下同
第2次运算:
第一步:
将图像上 滑窗 3*3矩阵 右移一格,与 3*3的 卷积核 做乘法运算:
第二步:
然后将该矩阵 每个元素相加,即0 + 0 + (-2) + 5 + 0 + (-9) + 7 + 0 + (-5)= -4,结果-4就是4*4矩阵第一行第二个元素
第3次、第4次运算
将图像上 滑窗 3*3矩阵 右移一格,与 3*3的 卷积核 做乘法运算,结果如下:
将图像上 滑窗 3*3矩阵 右移一格,与 3*3的 卷积核 做乘法运算,结果如下:
第5次运算
将图像上 滑窗 3*3矩阵 下移一格 并 移动到最左侧,与 3*3的 卷积核 做乘法运算,结果如下:
第n次运算
同上
结果
水平边缘检测
水平边缘检测原理 与 垂直边缘检测原理 相同
卷积核
卷积核权重:
- 即卷积核 矩阵中的数值
- 在tensorflow/keras中是随机初始化的
- 在训练时,通过学习会自行修改
卷积核的种类:
有很多种类,用于提取不同的特征,所以一般会有 很多个 卷积核
https://my.oschina.net/u/876354/blog/3064227
如何设置卷积核?
小而深,单独较小的卷积核也是不好的,只有堆叠很多小的卷积核,模型的性能才会提升
卷积核大小通常为 奇数
移动步长(stride)
滑动的步长,stride,记为S
步长取值
S越小,提取的特征 越多,但是S 一般 不取1,主要考虑 时间效率 的问题。
S也 不能太大,否则会 漏掉 图像上的信息。
导致的结果
- S 越小,生成的图像越大
- S 越大,生成的图像越小
feature map
在输入层
图片有 几个通道 就有 几个 feature map:
其它层
上一层 每个feature map 跟 每个卷积核 做卷积,都会产生下一层的 一个feature map,有N个卷积核,下层就会产生 N个feather map。
多个feather map的作用是什么?
用 多种不同 的 卷积核 对图像进行卷积,提取不同的特征
也就是说 卷积核 越多,提取的 特征越多,生成的feather map 数量越多
问题
1. 图像边缘信息容易丢失
一般,每次移动滑窗后 有交集部分,交集部分意味着 多次提取特征,尤其在图像的 中间区域 提取次数 较多,边缘部分 提取次数 较少
如下图,越是中间的部分,计算次数越多;越是边、角的部分,计算次数越少
左侧 第1列 和 右侧 最后1列,只运算过 1次,中间区域 运算过 3次
2. 图像缩小
每次卷积,图像都缩小,这样卷不了几次就没了
边缘填充(padding)
为了解决上面的问题,采用 边缘填充
当卷积核大小为3*3时,边缘填充 两圈0,6*6的原始图像 填充成 10*10的新图像,经过 卷积核 运算后,生成的图像 大小没变,如下图:
两种方式
- valid。不填充,卷积后图片会变小
- same。在图片周围填充0,卷积后图片大小不变
填充层数为:(卷积核高度-1)/2,所以卷积核的大小通常为奇数
卷积核计算公式
- S是strides(滑动步长)
- 原图片大小为N1xN1(下图为4x4)
- 卷积核大小为N2xN2(下图为3x3)
- P是padding大小
卷积后图像大小:(N1-N2+2P)/S+1
动画演示
https://gitee.com/65242847/images/blob/master/%E5%8D%B7%E7%A7%AF%E5%8A%A8%E7%94%BB%E5%9B%BE.md
特点
卷积神经网络通过 局部感知 和 权值共享 可以降低参数数量,减少运算量
1. 局部感知
理念来源于动物视觉的皮层结构,图像中,距离 较近 的像素间 相关性强,距离 较远 则 相关性弱
每一个神经元只需要感知图像中的 局部信息,然后在更高层进行信息组合就可以得到 全局信息
2. 权值共享(参数共享)
在卷积过程中,卷积核的权重不改变
通过一个卷积核,提取一个图像不同部分的特征时,该卷积核的 权重不变
keras
总结
卷积层的作用:对图像特征的提取
感谢:
https://blog.csdn.net/weixin_39549734/article/details/82734115
https://www.cnblogs.com/xiaojianliu/articles/9904141.html
https://blog.csdn.net/u013555719/article/details/81121005
https://www.jianshu.com/p/c0215d26d20a
https://www.cnblogs.com/jyxbk/p/7879834.html
https://www.cnblogs.com/wj-1314/p/9593364.html
https://cloud.tencent.com/developer/news/131400








