图像识别
目标检测
风格迁移
挑战:输入的数据可能会非常的大。很难计算,同时很容易导致过拟合。
在CNN中,会先检测边缘,比如垂线。
我们称中间的矩阵为核或者过滤器。它和给定的输入图片做卷积运算。具体为图片--->过滤器---->图片。
如上图所示,对于矩阵中不同值的边界正好是对应的垂直边缘。这就是卷积运算可以计算垂直边缘的原因。
如上图上边所示检测的分别为垂直边缘和水平边缘。而下图则是使用通过水平边缘过滤器得出水平边缘。使用不同的滤波器得到的边缘也不相同。可以将过滤器的值设置为参数,然后通过数据反馈(反向传播算法)让神经网络自动学习他们。
如上图所示,每次输入的图像和给定的过滤器进行卷积运算后得到的对应的图像的大小为(n-f+1)*(n-f+1),其中n为输入图像的大小,而f为过滤器的大小。但是这样会导致两个不好的后果。①输出的图像不停的缩小。②图像边缘大部分信息都丢失了。因此引入padding(填充)。通过padding可以改变输入的大小这样就会改变输出的大小,同时填充的值在边缘,因此就会使得原本的信息得以保留。一般而言只使用奇数的过滤器会比较好一点
如图所示,由此可以看出卷积的步长对应的就是在输入的图像矩阵中移动的位数,本例子中步长为2,因此对应的乘积就是以2为间隔如上图中左上角所示。而我们通过公式判断输出的矩阵的维度。(n+2p-f)/s+1 其中n代表的是输入的图片的维度,p代表的是padding,f代表的是过滤器的维度,s代表卷积步长。最后再向下取整便得出对应的输出矩阵的维度。
想要即检测水平又检测垂直,需要使用两个不同的过滤器。生成的结果堆叠在一起。输入的图像和给定的滤波器的高和宽可以不一样,但他们的通道数(深度)必定需要相同。
如上图所示为一层卷积的计算过程。其中对应的输入为(6*6*3)经过一层卷积后变为(4*4*2),我们可以得知实际上有几个过滤器就会提取几个特征。
一个简单的CNN模型。一个典型的CNN输入图像的高和宽会随着网络深度的加深而逐渐减小。
一个2*2区域,步幅为2.池化层有许多超参数,但并没有要学习的参数。 一个固定运算。
数字越大越能表明提取到了某样特征。maxpooling表明在过滤器中提取到某个特征,保留其最大值。
池化层不改变通道数。
平均池化比较少见。
对于层数来说,一般只计算有权重和参数的层。
我们由上图可得知随着层数的加深,对应的激活值,即维度在不断地下降。
可以借鉴别人的网络架构来进行自己的研究。
LeNet-5:针对灰度图像。
用来对于MNIST手写数字的识别。
AlexNet:
VGG-16:
VGG-16一共包含约1.38亿个参数。但结构不复杂。图像缩小的比例和信道增加的比例是有规律的。
非常深的网络很难实现,因为存在梯度消失和梯度爆炸的问题。
残差块:
a[l]插入的时机是在线性激活之后,ReLU激活之前。
跳远连接:
a[l]跳过一层或者好几层从而将信息传递到神经网络的更深层。
残差块可以构建更深的神经网络。
如上图所示,共有五个残差块构成了一个残差网络。而下面是对应的训练的结果,随着神经网络层数的加深,理论上错误率应该是越来越小的,实际上由于梯度爆炸和梯度消失的问题,在达到一个阈值之前神经网络的错误率确实是在下降的,但在超过该阈值后会变得越来越大。而残差神经网络的存在便解决了该问题。
1*1卷积的作用是便利给定的矩阵的元素,计算左图中32个数字和过滤器中32个数字的元素智能乘积。再应用Relu激活函数。我们可以将其当作连接了一个全连接层。可以在输入层实施一个非平凡计算。这种方法通常为1*1卷积。有时称为network in network。1*1卷积层给神经网络添加了一个非线性函数,从而减少或保持信道数量。减少通道是通过ReLU
Inception网络或Inception层的作用就是代替人工来确定卷积层中的过滤器类型,确定是否要构建池化层或卷积层。
使用别人已经训练好的网络更加高效。ImageNet。
1.数据增强
2.随机裁剪
3.色彩转换
图像识别:如何看图片的问题,看过以后告诉你这是不是猫。
对象检测:看一幅图,告诉你图片里的物体。