PaddlePaddle深度学习实战之图像分类

本次课程,由PaddlePaddle开源社区成员、百度高级研发工程师党青青主讲。整个课程分为三部分:引言、模型概览、PaddlePaddle实践。


上一次PaddlePaddle课程我们介绍了数字识别的方法和实践,本次课程可以理解为是上一次课程的深化——对图像分类领域做一个完成的介绍和实战演练。


 1.  引言 


什么是图像识别呢?


图像识别就是计算机对图像进行分析、识别和理解的过程。如下图:



左侧图片,我们用眼睛很轻易的能够分辨出汽车、马路,甚至清晰度足够的话,汽车的品牌、马路的标示线等等。这些如果计算机也能够识别出来,那么就是图像识别。


那么如果更深入复杂一些,对于汽车的具体位置进行一一标注,或者说对于图片进行语义处理,比如“马路上有很多汽车”、“当前路况不拥堵”等等,那么这类型的问题就像右侧图片所示,称之为图像检测。


实际上,在自然状态下获得的图片对于计算机来讲,都包含了大量的噪音和干扰,具体的体现比如不同的光照、视角、大小、背景等等。再比如,同一种物体呈现不同的形态。而这些问题,就是图像识别的挑战。



受益于人工智能的发展,图像识别技术也获取到了质的飞跃。我们在了解最新图像识别技术之前,先了解一下传统的图像识别方法。



第一步,对需要进行识别的图片进行底层特征的提取,这些特征的设计是手工完成,并且包含了大量的噪音和干扰;


第二步,对这些大量冗余的噪音和干扰进行整合处理,提取中层特征表示;


第三步,设计分类器进行分类;常用的分类器包含SVM、Adaboost(不知道的自行百度吧~)等等。


那从上面的介绍也能看出,传统的方法步骤较为繁琐,这对于图片识别类的问题会有较大的不利。因为每个步骤都不是有确定结果的,都是需要不断优化,但优化=偏差,优化步骤越多,错误累积越大;


那区别于传统方法的新型图像识别方法:卷积神经网络。



卷积神经网络是一种端到端的方法。输入模型就是图像的像素,这是确定值,然后通过CNN(卷积神经网络)模型进行处理,可以直接得到分类的结果。


卷积神经网络的厉害之处就在于它能够通过卷积层直接学习到底层特征、中层特征,进而也能够提取到高层的语义特征。由于它一步到位的端到端处理,在近年来已经大幅度的超越传统的方法,逐渐成为业界主流。


 2. 模型概览 


本章主要介绍四个卷积神经网络模型:

  • AlexNet
  • VGG    
  • GoogleNet
  • ResNet

说到图像识别,那首先最重要的是什么?当然是要有图片了,毕竟巧妇难为无米之炊嘛。


目前对外公开最大的图像识别数据库就是ImageNet,它极大的推动了深度学习的发展和模型的优化。


那么为什么是ImageNet呢?


因为IamgeNet包含了超过一千类物体对象,超过128万张图片,人眼识别错误率低达5.1%。



受益与ImageNet的庞大图像数据容量,从上图可以看到,近年来图像识别模型的错误率从2010年最高的28.2%已经进化到2015年的3.57%。


等等,人眼识别错误率是多少来着?5.1%!


从另外一个角度看,从2012年,首次在大规模图像识别中采用CNN卷积神经网络模型进行图像识别,将识别的精度提高了10个百分点,这也成为了图像识别技术发展的转折点。


同时可以看到,神经网络模型从最初的几层网络发展到一百多层网络,其实目前最多的网络模型已经达到上千层。


下面我们对几类典型的神经网络模型做下简单介绍。


1、AlexNet 


AlexNet是2012年ImageNet大赛的冠军。这个模型就是在当年将图像识别的精度提高了10个百分点,取得了历史性的突破。



如上图所示,AlexNet的模型结构是由图像的像素和label作为输入,然后接入5个卷积层,卷积核的大小有11*11,5*5,3*3,然后接入3个全连接层。这3个全连接层的size有4096,可以说size是相当大。


另外,AlexNet引入了两个新的“积木”——Dropout、LRN。


 ┇Dropout 



相比于标准网络(全连接),Dropout会在拟合过程中将以一定的概率将神经元置零,扔掉一些隐层神经元,使得网络连接变得稀疏,这样能够起到正则化的作用,抑制过拟合。


 ┇LRN 


