在Android移动设备上应用机器学习

便携设备

119人已加入

描述

  介绍

  在现代世界中,机器学习被用于各个领域:图像分类、消费者需求预测、针对特定人群的电影和音乐推荐、聚类。同时,对于相当大的模型,结果计算(以及更大程度的模型训练)可能是一项资源密集型操作。

  为了在最强大的设备以外的设备上使用经过训练的模型,谷歌推出了其 TensorFlow Lite 框架。要使用它,您需要训练使用 TensorFlow 框架(不是 Lite!)构建的模型,然后将其转换为 TensorFlow Lite 格式。之后,该模型可以很容易地在嵌入式或移动设备上使用。

  在本文中,我们将描述在 Android 上运行模型的所有步骤。

  模型的训练和迁移

  例如,采用标准 MobileNet 模型之一。培训将在一组图片 ILSVRC-2012-CLS 上进行。

  为了训练,我们将在一个相当强大的 Linux OS 机器上下载一组模型:

  git 克隆https://github.com/tensorflow/models.git

  根据网站https://docs.bazel.build/versions/master/install.html上的说明安装名为 Bazel的构建系统。

  启动模型训练:

  bazel build -c opt mobilenet_v1_{eval,train}

  。/bazel-bin/mobilenet_v1_train --dataset_dir 图片集的路径

  --checkpoint_dir 检查点的路径

  这些命令将执行模型的训练并创建带有 * .tflite 扩展名的文件,以供 TensorFlow Lite 解释器使用。

  在更一般的情况下,如果需要使用使用 TensorFlow 框架描述的模型,那么在训练之后,应该使用转换器将其保存并转换为 TensorFlow Lite 格式:https://www.tensorflow.org/lite /转换/索引。在我们的例子中,这一步不是必需的。

  安卓应用

  该应用程序将包含以下功能:

  实时从相机捕获图像

  使用 TensorFlow Lite 模型进行图像分类

  在屏幕上显示分类结果

  来自https://github.com/tensorflow/examples/网站的“image_classification”示例的源代码可用作此应用程序的模板。

  实时图像捕捉

  将使用“android.hardware.camera2”框架,从 Android 5 开始可用。使用 CameraManager 系统服务,我们将通过实现 OnImageAvailableListener 接口在 onImageAvailable 方法中访问相机并接收帧。

  帧每秒会出现几次,频率取决于内置摄像头的硬件实现。为了清楚起见,我们还将通过将 TextureView 组件放置在尺寸与屏幕尺寸匹配的布局中,将从相机接收到的图像显示在屏幕上(除了 TextureView 底部的一小部分,我们将在其中放置信息关于对象分类的结果)。为此,我们将此组件与相机的输出相关联。

  在onImageAvailable方法中,我们会首先通过调用acquireLatestImage()获取最后一个可用帧。可能会出现帧分类耗时较长的情况,在此期间,相机可能会发出多帧。这就是为什么我们取最后一帧,跳过未处理的帧。框架采用 YUV420 格式。让我们通过将 convertYUV420 调用到 ImageUtils 库来将其转换为 ARGB8888 格式。由于我们需要的格式是范围从 -1 到 1 的单精度浮点数数组,因此我们也将执行此转换。

  图像分类

  在执行分类之前,在应用程序执行开始时,需要从存储在 Assets 目录中的应用程序本身的连线文件中加载模型。需要将“模型的训练与迁移”阶段获得的模型文件mobilenet_v1_1.0_224.tflite复制到该目录,以及分类对象的描述label.txt。

  之后,将创建一个 TensorFlow Lite 解释器对象。模型作为构造函数参数传递。

  通过简单地调用解释器的 run 方法来执行分类。该方法的第一个参数是一个可识别的帧,格式为浮点数数组,我们从相机中获得。第二个参数是一个浮点数组。这些数组将填充模型的性能结果。在我们的例子中,结果是一个概率数组。索引为 i 的数组的每个元素是第 i 个对象在帧中的概率。

  在屏幕上显示分类结果

  让我们在屏幕上显示最可能的对象的名称,使用文件中预加载的对象名称,名称存储在 Assets 中。在我们使用的模型中,名称是英文的,但您可以通过更改文件 labels.txt 预先将它们翻译成俄文。

  或者,您不仅可以显示最可能对象的名称,还可以显示 3-5 个最可能对象的列表以及相应的概率。

  结论

  我们考虑了如何在 Android 操作系统中使用预训练的图像分类模型。此外,模型的使用也可以在嵌入式设备上使用,因为 TensorFlow Lite 解释器还具有 C++ 接口并占用约 300 KB 的内存。

  审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分