卷积神经网络-1

本文来自于网易云课堂

计算机视觉

多亏了深度学习,计算机视觉得到飞速发展。计算机视觉可以帮助车辆识别行人,信号灯等并帮助汽车做出响应。计算机还成功应用在人脸识别中,甚至还催生了一种新的艺术形式。
这里写图片描述
在应用计算机视觉时要面临一个挑战就是数据的输入可能非常大。以前的图片是64*64*3,这个数据量为12288,而如果你的图片是1000*1000*3=3百万个数据量,那么神经网络的输入层的维度就有300万,如果第一层有1000个节点,那么W[1] = (1000,3m),参数共有30亿个,这是一个非常大的数字。在参数如此大的情况下,难以获取足够的数据来防止神经网络发生过拟合和竞争需求。而这么大的神经网络需要的内存也让人无法接受,但是你也不想只处理小图片,为此你需要进行卷积运算。
这里写图片描述

边缘检测示例

卷积运算是卷积神经网络最基本的组成部分。通过边缘检测来演示一下卷积是如何运算的。
这里写图片描述
对于一个6*6*1的灰度图像,为了检测图像中的垂直边缘,你可以构造一个3*3的矩阵,在神经网络的专用术语,它被称为过滤器(filter)或核(kernal)。卷积(convolution)运算用*表示。
这里写图片描述
为什么卷积运算可以用来边缘检测呢?在下图中,卷积结果中的中间白色部分就表示垂直边缘。当然这里的维度不太正确,因为检测到的边缘太粗了。这是因为这个例子中图片太小了。如果使用1000*1000的图片,那么效果就会好的多。在这个例子中,输出图像的中间白色部分表示原图中中间有明显的垂直边缘。从中得到的启发是,因为我们使用的是3*3的矩阵,所以垂直边缘是3*3的区域,左边是明亮的像素,中间不需要考虑,右边是深色像素。在左边图中,明亮的像素在左边(10),灰色像素在右边(0),那么这个就被认为是一个边界。
这里写图片描述

更多检测边缘内容

这里写图片描述
对于3*3的矩阵,现在只使用了一种组合,但是实际上有很多种。比如说sobel滤波器,它的优点在于增加了中间一行元素的权重,也就是处在图像中央的像素点,这使得结果的鲁棒性更高一些。但实际上,你可以不使用它们的数字组合而是把他们当做参数让神经网络自己去学习。得到的滤波器对数据的捕捉能力甚至会超过任何之前手写的滤波器。
这种将9个数字都当做参数的思想,已经成为计算机视觉中最有效的思想之一。
这里写图片描述

padding

在卷积神经网络中,一个基本的卷积操作就是padding。在之前,一个6*6的矩阵与3*3的矩阵卷积得到一个4*4的矩阵,这是因为在6*6中只有4*4个可能的位置。这背后的数学解释是,如果我们有一个n*n的图像,和一个f*f的过滤器,那么卷积结果就是(n-f+1)(n-f+1)。这样有2个缺点,第一是每次卷积图像都会缩小。多做几次可能会缩小到1*1。第二个缺点是角落上的像素只使用了一次。这意味着丢失了很多信息。为了解决这些问题,在进行卷积操作之前可以先填充(padding)这幅图像。在这个例子中,你就可以填充一层像素,那么6*6就会填充为8*8,得到的输出就是6*6.习惯上填充0.如果用p代表填充的数量,那么输出就是(n+2p-f+1)(n+2p-f+1)。当然你也可以选择填充2层
置于选择多少层,通常有2个选择,分别叫做valid卷积和same卷积。valid卷积意味着不填充。same卷积意味着填充后的输出层和输入大小是一致的。那么p = (f-1)/2,只要f是奇数,那么只要确定p就能得到一样的输出。f很少有偶数的情况,因为这样的话你只能选择不对称填充,另外如果是奇数填充就会有一个中心点,这个中心点会很方便的指出过滤器的位置。

卷积步长

这里写图片描述
卷积的步长是另一个基本的卷积操作。如果将卷积步长设置为stride = 2,那么一个7*7的输入卷积一个3*3的过滤器就得到了一个3*3的输出。令padding = p,stride = s,那么对于n*n的输入,f*f的过滤器有输出为 ( n + 2 p f 2 + 1 ) * ( n + 2 p f 2 + 1 ) 。如果商不是整数,那我们就向下取整 n + 2 p f 2 + 1 。这个意思就是如果篮框完全在输入内部则进行计算,如果出去边界则不进行计算。
这里写图片描述

关于互相关和卷积的技术性建议。这不会影响到你构建卷积神经网络的方式但取决于你读的是数学教材还是信号处理教材在不同的教材里符号可能不一致。如果你看的是一本典型的数学教科书,那么卷积的定义就是元素乘积求和之前还有一个步骤就是你将过滤器水平和垂直翻转。所以我们之前所做的卷积运算跳过了这个镜像操作。从技术上讲,我们实际做的是互相关操作而不是卷积。但是在深度学习文献中,按照惯例,我们将这称为卷积操作。所以总结说来,按照机器学习的惯例我们通常不翻转操作,从技术上讲这种操作称为互相关更好。但是大部分文献都称为卷积,所以我们也遵从这个约定。事实上,在信号处理中,卷积的定义包含翻转,使得(A*B)C=A(B*C),但对于神经网络来说这个性质真的不重要,因此省略了双重镜像操作,就简化了代码,并使神经网络也能正常工作。

下一节介绍立体卷积。

卷积为何有效

这里写图片描述
这里写图片描述
过滤器也为 3个通道,那么如果我们将红色通道开启,而其他通道全为0,那么这个过滤器只对红色起作用,如果你不关心哪个颜色,那么你就可以对每个通道都开启。按照计算机视觉的惯例,当你的输入有特定的高,宽和通道数时,你的过滤器可以有不同的高宽但必须要有相同的通道数。
这里写图片描述
如果我们不仅仅想检测垂直边缘还想同时检测水平边缘或者说如果想同时利用多个过滤器会怎么样。只需要把不同过滤器的输出堆叠起来就可以了。用公式来表示的话就是 n × n × n c f × f × n c = ( n + 2 p f 2 + 1 ) × ( n + 2 p f 2 + 1 ) × n c ,其中 n c n C

猜你喜欢

转载自blog.csdn.net/u010132497/article/details/80005261