MobileNet教程:用TensorFlow搭建在手机上运行的图像分类器

量子位 / 2018年10月15日 12:46

手机

王瀚宸 编译自 Hackernoon

在移动端本地运行神经网络成了明显的趋势,Google还为此推出了MobileNet框架。

MobileNet框架怎么用?Coastline Automation创始人Matt Harvey最近在Medium上发布了一份教程,教你用MobileNet来识别道路。

Coastline是一家用深度学习来监测行车情况、防止车祸的公司。以下是Matt Harvey的教程:

作为卷积神经网络中的新成员,MobileNet有着很多令人惊艳的表现,今天我们就用数据集训练一个试试。

MobileNet具有以下酷炫的特点:

1.它们非常非常小

2.它们非常非常快

3.它们非常非常准

4.它们很容易调试

这些特点是非常重要的。

目前,很多移动端上的深度学习任务都是在云端完成的。当你想要让手机识别一张图片,程序会先把这张图片通过网络发送到远程服务器上进行分类,随后再将结果发送回手机上。

随着手机计算能力的迅猛增加,加上SqueezeNet和MobileNet等架构让计算机视觉所需要的网络复杂度快速下降,深度学习计算很快就能完全在设备本地完成。

移动设备本地的深度学习,除了能在没有网络连接的情况下正常运行之外,另一个长处是节省时间,比如说一个车辆安全应用,对反应速度要求非常高,把图片传送到云端处理显然是不现实的。

因此,本文按照以下的顺序来介绍MobileNet:

1.MobileNet是什么?

2.怎样搭建自己的数据集,在TensorFlow下训练MobileNet?

3.怎样用TensorFlow训练一个在ImageNet上训练过的模型?

4.跟Inception V3相比,MobileNet的表现怎么样?

5.怎样使用再训练(retrained)的MobileNet来识别图片?

MobileNets是什么?

MobileNet是由Google的研究者们设计的一类卷积神经网络。它们在手机上运行,计算消耗小、运行速度快,因此很适合在移动端上做应用。

MobileNet和传统的CNN在结构上的差别主要是,传统CNN中在批规范化和ReLU(线性整流函数)前边,是一个3×3卷积层,而MobileNet将卷积过程分为一个3×3深度方向的卷积和一个1×1点对点的卷积。如果你想了解个中细节和缘由的话,我强烈建议你读一下他们的论文。

论文:

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

https://arxiv.org/pdf/1704.04861.pdf

那么MobileNet的短板是什么呢?准确性。跟我们熟悉的那些大型、消耗巨大资源的神经网络相比,MobileNet的准确性不如前者高。但是MobileNet的长处是能够在功耗和性能之间寻求良好的平衡点。

MobileNet拥有两个表观变量:width multiplier和resolution multiplier,我们可以通过调整这两个变量值来使得模型适应具体问题。Width multiplier让我们把网络变得稀疏,而resolution multiplier可以改变输入图片的分辨率,从而降低每层网络间的内部表达。

Google开源了MobileNet,并随之开放了16个ImageNet checkpoint,每一个对应一种不同的参数结构。这为我们训练自己的小又快的图像分类器提供了一个良好的开端。

搭建数据集,训练MobileNet

我们今天的挑战是搭建一个能够识别道路和非道路图片的分类器。这就像《硅谷》里面的“hot dog, not hot dog”应用,把热狗改成了道路。

为什么选择道路呢?因为在Coastline,我们正在基于计算机视觉开发用于汽车安全的移动应用。跟所有涉及视觉的app一样,用户隐私是非常需要考虑的一点。所以当用户打开我们的app时,系统会首先检查它看到的是否是道路。如果不是的话,那么它就会关闭摄像头。我们希望这个过程能够在尽可能快速、只占用少量资源的情况下完成。

为了解决这个问题,我们需要先为它创建数据集。我们的目标是收集10,000张图片,道路和非道路的图片大概各占50%。

我们从以下几个来源得到相应的图片:

  • 从我们自己的数据集里,随机选取4,000张显然是道路的图片;

  • 从ImageNet里随机选取2000张显然不是道路的图片;

  • 从网上选取3000张不那么明显的非道路图片,以防分类器学会的是区分“天空、非天空”;

  • 从网上选取1000张不那么明显的道路图片,以防分类器把挡风玻璃上的倒影等特征错认为道路特征。

我们将会把图片放进“道路”或“非道路”文件夹,这就是我们在重新训练网络之前所需要的图片上的准备工作。

此外,从网上搜集的图片可以有效地增加你的数据集的多样性,但这样做也有一个缺点,网站上图片的标签往往有些混乱。比如说,通过搜索“道路风景(road landscape)”所得到的图片可能是在美美的自然风光背景下郑重有条通向前方的道路:

或者是群山中有一条隐约可见的小路:

为解决这个问题,我们可以挨个浏览每张图片然后手动进行标注,但如果是这样那我们还要Deep learning干嘛呢?返回搜狐,查看更多

责任编辑:

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。