Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

神经网络和深度学习卷积神经网络初探

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

神经网络和深度学习在推动计算机视觉方面成效显著。其中卷积神经网络应用最广泛。

1. 计算机视觉的应用方向和遇到的挑战:
1.1:计算机视觉主要有以下几种应用方向:
A. Image classification. 
图像分类,分辨图片是否是某种物体。
B. Object Detection:
目标检测,不但要识别出图片中的物体,还要指出它们的位置。
C. Neural Style Transfer:
图片风格迁徙。



1.2:计算机视觉遇到的挑战
因为计算机视觉研究对象是图片,而大图片则数据量极大,例如:1024x1024的RGB图像,为1024x1024x3=3145728个byte.
如果采用普通的神经网络全连接,哪怕第一层仅仅有1000个神经元。则第一层的参数w[1]就有3145728x1000个。如此巨大的参数量,为了防止过拟合,需要极多的数据进行训练。数据量太大,计算量太大,所需计算能力和内存过于庞大。

卷积神经网络,可以解决这个难题。

卷积操作是卷积神经网络最基础的操作,可以通过边缘检测为例,看看卷积操作具体是如何运作的。

2. 卷积操作相关
2.1. 卷积操作--以边缘检测为例:
如何检测图片中物体的垂直/水平边缘。
可以使用一个卷积核/filter. 对目标图片进行卷积操作。


可以看到,输入Image左边亮,右边暗。经过卷积操作,输出一个数据。中间有明显一道垂直数据。表示有一个边缘。


边缘的正边和负边:
如何判断边缘从左到右方向,或由上到下方向上,是由亮变暗,还是由暗变量呢,或者说,是正边还是负边呢?

可以看到,因为此卷积核左亮右暗,所以目标图片如果由亮变暗,则边缘数据呈正值(正边)。 否则,就是负值(负边)。


水平和垂直边界,则采用不同的卷积核/filter:


不同的卷积核,可以获取不同的特征。
对边缘检测,卷积核/filter还有其它选择,如:Sobel filter, Schaar filter.

这些都是手工写的卷积核/filter,不同的卷积核/filter可以获取不同的信息。但如果把卷积核/filter内的每个值都做为参数w,用反向传播法计算,可以学习到非常好的边缘检测器,它们的数据捕捉能力可能远超这些手写的卷积核/filter. 如,检测45度,70度,87度或任意角度的边缘。甚至是其它的特征。




将卷积核/filter中的数字视为参数并训练的思想,成为计算机视觉中最有效的思路之一


2.2. Padding:
Padding是卷积操作中一个操作概念。
3.1:缘由:
为何6x6的一个Image,经过3x3的一个filter卷积后,产生一个4x4的结果。
因为6x6的Image中放入3x3的fiter,只有4x4种可能的位置。
所以, nxn的image,经过fxf的filter的卷积。会产生 (n-f+1)x(n-f+1)的结果。

有什么缺点呢?
A. 每次卷积后,Image会变小。当层数太多时,Image会太小。
B. 边,角地带的数据,在输出中参与较少。以为着丢掉了边角地带的信息。

可能的解决方案:
在原始的图片之外,加上一圈或几圈像素,填充0.
例如:边缘处加上P个像素。
则(n+2p-f+1)x(n+2p-f+1).

Padding的方式有两种:
Valid padding: 不填充。 则产生 (n-f+1)x(n-f+1)的结果。
Same Padding:每个边缘填充p像素。则产生(n+2p-f+1)x(n+2p-f+1)的结果。
如果步长不为一,则看Strided部分。

2.3. 卷积步长(Strided)
这是卷积操作中另一个概念,步长。 指卷积核/filter在Image上移动的步长。



2.4. 多维Image的卷积:
如果不想只获取灰度图的特征,而是想获取RGB图像的特诊,就要对HxWx3的三维数据进行卷积。


如图所示,6x6x3的Image,被3x3x3的卷积核卷积。产生4x4x1的的结果。
此处需要注意两点:
A. 卷积核/filter的第三个维度数(3)需要和Input Image的第三个维度数(3)完全相同。如此,才能正常计算。
B. 输出特征的第三个维度是1.

2.5. Multiple filter:
多个filter.



一个卷积核/filter代表一种特征,则如果想要同时获取多个特征,则可以使用多个filter.
有多少个卷积核/filter. 则生成的特征就有几个。 也就是第三个维度数。


3. 卷积神经网络相关:
3.1: Pooling(池化):
在一次卷积操作后,可以对数据进行Pooling操作。这个操作的手段是减小数据量。目的是缩减模型大小,提高计算速度。

常用的Pooling:
A.最大池化。
B.平均池化。

最大池化是在池化框内,挑选出最大的值作为输出。最大池化通常不进行padding.
平均池化则是在池化框内,计算出平均值作为输出。

关于池化,有两点需要注意:
A. 维度:

B.池化操作不影响Channel数。
如24x24x3的Image做pooling. 步长s=2. f=2. 则输出12x12x3. channel还是为3.


3.2:卷积神经网络典型的一层:
如有64x64x3的Image。使用10个3x3x3的filter.  Valid padding
则卷积操作输出 62x62x10的数据。每个filter对应一个bias. 
每个数据加对应bias之后, 使用激活函数(如sigmod,relu)增加非线性.

则共有(3x3x3+1)x10=280个参数。 不管图片是64x64.还是1024x1024, 参数都是这么多。

后续再使用pooling. f=2, s=2.
则输出为31x31x10.  (pooling不改变channel数)

3.3: 卷积神经网络一般的构成:

即通常是:
conv1-pooling--conv2-pooling-....-FC1--FC2--softmax


3.3:卷积神经网络的优势:
与全连接神经网络相比,卷积神经网络有以下优势:
1. 参数共享:
以为如果一个特征提取器(filter)适合于Image的一本部分,那它也同样适合于另一个部分。所以这个filter参数对整个Image是共享的。
如果是全连接,1024x1024x3的Image,和1000个神经元全连接,W【1】太大。而使用filter,则大幅降低参数个数。
2. 稀疏连接:
卷积中,某个后一层的数据,只与前一层fxf个数据相关,与其它数据不相关。(局部感知野)

所以,卷积神经网络,通过更小的参数,获取了足够的特征信息。
















 

Viewing all articles
Browse latest Browse all 158

Trending Articles