用 TensorFlow 在 5 步内为 Android 创建自己的图像分类器
我的文章主要面向机器学习新手或不熟悉技术的人,指导他们使用 TensorFlow 在 Android 上制作一个小项目。
引言
你好!今天,我们将探索一个你可能听说过但不太明白其确切工作原理的概念:图像分类。在当今世界,我们因为其有效的益处而大量使用它。如果你是图像分类的新手,但又想用它来做一些事情,这篇文章很适合你。别担心,我们不会写太多代码,只需要按照我说的 5 个步骤执行一些命令行。
在直接开始第一步之前,我们应该先了解一些关于图像分类或机器学习的知识。
什么是机器学习和图像分类?
我们可以在 Google 上搜索机器学习,从维基百科上找到这样的定义:“机器学习是计算机系统为了有效地执行特定任务而使用的算法和统计模型的研究,它不使用明确的指令,而是依赖于模式和推理”。好的!我们可以这样理解。我们将通过大量训练数据来教会计算机做我们想让它做的事情。让我们举个例子来想象一下!我们想让计算机识别一张图片,并告诉我们图片中的物体是风扇还是不是。在此之前,我们需要给计算机大量风扇的图片和大量不是风扇的图片。在计算机“学习”之后,我们就可以用它来识别风扇了。这也是我们创建图像分类器的方式。
图像分类不仅能分类一个物体,还能分类我们想要的许多物体。
机器是如何“学习”的?
要创建自己的图像分类器,你将开始安装一些用于数据训练的材料。然后我们收集图像,训练图像分类器并进行测试!但是机器是如何学习的呢?
在这篇文章中,我将训练我的图像分类器来识别 Papa Smurf。我将用这个例子来让你了解机器学习的概况。首先,我们给计算机大量 Papa Smurf 的图片,并将它们分成两部分:训练数据和测试数据。对于每张图片,计算机将通过某些算法将其处理成数字列表。然后,计算机继续通过一系列层和公式将这些数据分成小部分。要理解这些公式,我认为你需要有良好的数学头脑。你可以以后深入研究它们。之后,计算机将获取物体(们)的特征。在这个例子中,机器可以通过一些特征来识别 Papa Smurf,例如顶部曲线形状的红色部分,下面是蓝色和白色的部分,尤其是在蓝色部分有两个白色圆圈。显然,还有其他特征来识别物体的边缘等。但以上是通用特征。这些特征是一组数字。从那时起,当我们给计算机一张图片时,它将使用上述数字集通过大量方程来返回计算机认为给定图片中物体是什么的结果。
通过学习大量的图片,机器的准确率会提高。让机器学习多次以获得尽可能高的准确率,通常超过 90% 是最好的。
当我们获得预期的准确率时,我们将停止训练过程并开始使用它!
总而言之,这是关于机器如何学习进行图像分类的概述。很有趣,对吧?现在让我们开始学习如何创建图像分类器吧!
什么是 TensorFlow?
TensorFlow 是一个大型库,提供大量用于机器学习和深度学习的工具和 API。这个库由 Google 开发。在这篇文章中,我们使用 TensorFlow 作为支持我们训练数据的库。这个库还为 Android 提供了一个很棒的 API:图像分类 API。你可以在 Google 上搜索它,它会返回大量信息,从历史到其他 API。
让我们开始吧
步骤 1:安装 Android Studio
要在 Android 上创建图像分类器,我们肯定需要安装工具来编写代码并在 Android 智能手机上运行它。安装并开始使用吧!
首先,我们通过这个链接从 Google 下载安装文件。
请选择与你的 PC 兼容的正确版本。我建议下载 .exe 文件。
如果你下载的是 .zip 文件,你需要解压缩它,将 android-studio 文件夹复制到你的 Program Files 文件夹中,然后打开 Android-studio > bin 文件夹并启动 studio.exe。
然后,按照向导中的说明完成 Android Studio 的安装。如果你不确定如何进行此步骤,Google 提供的这个链接对你来说是最好的。
在进行其他步骤之前,你应该了解一些命令行语句。首先,如果你想打开命令提示符,请转到**开始**并搜索**命令提示符**,右键单击并选择**以管理员身份运行**。
其次,要将命令提示符导航到特定文件夹,只需输入“cd
”+文件夹的目录。如果你想导航到另一个磁盘,在运行 cd
语句之前,请先运行此语句:{disk_name}
好的!现在一切正常!
步骤 2:安装一些训练材料
Python 和 Pip
首先需要安装 Python 和 pip。让我们通过这个链接下载 Python 3.5。
它对我们训练数据非常有帮助。别忘了下载与你的计算机兼容的版本。
你可以通过以下行来检查你的安装
python --version
它会返回你下载的 Python 的版本。
然后,下载 pip。复制这个链接中的代码,创建一个文本文件并粘贴进去。将文本文件保存为 get-pip.py 文件。然后打开命令提示符,进入你保存它的文件夹。然后使用以下命令行运行:
python get-pip.pip
等待片刻,直到安装完成。然后你就成功安装了 pip。
Tensorflow
TensorFlow 是这里的主要部分。只需一条命令行:
pip3 install –upgrade tensorflow
现在,用几行代码检查你的下载:
我们首先需要通过以下语句访问 Python:
python
好的!让我们来检查一下!
>>> import tensorflow as t
>>> a = t.constant(5)
>>> b = t.constant(12)
>>> sess = t.Session()
>>> print(sess.run(a+b))
如果返回 17
,你就已经准备好进入下一步了!如果你遇到任何错误,只需复制错误信息并在 Google 上搜索,那里有很棒的社区支持。我刚开始学习 TensorFlow 时就这么做的。
TensorFlow Repo 用于重新训练
我们将需要一些带有复杂算法的代码来重新训练我们的模型,使其能够识别 Papa Smurf。但这些代码已经写好了,就在这个 retrain.py 文件中。从这个链接下载。
TensorFlow 图像分类器
我们将使用 TensorFlow 的图像分类器示例来部署我们的模型。这将节省大量的编程时间,并为你提供清晰的思路,一个运行中的机器学习应用。这将是你打下基础。让我们下载这个 TensorFlow repo 来克隆一个图像分类应用程序。 查看此链接。
步骤 3:收集图像
现在,尽你所能获取尽可能多的图像。我收集了 300 张 Papa Smurf 的图片。本训练中使用的图像必须是 .jpg 文件,大约 300x300 即可。如果分辨率更高,训练时间会更长。
别忘了将它们保存在包含你图像的文件夹中,并以对象名称命名(名称中不要包含空格)。看这个例子:
…images/papa_smurf
好的!这一步很简单,对吧?进入下一步!
步骤 4:重新训练数据
从零开始?
训练一个机器识别物体不仅耗时,还需要强大的 CPU。所以我们不能从零开始。幸运的是,我们可以重用已经训练过的模型。我的意思是,我们将继续使用通过大量数据训练过的数字集。这些模型已被用于识别许多物体,如人、瓶子、鼠标、显示器等。我们可以使用这些特征来训练我们自己的物体。有很多模型,但我们需要 Mobile_net
来训练我们的模型,因为我们需要一个小型而快速的模型来部署到 Android 上,以便实时使用。尽管 Mobile_net
速度快且体积小,但其准确率不如 Inception、Resnet 等其他模型。
我们可以从这个链接下载 Mobile_net
V1 模型。
我选择了 MobileNet_v1_1.0_224
模型,并将其保存在一个名为 mobilenet 的文件夹中。
下载并将其保存到一个易于访问的文件夹中。
开始重新训练
好的!这一步似乎就快结束了。将命令导航到你保存 retrain.py 文件的文件夹。我应该提到,在我的例子中,我将 Mobilenet 和训练图像文件夹保存在与 retrain.py 文件相同的文件夹中,这样我就不需要输入长目录了。如果不明白,可以看我的例子。我们需要一个阶段来分析磁盘上的所有图像并为重新训练过程做准备。我们称之为 Bottlenecks。所以第一个语句是指明 Bottlenecks 的保存位置。现在,让我们开始重新训练!
运行这些语句:
python retrain.py
--bottleneck_dir=/{directory_to_bottlenecks }/bottlenecks
--how_many_training_steps 1000
--model_dir=/{directory_to_folder_you_saved_the_mobilenet}/mobileNet
--output_graph=/{directory_to_folder_you_want_to_save_the_model}/papa_graph.pb
--output_labels=/{directory}/papa_labels.txt
--image_dir /{directory_to_images_folder}
输出是 retrained_graph.pb 和 retrained_labels.txt 文件,它们将在最后一步中使用。这个 .pb 文件就是我们识别 Papa Smurf 的模型。
步骤 5:将图部署到 Android
要在 Android 上使用模型,只需打开 Android Studio,然后按照 tensor-master/tensorflow/examples/android 目录启动 TensorFlow 图像分类器的“android
”项目。
为了方便在其他设备上使用,我们应该将 retrained_graph.pb 和 retrained_labels.txt 复制到项目的 asset 文件夹中。将这些文件复制到这个目录:tensorflow-master\tensorflow\examples\android\assets。
然后,在左侧的**项目**窗格中或在 tensorflow/examples/android/src/org/tensorflow/demo 目录中找到 ClassifierActivity.java 文件。打开它,如果直接进入文件夹,右键单击并选择用记事本打开。在该 .java 文件中搜索:
private static final String MODEL_FILE =
private static final String LABEL_FILE =
然后将它们替换为以下行:
private static final String MODEL_FILE = “file:///android_asset/papa_graph.pb”;
private static final String LABEL_FILE = “file:///android_asset/papa_labels.pb”;
恭喜!
好了!连接你的 Android 智能手机到电脑上,运行项目。打开图像分类器应用程序,开始玩吧!!!
这是我的应用程序!
结论
总而言之,这里有一些给那些不熟悉机器学习或想在第一次学习时做一些疯狂事情的新手提供的指导。通过一个项目开始学习新事物确实是一个很好的方法。它会引发你许多问题,你可以一步一步地探索它们。当你开始做一个项目时,你可能会遇到很多问题,不要害羞,这是正常的。正如我所提到的,只需复制错误描述并将其粘贴到 Google 搜索栏,然后按 Enter。它会返回大量关于如何解决它的结果。相信自己。这可能需要时间,但你一定会完成。现在,轮到你了。去创建你自己的图像分类器吧!!!
历史
- 2019 年 6 月 18 日:初版