全称为Local Respose Normalization,是一种跨通道局部特征归一化的操作。具体是指在每个样本的C(通道)维度,对相邻的若干特征做归一化。但时间证明,意义不大。所以后来的神经网络模型基本不再使用它。我们了解即可。



2、VGG


它是于2014年由牛津大学Visual Geometry Group提出,所以模型简称为VGG。



VGG模型网络最深可达19层,上图所展示的是一个16层的神经网络,它是由13层的卷积加三层的全连接构成。全连接层size与AlexNet相同,均为4096。


同时可以看到,卷积核的大小为3*3,相比AlexNet,比较简单。


那么为什么使用3*3的卷积核呢?



上图则展示了3*3卷积优势,对原因有疑惑的话,可以自行百度一下哦~


3、GoogleNet


与VGG一样,GoogleNet也是于2014年被Google提出。它借鉴了NIN设计思想,并且设计了Inception的结构。


NIN,是Network In Network的缩写。其特点主要有两点:


一、引入了多层感知卷积网络结构,即如上图所示,普通的卷积层后增加了若干1*1的卷积,这主要是为了增加网络的非线性能力;



二、在AlexNet和VGG中,卷积网络的末端都有size非常大的全连接层,这导致神经网络的参数会变得非常多,而NIN则采用全局均值池化层来使得参数变得更少。



Inception结构:



上图左侧结构可以看到,输入后由三个卷积层和一个max pooling进行拼接得到输出。这样做造成了通道数增多,参数和计算量增大。


为了对模型降维,引入1*1卷积核,这样可以减少通道数,保持参数和计算量的稳定。


GoogleNet就是由9个Inception模块堆积而成,一共22层网络。目前该模型已经发展到了V4版本,有兴趣的同学可以查询模型的最新情况进行学习哦~


4、ResNet


VGG模型最高可达19层神经网络,GoogleNet最高可达二十二层。那么继续加深神经网络层数会怎样呢?



上图中,可以看到:在不断加深神经网络的情况下,如果不做任何的模型改进优化,会使得每一层网络的错误不断累积,最终使得精度无法再提高甚至下降,即达到精度饱和。


基于以上问题,在2015年微软研究院和Kaiming等提出了残差学习网络,即ResNet(Residual Learning Net)。残差网络的提出,可以有效的加深网络,并且能够解决网络加深造成精度饱和的问题。



其实残差网络的简单理解就是既然神经网络逐渐深化的训练会越来越差,那么我把网络相距较远的神经层进行直连,这样是不是就能保证精度了呢?如上图所示的恒等映射,这种方式使得梯度在反向传播时更为顺畅。


其实有一定数学功底的同学,针对上边的结构进行求偏导就会发现,网络的gradient就不会越来越小了,这就保证了网络的梯度不会消失。



ResNet的模型结构如上图所示,它是有多个残差网络模型堆积而成,在模型的末端,由均值池化层和全连接层构成。在ImageNet上,ResNet模型最深可达152层,同时在模型中采用了大量的BatchNorm。



上图可以看到,ResNet有效的解决了网络加深造成的精度饱和问题。


之前提到的BatchNorm,是因为网络的不断深化造成了差异不断加大,使得网络的精度越来越低,这就需要较小的学习率和比较好的参数初始化来抑制这种变化。



上图就是Batch Normlization(批归一化)的计算方式,我们可以看到在归一化中,我们加入了γ,β,是为了减少归一化造成输入特征表达的差异,通过γ,β可以一定程度还原输入参数。


Batch Norm具有较多的优势:

  • 可以使用较高的学习率;
  • 减少对参数初始化的依赖;
  • 抑制梯度弥散;
  • 起到正则化的作用;
  • 加速收敛速度;


通过上图可以看到,采用了Batch Norm的训练,网络的收敛速度变得较快。


 3. PaddlePaddle实践 


限于篇幅,本部分内容不做阐述。大家可以直接跳转视频课程进行学习。


Tips:观看完整课程视频:http://bit.baidu.com/course/detail/id/168/column/117.html



本文由机器之心经授权转载自百度AI,禁止二次转载。

工程
登录后评论
暂无评论
暂无评论~
返回顶部