1.感受卷积神经网络的强大

卷积神经网络

玩转神经网络的步骤:

深度学习入门(下)-CNN_卷积


应用:classification, retrieval, detection, segmentation,姿态估计(回归任务)

Detection:分类+回归。(找到BBox,BBox中的物体究竟是什么物体呢)


2.卷积层详解

深度学习入门(下)-CNN_反向传播_02


左:经典神经网络,是全连接结构

右:卷积神经网络,有一个深度的概念,贯穿始终

卷积神经网络的组成

深度学习入门(下)-CNN_卷积_03


&&重点是卷积层和池化层

卷积操作:用filter在图像(可看作被分成若干块)上进行特征提取,找出可以代表这个区域的值。卷积就是在原图上进行一部分一部分的特征提取,之后可以得到特征图。

filter助手的深度与连接的输入的深度必须一致。

深度学习入门(下)-CNN_卷积神经网络_04


可以多设置几个filter,方便提取不同的特征。把提取出来的特征压缩到一起。就得到了最终卷积的结果。

卷积操作可以在图像上提取特征,也可以在卷积的结果(特征图)上提取特征,即可以对特征进行特征提取。


3.卷积计算流程

深度学习入门(下)-CNN_卷积_05


特征不断的进行压缩和提取。在图像上滑动的区域与filter的大小有关,确定窗口大小。

深度学习入门(下)-CNN_卷积神经网络_06


stride = 2:滑动步长为2


4.卷积核参数分析

stride:卷积网络的步长,会影响所得特征图的大小。

要选择合适的stride。如果stride过大,那么会漏掉图像的信息。如果stride过小,虽然可以得到更多的特征信息,但是卷积计算量太大,有点得不偿失。

Pad:更好的利用边缘信息,让边缘的像素点贡献增大。Pad=1表示在原始图像的基础上添加1圈0。

特征图的大小与原始图的大小的关系计算:

深度学习入门(下)-CNN_卷积_07

深度学习入门(下)-CNN_反向传播_08

深度学习入门(下)-CNN_卷积神经网络_09


5.卷积参数共享原则

深度学习入门(下)-CNN_反向传播_10


上图表明特征图大小的计算方式。

假设是神经网络的结构,那参数就多了,不存在参数共享的机制。

神经网络的情况,全连接

深度学习入门(下)-CNN_卷积_11


参数共享:卷积网络可以进行权重共享,所以就不用考虑什么一千个点了。

深度学习入门(下)-CNN_卷积_12


6.池化层(Pooling)原理

pooling不是对原始输入图像进行操作,而是对特征图来做的。

对特征图进行压缩,或者说是进行特征的浓缩。

池化层没有权重参数。有两种方式:mean和max

pooling会使得特征图的大小急剧下降。所以,pooling也叫做downsampling。也是要造窗口,用filter表明对应特征图区域的大小,进行特征提取操作。

深度学习入门(下)-CNN_卷积_13


通常把conv+relu看成一个整体。最后与FC相连,再用从FC层得到的特征完成分类或者回归任务。


7.卷积神经网络反向传播原理

卷积层和池化层的前向传播和反向传播的计算方式。

卷积层的前向传播 w*x + b

深度学习入门(下)-CNN_卷积_14


x[n,c,h,w],n表示batch中的图片编号,图片的个数,c表示通道个数或者特征图的个数。

filter的深度要与前一层的深度完全一样。

卷积层的反向传播

深度学习入门(下)-CNN_卷积神经网络_15


dout是传下来的梯度,x是自身的梯度。

pooling的前向传播和反向传播

深度学习入门(下)-CNN_卷积_16


8.实现卷积层的前向传播和反向传播

案例实战

完成卷积后,总共有多少张特征图。num_filters

要计算的窗口大小filter_size

要让初始化参数小一些,小到weight_scale倍。

reg是正则化惩罚项

把所有的值转换成float32的形式,dtype = np.float32

Note:ReLU 和conv之间是没有参数的。pooling和relu之间也是没有参数的。只有卷积层和FC层之间是有参数的。

深度学习入门(下)-CNN_反向传播_17


pad的经典选择:pad = (filter_size - 1) / 2


9.实现Pooling层的前向传播和反向传播

代码详情参见:​​https://github.com/sunshinezhihuo/cnn​

前向传播中特征图的计算

深度学习入门(下)-CNN_卷积神经网络_18


卷积层的反向传播

深度学习入门(下)-CNN_反向传播_19


max pooling的前向传播

深度学习入门(下)-CNN_卷积_20


max pooling的反向传播

深度学习入门(下)-CNN_反向传播_21


10.经典卷积网络架构实例

AlexNet:

深度学习入门(下)-CNN_卷积_22

图解:

在1998年,已经可以用卷积神经网络做手写体识别了。

2012年,AlexNet横空出世。

Conv1:96 个助手用于提取特征。filter大小是11*11,太大了,实际是不利于提取特征的。pad是0,stride为4,只是粗粒度的提取图像特征。可以通过调节这些值完成细粒度的特征提取。

Conv2:256个助手。原因:在进行pooling后,特征图大小发生了明显的改变,不能很好的表达之前的输入。所以要使得特征图的深度增加,以更好的表达之前的输入。–可以更好的表达输入的特征。

pooling:选择同样大小的

Conv3,Conv4,Conv5:特征图大小,输入和输出不发生变化。在保证特征图不变的情况下,不断的进行卷积操作。

全连接操作dense:占内存,费参数。把之前所提取的特征都连在一起。

VGGNet:–较AlexNet深度更深,有更多的卷积层和池化层

特点:计算特征还是蛮细粒度的。

深度学习入门(下)-CNN_反向传播_23


VGG16

训练一个16层的VGGNet所需的内存和参数。

深度学习入门(下)-CNN_反向传播_24


memory:相当于立方体的体积