本文 转自:语义分析的一些方法(三),主要论述了基于深度学习方法的图像语义分析,包括图片分类、图片搜索、图片标注(image2text、image2sentence),以及训练深度神经网络的一些tricks,最后还简要地提及语义分析方法在腾讯广点通上的实际应用。
文中没有复杂的公式、原理,但总结了图像语义分析一些state of the art的方法,值得一读。
——by wepon
3 图片语义分析
3.1 图片分类
图片分类是一个最基本的图片语义分析方法。
基于深度学习的图片分类
传统的图片分类如下图所示,首先需要先手工提取图片特征,譬如SIFT, GIST,再经由VQ coding和Spatial pooling,最后送入传统的分类模型(例如SVM等)。

图23. 传统图片分类流程图
传统方法里,人工特征提取是一个巨大的消耗性工作。而随着深度学习的进展,不再需要人工特征,通过深度学习自动提取特征成为一种可能。接下来主要讲述卷积神经网络在图片分类上的使用。
下图是一个经典的卷积神经网络模型图,由Hinton和他的学生Alex Krizhevsky在ILSVRC(Imagenet Large Scale Visual Recognition Competition) 2012中提出。 整个网络结构包括五层卷积层和三层全连接层,网络的最前端是输入图片的原始像素点,最后端是图片的分类结果。一个完整的卷积层可能包括一层convolution,一层Rectified Linear Units,一层max-pooling,一层normalization。

图24. 卷积神经网络结构图
对于每一层网络,具体的网络参数配置如下图所示。InputLayer就是输入图片层,每个输入图片都将被缩放成227*227大小,分rgb三个颜色维度输入。Layer1~ Layer5是卷积层,以Layer1为例,卷积滤波器的大小是11*11,卷积步幅为4,本层共有96个卷积滤波器,本层的输出则是96个55*55大小的图片。在Layer1,卷积滤波后,还接有ReLUs操作和max-pooling操作。Layer6~ Layer8是全连接层,相当于在五层卷积层的基础上再加上一个三层的全连接神经网络分类器。以Layer6为例,本层的神经元个数为4096个。Layer8的神经元个数为1000个,相当于训练目标的1000个图片类别。

图25. CNN网络参数配置图
基于Alex Krizhevsky提出的cnn模型,在13年末的时候,我们实现了用于广点通的图片分类和图片检索(可用于广告图片作弊判别),下面是一些示例图。
图片分类示例:

图26. 图片分类示例图
图片检索示例:


图27. 图片检索示例图
图片分类上的最新进展
在ILSVRC 2012中,Alex Krizhevsky基于GPU实现了上述介绍的,这个有60million参数的模型(简称为AlexNet),赢得了第一名。这个工作是开创性的,它引领了接下来ILSVRC的风潮。2013年,Clarifai通过cnn模型可视化技术调整网络架构,赢得了ILSVRC。2014年,google也加入进来,它通过增加模型的层数(总共22层),让深度更深[48],并且利用multi-scale data training,取得第一名。baidu最近通过更加“粗暴”的模型[44],在GooLeNet的基础上,又提升了10%,top–5错误率降低至6%以下。具体结果如下图所示。

图28. ImageNet Classification Result
先简单分析一下“GoogLeNet”[48,51]所采用的方法:
- 大大增加的网络的深度,并且去掉了最顶层的全连接层:因为全连接层(Fully Connected)几乎占据了CNN大概90%的参数,但是同时又可能带来过拟合(overfitting)的效果。
- 模型比以前AlexNet的模型大大缩小,并且减轻了过拟合带来的副作用。Alex模型参数是60M,GoogLeNet只有7M。
- 对于google的模型,目前已有开源的实现,有兴趣请点击Caffe+GoogLeNet。
再分析一下“Deep Image by baidu[44]”所采用的方法:
- Hardware/Software Co-design。baidu基于GPU,利用36个服务节点开发了一个专为深度学习运算的supercompter(名叫Minwa,敏娲)。这台supercomputer具备TB级的host memory,超强的数据交换能力,使能训练一个巨大的深层神经网络成为可能。而要训练如此巨大的神经网络,除了硬件强大外,还需要高效的并行计算框架。通常而言,都要从data-parallelism和model-data parallelism两方面考虑。
- data-parallelism:训练数据被分成N份。每轮迭代里,各个GPU基于各自的训练数据计算梯度,最后累加所有梯度数据并广播到所有GPU。
- model-data parallelism:考虑到卷积层参数较少但消耗计算量,而全连接层参数相对比较多。所以卷积