一.Computer Vision
无人驾驶、人脸识别
主要解决的问题:图片分类、目标检测(找到目标物体的位置)、
风格图像的转换,如下图
计算机视觉的问题是:输入的数据可以足够大,如一个64X64X3的图片(横纵分别有64个像素,有3个R、G、B通道)它的输入特征就有64*64*3=12288个,而64像素并不大,如果用1个1000X1000X3的图片,其输入特征就有3百万个。
若X=3000,000,W的维度是1000X3000,000,意味着整个矩阵有3千万个参数,难以进行数据训练避免过拟合现象,同时对计算量和内存的需求是巨大的
二.Edge Detection Example
主要讨论如何进行卷积运算
1.边缘检测:
→首先进行纵向的边缘检测识别到了纵向的栏杆和人的纵向轮廓→进行水平方向的边缘检测→→检测到了横向的栏杆线
2.纵向边缘检测
使用核或过滤器(keral,filter),卷积运算用*表示,
用3X3的卷积核卷积6X6的矩阵得到一个4X4的矩阵
实现卷积运算:python--conv-forward
tensorflow-- tf.nn.conv2d
keras--conv2D
实现卷积的基本原理:
作为一个6X6像素的图片,灰度值表示为(选择该矩阵是因为其具有分割明显的垂直线)
最终卷积得出的结果是,灰度值表示为,即可以明显地显示出垂直边界来
三、More Edge Detection
1.讨论正边缘和负边缘的差别:由亮变暗和由暗变亮的边缘过渡、其他的边缘检测器、用算法自动检测
2.其他类型的边缘检测器:
在机器视觉的论文中,对卷积核的取值并未成一个固定值。
sobel filter:给中间行赋予了更大的权值
通过深度学习的发展,卷积核的数值并不需要事先认为固定,可将其设定为参数,用BP神经网络进行拟合
四、Padding
对基本的卷积操作进行改进的操作是填充(padding)
用一个fXf的卷积核对一个nXn的图片进行卷积运算,得到的是一个的(n-f+1)X(n-f+1)的图片
存在两个缺陷:
1.会把图片缩小(但这也正是做卷积的目的之一啊,降低输入数据的特征数目)
2.角落或边界上的像素使用次数很少,丢失了靠近边界的图片信息
因此,对进行检测的图片进行填充,在周围加上一个1X1的像素块,取值为0
因此,输入维度为加上了p=padding amount,p=1,即n+2p,最后卷积得到的维度是(n+2p-f+1)x (n+2p-f+1)=nXn
若有需要,也可以用两个像素进行边缘填充,p=2或,,,,,
对于填充数目的选择,有两个备选:
1.Valid convolutions ----没有填充
2.same convolutions----填充后,使得输出的相片像素和原始的相片像素一致,
填充的个数为:
因此选择f为奇数的时候,可以实现卷积前后输入和输出的维度大小保持一致,且当卷积核的维度为 fXf 时,即奇数维度相乘,其中有一个中心点,即中心像素,这样就可以描述过滤器的位置
一般3X3的卷积核极为常见,也会有5X5,7X7,,,
五、stride convolutions
不是一次仅仅移动一步,而是可以移动多步,如下图,步长为2,显示的是第一次移动,从左边第一个元素移至地三个,
如果卷积之后的维度得不到一个整数时,可以选择向下取整
如果出现下图的情况时,表示不能继续进行计算
真正的卷积需要做一个翻转,若不做翻转的卷积在技术上视为交叉相关,但在深度学习文献中默认其为卷积
六、Convolutions over volume
讨论在三维空间中的卷积
1.对于一个RGB的三维图像,将使用一个3维的卷积核进行卷积,卷积核的维度和原始图像的维度保持一致,
但奇怪的是卷积之后的图像维度却是1维的???
因为其把27个数字在对应相乘之后相加了
通过调整3层卷积核的取值,可以达到一些目的。如:下图中通过设置RGB三个维度的卷积核取值,将GB的取值都设为0,因此可以得到红色通道的垂直边缘检测值。
如果只想要垂直边缘的检测值,而不介意到底是哪个通道的,则设立三个RGB一样的值,检测任何颜色的边缘
2.当不仅仅想检测垂直边缘,还想同时检测水平边缘、45度边缘或70度边缘呢?
即同时应用多个过滤器
将最后的结果进行叠加
七、One Layer of a convolutional network
卷积核相当于普通神经网络中的w,卷积其实就是应用线性操作计算
有两个卷积核,得到的结果特征就有2个维度
卷积神经网络的作用是训练处卷积核,等价于普通神经网络训练w
1层3X3X3,有27个参数需要训练学习得到+1个偏置单元b=28个参数
10个过滤器,就有280个参数
不管输入的图片有多少个特征,但这里参数的数目保持不变,依旧是280个
八、Simple Convolutional Network Example
讨论多层的神经网络
1.ConvNet的主要工作是设置一些超参数----卷积核的维度、步长、是否使用padding、使用了多少过滤器
常见趋势------随着卷积神经网络的加深,每一层图像的维度降低,通道增加
2.卷积神经网络中的层
卷积层--Convolution
池化层--Pooling
全连接层--Fully connected(FC)
九、Pooling Layers
卷积神经网络通常使用池化层来减少展示量,来提高计算量、并使一些特征的检测功能更强大
1.池化类型:max pooling 最大池化
1).选取每个区域中的最大值作为该区域的代表,相当于找一个f=2 s=2的卷积核,卷积核的功能是找到最大值
2).max pooling 背后的机制:把4X4区域看做某个特征的集合,即神经网络中某层经过激活函数的部分,元素取值较大表示其或许检测到了一个特定的特征,如,或许是一个垂直的边沿,也或许是一个更高或更弱的。
max pooling做的是检测所有地方的特征,四个特征中的一个要被保留在max pooling的输出中
max pooling在卷积网络中效果很好,优点是:它本身具有一套超参,没有任何参数需要学习,没有任何需要梯度相加算法学习的东西,确定了f \s,梯度下降算法不会对其有任何改变
上图是2维的最大池化操作,但对于三维来说,最大池化的输出也是3维的,这是与卷积不同的地方,其对每一层进行最大值的选取而非像卷积一样对三层进行统一的操作,即最大值采样计算是在这些N-c个通道上独立进行的
即如图像的维度是5X5X2,则输出是3X3X2
2.平均池化(Average pooling)
最大池化的选用比均值采样多很多,唯一的例外就是在深度很大的时候,使用均值采样来合并表示
注意:池化中的超参数不需要训练得到,而是一个神经网络在其中一层计算的确定函数
十、CNN Example
一个带有卷积层、池化层和全连接层的案例
1.默认将卷积层和池化层看做同一层,但在有的文献中会说卷积层、池化层,,
计算层数时只计算那些有权重的层、需要训练的层即可
2.第二层卷积发生变化
最后将5X5X16的矩阵,变为包含400个元素的向量,将其作为输入,传到一个具有120个单元的全连接层
3.关于超参数的选择:
不要自己设定,要查看文献,看其他人使用的超参数,从中选取一组适合的
再次重复:随着神经网络深度的加深,图像的宽和高会降低,而通道数目会增加
4.其他常见的神经网络模型
多个卷积层之后加一个池化层,再加多个卷积层之后再加一个池化层,最后加几个全连接层,最后加一个softmax函数
最大池化层没有任何参数,只有事先设定好的超参数
卷积层的参数越来越少
十一、Why convolutions
为何把卷积放入神经网络中会很有用?如何把卷积和神经网络合在一起?
若有一个带标签的训练数据集,如何用它来训练这个卷积神经网络?
1. 卷积神经网络的参数更少
1)参数共享:在一张图像的不同位置,使用同一个参数组
2)各层之间的联系稀疏
2.