一、计算机视觉
计算机视觉是深度学习应用的主要方向之一,一般的CV问题主要有:
- Image Classification
- Object detection
- Neutral Style Transfer
使用传统神经网络处理计算机视觉的一个主要问题在于输入层的维度很大,使得网络权重W过于庞大。这会造成以下两个后果,一是神经网络过于复杂,容易过拟合,二是所需内存、计算量较大。
二、边缘检测
最常见的边缘检测有两类,一是垂直边缘(vertical edges),二是水平边缘(horizontal edges)
图片的边缘检测可以通过与相应的滤波器进行卷积来实现。
∗ ∗表示卷积操作。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。
可以对输出图片取绝对值操作
*
这两种滤波器的特点是增加图片中心区域的权重。
如果我们想检测图片的各种边缘特征,而不仅限于垂直边缘和水平边缘,那么filter的数值一般需要通过模型训练得到,类似于标准神经网络中的权重W一样由梯度下降算法反复迭代求得。CNN的主要目的就是计算出这些filter的数值。确定得到了这些filter后,CNN浅层网络也就实现了对图片所有边缘特征的检测。
三、padding
原始图片nn,卷积核ff,卷积后的图片为n-f+1,这会带来两个问题:
- 输出图片尺寸变小
- 原始图片边缘信息对输出贡献得少,输出图片丢失边缘内信息
对原始图片尺寸进行扩展,扩展区域补零
此时输出尺寸变为(n+2p-f+1),如要保持尺寸不变,则
valid convolutions:不填充
same convolutions:,输入输出相等
四、卷积步长 stride
此时,输出尺寸为
互相关(cross-correlations)与卷积有区别
真正的卷积会先将filter旋转180°再进行滑动计算
目前为止我们介绍的CNN卷积实际上计算的是相关系数,而不是数学意义上的卷积。但是,为了简化计算,我们一般把CNN中的这种“相关系数”就称作卷积运算。之所以可以这么等效,是因为滤波器算子一般是水平或垂直对称的,180度旋转影响不大;而且最终滤波器算子需要通过CNN网络梯度下降算法计算得到,旋转部分可以看作是包含在CNN模型算法中。总的来说,忽略旋转运算可以大大提高CNN网络运算速度,而且不影响模型性能。
五、多通道卷积
3通道图片的卷积运算与单通道图片的卷积运算基本一致。过程是将每个单通道(R,G,B)与对应的filter进行卷积运算求和,然后再将3通道的和相加,得到输出图片的一个像素值。
为了进行多个卷积运算,实现更多边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。这样,不同滤波器组卷积得到不同的输出,个数由滤波器组决定。
输出尺寸为,n’c为滤波器组个数
六、单层卷积网络
七、简单卷积神经网络示例
输出层可以是一个神经元,即二元分类(logistic);也可以是多个神经元,即多元分类(softmax)。最后得到预测输出.
随着CNN层数的增加,尺寸一般逐渐减小,通道数逐渐增大
八、池化层
Pooling layers是CNN中用来减小尺寸,提高运算速度的,同样能减小noise影响,让各特征更具有健壮性。一般不做padding
Max pooling的好处是只保留区域内的最大值(特征),忽略其它值,降低noise影响,提高模型健壮性。而且,max pooling需要的超参数仅为滤波器尺寸f和滤波器步进长度s,没有其他参数需要模型训练得到,计算量很小。
除了max pooling之外,还有一种做法:average pooling。顾名思义,average pooling就是在滤波器算子滑动区域计算平均值。
输出尺寸
参数常用取值 f=2,s=2,相当于长宽减半
九、卷积神经网络示例
图中,CON层后面紧接一个POOL层,CONV1和POOL1构成第一层(POOL层没有权重需要训练,不过也有人将池化层单独作为一层),CONV2和POOL2构成第二层。特别注意的是FC3和FC4为全连接层FC,它跟标准的神经网络结构一致。最后的输出层(softmax)由10个神经元构成。
整个网络各层的尺寸和参数如下表格所示:
十、卷积神经网络特点
参数数目少
- 参数共享:一个特征检测器对图片某块区域有用,同时也可能作用在图片其他区域
- 连接的稀疏性:因为滤波器算子尺寸限制,每一层的每个输出只与输入部分区域有关