深度学习-卷积神经网络初识-1
2017-12-24 17:04
218 查看
卷积神经网络
技交部 潘震宇一、计算机视觉
在计算机视觉领域中,存在着许多问题,各类领域基本都包含着这俩种基础问题:1、 图像分类
2、 目标检测
除上述之外,最近有一种新颖的技术,也出现在大众的面前——风格迁移。
那么,为什么我们学习卷积神经网络,为什么要提及计算机视觉呢?卷积神经网络又有什么用呢?我们可以参考一个例子来说明:
如上图所示,这是一张常见的猫咪图片,大小为64 * 64,实际上图片规格应该是64 * 64 * 3,因为它还存在着RGB三种值,整体来看,特征值就应该有64 * 64 * 3 = 12288个。
那当我们在进行图像分类时,就会在神经网络种,输入层就至少需要12288个单元,而假设第一层有10个单元,那么对应的权重就一共有122880个,对应的偏移量也会有122880个。这也意味着我们在迭代的过程中每次都会牵扯到这么多的数值。是不是已经觉得内存耗费挺多的啦?
这还只是小图片,若为一张的1000 * 1000,大小为1m的图片:
那他的特征量x的维度就应该有1000 * 1000 * 3 = 3million个,假设第一隐层中包含1000个单元,那对应的权重和偏移量的维度则为3000000000,30亿的数量那得有多可怕,每一次的运算都会牵扯到这么多的数值变化。因此,我们就需要一种更好的方法来处理这类似的情况。
二、边缘检测示例
卷积卷积,说了这么多次的卷积,究竟是怎么样进行运算的呢?在之前我们曾经提及过关于神经网络对人脸识别的分解图。第一个图为第一层单元所获取到的边缘细节图,第二个图则为中间过渡层对人脸五官的识别,第三个图则为最终输出层对人脸的识别。
本次,我们将借助边缘检测,也就是第一张图的来源,做一个详细的分析。
上图为一张很普通的照片,我们可以利用神经网络对此进行物体识别。从边缘检测来看,模型可以将它分解为垂直边缘与水平边缘的识别,正如右侧俩张图片一样。
那它又是怎么获取到边缘的信息的呢?我们接着来探讨。
假设我们现在有一个6 * 6的一个灰度矩阵,它代表着一副特别简单的色图,而不是之前所提到的RGB三色图。
3 | 0 | 1 | 2 | 7 | 4 |
1 | 5 | 8 | 9 | 31 | 1 |
2 | 7 | 2 | 5 | 1 | 3 |
0 | 1 | 3 | 1 | 7 | 8 |
4 | 2 | 1 | 6 | 2 | 8 |
2 | 4 | 5 | 2 | 3 | 9 |
1 | 0 | -1 |
1 | 0-1 | |
1 | 0 | -1 |
3 | 0 | 1 | 2 | 7 | 4 |
1 | 5 | 8 | 9 | 31 | 1 |
2 | 7 | 2 | 5 | 1 | 3 |
0 | 1 | 3 | 1 | 7 | 8 |
4 | 2 | 1 | 6 | 2 | 8 |
2 | 4 | 5 | 2 | 3 | 9 |
*
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
=
-5 | -4 | 0 | 8 |
-10 | -2 | 2 | 3 |
0 | -2 | -4 | -7 |
-3 | -2 | -3 | -16 |
这个我们应该怎么计算呢?6 *6 的矩阵和 3 * 3 的矩阵究竟是怎么运算,得出一个4 *4的矩阵呢?不着急,我们一步一步的来看。
3 (1) | 0 (0) | 1 (-1) | 2 | 7 | 4 |
1 (1) | 5 (0) | 8 (-1) | 9 | 31 | 1 |
2 (1) | 7 (0) | 2 (-1) | 5 | 1 | 3 |
0 | 1 | 3 | 1 | 7 | 8 |
4 | 2 | 1 | 6 | 2 | 8 |
2 | 4 | 5 | 2 | 3 | 9 |
(1,1) = 3 * 1 + 1 * 1 + 2 * 1 + 0 * 0+ 5 * 0 + 7 * 0 + 1 * -1 + 8 * -1 + 2 * -1 = -5
那么(1,2)应该怎么计算呢?我们将框右移动一格。
3 | 0 (1) | 1 (0) | 2 (-1) | 7 | 4 |
1 | 5 (1) | 8 (0) | 9 (-1) | 31 | 1 |
2 | 7 (1) | 2 (0) | 5 (-1) | 1 | 3 |
0 | 1 | 3 | 1 | 7 | 8 |
4 | 2 | 1 | 6 | 2 | 8 |
2 | 4 | 5 | 2 | 3 | 9 |
(1,2) = 0 * 1 + 5 * 1 + 7 * 1 + 1 * 0+ 8 * 0 + 2 * 0 + 2 * -1 + 9 * -1 + 5 * -1 = -4
由此规律我们可以得出剩余的其他结果。
现在,你能够理解,为什么做了卷积运算以后,结果为4 * 4 的矩阵了吧?
在垂直边缘检测中,我们可以将矩阵理解为如下所示:
第一个矩阵中,最左边的三条列向量,代表着亮度最高的左半部分,而右边的三条列向量,则代表了亮度为0的右侧灰色部分。
第二个矩阵中,同样的看法,左侧1向量为白色条,中间0向量为灰色条,右侧-1向量为黑色条。
第三个结果矩阵中,最左和最右侧向量代表着灰色,中间30,30向量代表着白色边缘,也就是第一个矩阵下面的图像里面的交界线。
我们或许会惊奇,为什么看上去比原本的线粗好多,这是因为原本的灰度图维度太小的缘故,若为1000 * 1000,那么显示出来的图像将会更形象一些。
上述内容便为用卷积实现垂直边缘检测。
三、更多边缘检测
在刚刚的计算中,我们可以归纳为如上图所示的第一行计算式。那么,如果将亮度反转过来呢?比如类似与第二行计算式,我们看看出在结果里,30变成了-30,对应的图也又白色便为了黑色。这代表了边缘检测是可以检测出亮度的变化是由亮到暗还是由暗到亮。
第一行:从白色到灰色,这是一条正边
第二行:从灰色到白色,这是一条负边
而如果我们不需要亮度变换的方向,则直接采用绝对值就可以表示。
更多的例子:
现在我们已经知道了,上图所示的滤波器为垂直边缘检测滤波器,那么下图所示呢?
真机智!不错,是水平边缘检测滤波器。
假设我们现在弄一个相对复杂一点的灰度图来做个示范,左侧为次对角线区域代表暗,主对角线区域代表亮的一个模块图,在水平滤波器的卷积运算下,得到了右侧所示结果。
从结果中,我们可以看出,假设绿框所标记的30,则对应到灰度图中为俩层10和一层0,也就代表着亮度是从亮变向暗,为正边,因此为30。
而紫色框所标记的-30,则对应到灰度图中为俩层0和一层10,也就代表着亮度是从暗变亮,为负边,因此为-30。
那么黄色框的10呢,它是由灰度图中每一列的变化趋势做的一个运算得出来的中间值结果,俩条正边+一条负边,在维度小的时候(例如现在为6*6),它就会出现类似与10这种的过渡值,但是当维度大时,如1000 * 1000,那么这些中间值就会变得特别小。
事实上,滤波器的取值不一定非要为111,000,-1-1-1.在文献中,出现了许多大佬们发现的适应性更强的取值。例如:
并且,我们不仅仅可以使用手工设计出的滤波器,还完全可以将这九个框中值看成参数,在学习计算中自动的反向传播进行更新迭代,如之前学习的一般神经网络权重那样值更新一般。那么,不管是什么角度的边缘,我们都应该能够检测出来
四、Padding
在之前的例子当中,我们已经了解了灰度图矩阵,例如上图所示,我们在将它和一个3*3大小的滤波器做卷积运算后,得到了一个4 * 4的结果矩阵。关于结果维度与滤波器维度和灰度图维度关系:假设图维度为n * n, 滤波器维度为f * f,则结果维度为(n – f + 1) * (n – f + 1)
如果我们就照此进行运算,会出现俩种不好的影响。
1、 图像会越来越小:
在卷积的过程中,会导致维度逐渐减小,若不采取其他操作,假如我们通过一个100层的深度网络进行运算,最后输出的将会丢失掉许多特征点。
2、 矩阵边缘计算次数少,中间计算次数多:
若不采取其他操作,在运算中,我们会发现,位于边缘的单元仅仅计算一次俩次,而位于中间的单元则会计算许多次,这样会导致图像外边缘的边缘检测效果差。
因此,我们可以通过填充矩阵,让它能够在卷积后,维度不变。
Convolution也有俩种:
1、Valid 卷积
不适用padding处理,在每次卷积后都会将维度减小。
3、 Same 卷积
通过填充矩阵,让矩阵在卷积运算后的输出与输入保证维度一致。
例如:
我们可以将6*6的矩阵进行扩充,拓展为8*8,最外层全为0,由于n-f+1 = 6可以知道,最后卷积运算输出的维度仍然为6,这时候的padding值为1.
那么,我们应该怎么选取padding值呢?
我们可以简单推导一下
n– f + 1 + 2 * p = n => p = (f - 1) / 2
也就是说,为f – 1 的一半,那我们最好就将滤波器的维度设置为奇数。否则就只有采取不自然的填充法了。
后续内容,下次分享
相关文章推荐
- 深度学习-卷积神经网络初识-2
- 深度学习进阶(五)--卷积神经网络与深度置信网络以及自动编码初识(补昨天博客更新)
- 深度学习进阶(四)--深度神经网络中梯度消失以及卷积神经网络初识
- 吴恩达深度学习笔记五:卷积神经网络 人脸识别和风格迁移部分
- Deep Learning(深度学习)学习笔记整理系列之(七)Convolutional Neural Networks卷积神经网络
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-02-基于Python的卷积运算
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
- 零基础入门深度学习(4) - 卷积神经网络
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
- 【深度学习】卷积神经网络
- 深度学习算法实践11---卷积神经网络(CNN)之卷积操作
- 深度学习入门(四) BP算法与卷积神经网络理解
- 深度学习之一:卷积神经网络CNN经典模型整理(Lenet-5)
- 深度学习UFLDL教程翻译之卷积神经网络(一)
- 【深度学习理论】卷积神经网络的反卷积/转置卷积
- 吴恩达深度学习笔记之卷积神经网络(目标检测)
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3
- 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014
- 理解卷积神经网络的利器:9篇重要的深度学习论文
- 吴恩达深度学习笔记四:卷积神经网络 基础和目标检测部分