一种移动式TensorFlow平台的卷积神经网络设计方法
2017-10-26李河伟
李河伟
摘要:近年来,随着卷积神经网络理论的快速发展和移动设备的普及,基于移动式TensorFlow平台构建定制化的卷积神经网络分类模型,成为深度学习爱好者的主要研究方向之一。将个人图片库作为训练集输入模型,通过调整阀值和权值,最终获得定制化的分类模型,满足个性化的分类需求。对移动式TensorFlow平台、卷积神经网络及其移植到移动平台上的相关步骤进行了研究。通过此开发流程,为进一步使用移动式TensorFlow平台解决现实图片分类问题提供了参考。
关键词:移动式;TensorFlow;卷积神经网络;人工智能
中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2017)22-0179-04
1概述
即便是普通人也可以在有摄像头的手机上运行Tensofr-How的Inception分类器,甚至是自定义的分类器。然后只要把摄像头对准希望做分类的东西,TensorHow就会给出结果一它认为这是什么东西。2017年2月16日PeteWarden在Tensor-How Dev Summit 2017上的一篇以Mobile a11d Embedded Tensor-How为题的报告,引发了深度学习爱好者对于移动式Tensor-How平台的热情。
一个皮肤癌图像分类的应用案例:一位小哥拿到了一批皮肤癌的数据,使用一个pretrained的inception-v3这些数据做了一个inference,并把它搭建在手机上,完成一个app用来做皮肤癌的早期检测,并实现了很高的准确率。这是一个利用廉价的移动设备,结合计算机视觉和深度学习技术,有效检测是否有皮肤癌,大大节省医疗检测成本的成功案例。
TensorHow作为一个开源的深度学习平台,实现了对卷积神经网络的良好支持。卷积神经网络提供了一种端到端的学习模型,模型中的参数可以通过传统的梯度下降方法进行训练,经过训练的卷积神经网络能够学习到图像中的特征,并且完成对图像特征的提取和分类。它在图像分类、语音识别、目标检测等领域取得了一系列重大的研究成果。而移动式的TensorFlow平台更是为卷积神经网络的应用插上了飞翔的翅膀。下面,分别介绍移动式TensorFlow平台和卷积神经网络。
2移动式TensorFlow平台
2.1TensorFlow简介
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能开源学习系统。如今Google对待TensorHow系统,有点类似于该公司对待旗下移动操作系统Android。它是一个采用数据流图(dataflow graphs),用于数值计算的开源软件库。其命名来源于本身的原理,Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。Tensofflow运行过程就是张量从图的一端流动到另一端的计算过程。张量从图中流过的直观图像是这个工具取名为“TensorFlow”的原因。
Tensorflow的特性:
1)高度的灵活性:TensorFlow不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用TensorFlow。
2)可移植性(Portabihty):Tensorflow可以运行在台式机、服务器、手机移动等等设备上。而且它可以充分使用计算资源,在多CPU和多GPU上运行。
3)多语言支持:Tensorflow提供了一套易用的Pvthon使用接口来构建和执行graphs,也同样提供了一套易于C++使用的接口f目前训练神经网络只支持python,C++接口只能使用已经训练好的模型)。未来还会支持Go、Java、Lua、JavaScript、R等等。
4)性能最优化:TensorFlow给予了线程、队列、异步操作等最佳的支持,TensorFlow可以把你手边硬件的计算潜能全部发挥出来,它可以充分利用多CPU和多GPU。
本文主要借助此平台搭建个人专属的自学习图片分类器模型,并实现在移动设备上实时地进行图片的识别分類工作。
2.2移动式TensorFlow平台的搭建
1)TensorFlow的安装可参考官方提供的教程。
下面仅演示在Ubuntu 16.4 64位python2.7环境下,通过pip安装TensorFlow的相关代码
#Ubuntu/Linux 64-bit
#Ubuntu/Linux 64-bit,CPU 0nly,Python 2.7:
2)然后下载安卓的SDK和NDK,并将其解压缩到你的Ten-sorFlow目录里。
下载额外的SDK编译工具
下载安卓NDK,并解压缩:
下载分类器Inception
为了使用安卓工具编译应用,需修改WORKSPACE文件
拷贝下面的代码,并替换掉WORKSPACE文件里的相应行。
3)开启USB调试和adb工具
为了测试调试设置是否成功,可以把手机连上电脑,并用下面的命令安装adb,并测试设备:
至此,就可以在安卓设备上使用TensorFlow和Inception分类器了。需要注意的是,这个分类器会有偶尔出错的时候。原版的Inception分类器只能识别ImogeNet挑战里出现的1000种图片分类。
2.3TensorFlow的数据流图
TensorFlow包含图、张量、操作、会话、变量等基本概念。其程序通常被组织成一个构建阶段和一个执行阶段。构建阶段,op的执行步骤会被描述成一个图;执行阶段,创建一个Session对象,使用会话执行图中的op,使用完成后关闭以释放资源。用数据流图可表示如图1:
3卷积神经网络设计
LeCun等基于Fukushima的研究训练的LeNet-5模型是经典的卷积神经网络结构,后续的很多改进都是基于此模型的。李宏毅教授对此模型给出了以下3条解释。
1)Some patterns are much smaller than the whole image;
2)The same patterns appear in different regions;
3)Subsampling the pixels will not change the object.
3.1卷积神经网络的基本结构
最早Yann LeCun教授提出的卷积神经网络,用于图像识别,充当分类器的功能。卷积神经网络LeNet5的结构,如图2LeNet5结构图所示。
如图2LeNet5结构图所示,卷积神经网络主要由5部分组成,分别是输入层、卷积层、池化层、全连接层和输出层。
输入层大小取输入图像的大小,若是彩色图像,则R、G、B三色分别用x1、x2、x3表示。可以不对图像做预处理。
卷积层可通过卷积操作从小到大提取图像的特征,层数越多,特征的表达能力越强。其具体操作,如图3卷积层操作示意图所示。
池化层通过均值池化或者最大值池化,可以计算出卷积层输入的局部区域的重要特征值,实现降维和保持空间不变性,避免过拟合。池化层操作如图4池化层操作示意图。
如图4池化层操作示意图,左侧黄色矩阵大小是6*6,要进行大小为3*3的池化(红色矩阵表示),对应到右侧矩阵中每个元素的值,是左侧红色矩阵每个元素的值求和后再除以红色矩阵的元素个数,即为平均值形式的池化。
全连接层会根据不同的应用情况,对前一层输出的特征进行映射。可选用sigmoid或tanh函数作为激活函数。
输出层的形式面向具体的应用。采用softmax回归就可以把卷积神经网络变成一个分类器,产生一个图像类别的向量或者属于哪一类的概率大小。
3.2卷积神经网络的应用
卷积神经网络由于其强大的特征表达能力,被应用与图像识别、人脸识别、语音识别等方面。
判断给定图像属于哪个类别属于图像分类。Hetn等人通过把空间金字塔池化层加入最后一个卷积层和第一个全连接层中,打破了传统CNN模型图像输入大小固定的限制,并在LS—VRC-14的比赛中获得了很好的成绩。2016年,HeIs]等人采用捷径连接技术实现跨层连接的残差网络解决了退化问题,并在LSVRC-15的图像分类比赛中取得第一名。
在人脸识别中,DeepFaee先对图像进行了3D人脸对齐的预处理,然后在把它输人的卷积神经网络中。FaceNet通过引入三元组损失函数进行端对端学习,在LFW和YouTube的人脸数据库中测试的准确率分别为99.63%和95.12%。DeeplD3把人脸辨识一人脸确认的监督信号加入网络中间层,在最后的特征提取层中不共享权值,在LFW的人脸识别准确率为99.53%。
Hamidtm在CNN卷积层采用受限权值共享技术,并结合隐含马尔科夫链建立的语音识别模型比常规模型的识别错误率降低了10%。
3.3移动设备下的卷积神经网络
對个人图片做分类,就必须用移动设备的图片文件数据重新训练,比如在安卓设备上使用定制化的分类器,让它学会通过识别不健康的叶子来发现营养不良或者有病害的植物。移植过程如下。
1)编译图片训练优化器
2)对个人图片数据做训练
3)往assets目录下放训练后的标签
4)编辑java文件,并替换相应变量
替换如下变量
5)重新编译APK
重新安装APK
至此,就可以使用个人定制的分类器在移动设备上进行图片分类的工作。
4总结
TensorFlow自2015年开源以来,就被广泛应用与学术界,用于解决深度学习中神经网络的构建、参数优化等方面的困难。TensorFlow工作流程相对容易,API稳定,稳定性好,能与Numpy完美结合,并且能在各种类型的机器上运行,从超级计算机到嵌入式系统。谷歌对移动式TensorFlow平台的支持和研发,为极客提供了更大的开发平台和应用场所。卷积神经网络作为深度学习的一个热门分支,被应用于图像处理、语音识别、人脸识别等各个领域。以移动式TensorFlow为平台,构建并训练定制化的卷积神经网络成为了当前的一个研究热点。如何提高卷积神经网络模型的训练效率和优化构建放式,以使其更好的应用于移动设备,是今后的进一步研究方向。