卷积神经网络CNN简介

来源:互联网 发布:淘宝旧版本5.7.0下载 编辑:程序博客网 时间:2024/06/03 09:26

应求发布。

一、前言

神经网络的发展其实很早,但是因为过拟合和容易收敛到局部最优解的问题在90年代被SVM超了风头,但是后来由于深度学习概念的提出,神经网络又以CNN为代表的姿态(还有其他一些比较出名的深度网络比如(RNN,LSTM,深度信念网络等)卷土重来。CNN(Convolutional Neural Network)是相对于传统神经网络(Fully-ConnectedNeural Network)而言的,它有三大特征:局部感受野(local receptive fields),共享权重(shared weights),和池化(pooling)。传统神经网络不能有太多层,因为会容易过拟合,容易梯度消失,难以训练,但是卷积神经网络利用上述三大特征一定程度上克服了这些问题,将网络层数拓展的很深。下面就来详细说下CNN。

二、CNN详解

1.为什么CNN可以使深度网络变得可能?

①我们都知道,CNN应用在图像上是最多的,因为图像包含的信息特别多,100*100的图像包含像素信息为10000维,如果使用传统全连接层(FC),参数量大大的....

②然而图像上我们感兴趣的目标特征一般都是局部的,比整张图片小得多。卷积神经网络就是采用卷积操作,使得下一层神经元只和上一层上局部的信息连接,这就被成为局部感受野。所谓局部感受野就是让神经元通过卷积核去看局部的特征而不是整张图像。示意图如下:


③同样的特征出现在图像的不同位置,可以用同一组参数去学习。这就是所谓的共享权重。这一操作也减少了训练参数。


④适当的下采样不会丢失图片的信息,即鸟儿变小了还是鸟。严格来说只要符合香农采样定理,信息不会丢失。所以在卷积层后面都会加入池化层去减少参数。


2.CNN具体结构,一幅图像输入先经过卷积层,再经过pool层,一般采用的是最大值池化(max pooling)的方法,这个后面会讲。重复多次以后得到图像的特征映射(feature map),这可能是多通道的比较小(相对于原图)的矩阵,将其拉直(flatten)成向量,再送给后面的全连接层。


(1)卷积层:

为了方便分析,输入图像为6*6大小,假设有两个卷积核,每个卷积核是单通道的,这个卷积核里面的参数就是神经网络最后需要学习的,

初始时先采用一定方法随机初始化。

卷积的操作相信大家也比较熟悉,就是将卷积核在图像上滑动,滑动步长(stride)可能是1或者2.



如果采用步长是1的卷积操作,最后得到这样的一个4*4的矩阵:


在实际操作中,会采用padding操作(补零或者补平均值)来保证图像大小在卷积前后不变。对每个filter进行这样的操作,会得到一系列feature maps


如果是一个3通道的彩色图像,经过两个卷积核(分别是三通道的)后会得到3*2个特征映射图。


(2)pooling层,对卷积后的特征映射图进行下采样,减小参数的同时不会影响最后的目标检测。池化层一般有最大值池化(取滑动窗口中的最大值)和L2池化,取滑动窗口中的平方和再根号。最大值池化过程如下图:


选每个框中的最大值,蓝色的feature map就变成[-1,1;0,3].于是,一幅图像经过一个卷积和池化,如果卷积步长是2,池化步长也是2,加上补零操作,那么图像会缩小四倍,只有步长会使图像变小。经过卷积层的输出图像尺寸计算公式为:

W'=(W-K+2P)/S+1

其中w为原图尺寸,K为卷积核尺寸,2P为补零,S为步长大小。下图为一个卷积-池化层示意图:


经过一个卷积-池化层,就会得到一幅新的“图像”,也就是特征映射层,经过多个这样的层,就会提取出各个尺度的图像的特征。



这里对于卷积层提取的到底是图像什么特征的问题,有个连接改变了我的认识,现分享给大家(不过貌似要翻墙??):http://scs.ryerson.ca/~aharley/vis/conv/

三、具体网络分析

这里分析一个具体的卷积神经网络+全连接网络,就是RBG大神的著作YOLO(You Only Look Once),一个基于深度学习,端到端的目标检测方法。

网络结构如下:

网络前面20层借鉴著名网络结构GoogLeNet,我们可以看到整个流程,步长为2的卷积层和pool层会将图片大小缩小一倍,一共缩小了2^6次方倍,也就是448*448的图像变成了最后7*7.再详细分析下通道数:

*448*448*3通道的图像输入(64个的7*7的单通道卷积核加两次步长为2导致的缩小4倍)得到112*112*192的特征映射,再经过256个3*3*192的卷积核和一个步长为2的pool层,变成了56*56*256的特征映射。以此类推,一共20个卷积层,已经是很深的网络了。

*对于开始输入较大的图像,卷积核(感受野)比较大,后面图像缩小后卷积核基本上都比较小了(至于为什么会有很多1*1的卷积核这个改天有时间写YOLO详解的时候说清楚,这是GoogLeNet减小参数量的一个小trick)。


瞎说

卷积神经网络有了很多发展,还有各种新的卷积方式出现,好像在哪儿看到我给忘了,哎,学的速度永远赶不上大神创造的速度,哭= =




原创粉丝点击