python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

TensorFlow-Lite植物物种识别介绍深度学习模型非常庞大,并且需要大量计算才能进行推理。我们是否可以训练需要更少计算能力、更小并且可以部署在手机上的深度学习模型?嗯,答案是肯定的。通过将使用 ArcGIS API for Python训练TensorFlow lite模型的功能集成,我们现在可以训练可部署在移动设备上且尺寸更小的 DL 模型。
我们可以在哪里使用它们?我们可以使用它们来训练多个 DL 模型来执行专门针对移动设备的分类任务。我们所做的一个这样的集成是在“Survey123”应用程序中,这是一个简单而直观的以表格为中心的数据收集解决方案,供多个测量员在执行地面调查时使用,我们集成了一个 tf-lite 模型,在单击它的同时对不同的植物物种进行分类应用程序中的图片,本文有完整的python识别植物示例。
python如何识别植物?本笔记本旨在展示这种能力来训练深度学习模型,该模型可在移动应用程序中使用 TensorFlow Lite 框架进行实时推理。例如,我们将训练之前讨论过的相同植物物种分类模型,但使用较小的数据集。

python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
Survey123 应用程序中植物分类器的快照
获取数据进行分析PlantCLEF数据分为三组:
  • 基于在线协作生命百科全书 (EoL)  [1]的“可信”训练集。
  • “嘈杂”训练集(从 Google 和 Bing 图像搜索结果中获得,包括错误标记或不相关的图像[2]。
  • 前几年(2015-2016 年)的图像仅描绘了该物种的一个子集[3]。
TensorFlow-Lite植物物种识别:对于这个笔记本,我们从基于在线协作生命百科全书[1]的“可信”训练集中提取了一个子集,其中包含 100 个植物物种的 39,354 张图像,并使用物种名称更改了它们的物种编号,例如物种编号42'改为'Acanthus mollis'。关于物种名称的信息存在于与每个图像文件一起存在的“xml”文件中。我们编写了一个脚本来执行货币名称和货币编号的映射。要了解我们是如何做到这一点的,请查看这里的脚本。
python识别植物的方法 - 使用以下命令运行下载的脚本。它需要传递三个参数:
  • 下载 PlantCLEF 数据的路径
  • 目标文件夹的路径
python changes_specie_name_with_number.py 数据/路径目标/路径
python识别植物示例:训练图像分类模型python如何识别植物?我们将使用arcgis.learnArcGIS API for Python 中的模块训练我们的模型。arcgis.learn包含本研究所需的工具和深度学习能力。此处提供了安装和设置环境的详细文档。
必要的导入
首先,我们需要为 ArcGIS 设置环境变量以启用 TensorFlow 作为后端。要执行此操作,我们可以将ARCGIS_ENABLE_TF_BACKEND参数的值设置为 1,如下所示。
In  [1]:
%env ARCGIS_ENABLE_TF_BACKEND=1

%env ARCGIS_ENABLE_TF_BACKEND=1

In  [2]:
import os from pathlib import Pathfrom arcgis.gis import GIS from arcgis.learn import prepare_data, FeatureClassifier

下载数据集
In  [2]:
gis = GIS('home')

In  [3]:
training_data = https://www.lsbin.com/gis.content.get('81932a51f77b4d2d964218a7c5a4af17') training_data

Out[3]:
python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
train_a_tensorflow-lite_model_for_identifying_plant_species
python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
Image Collection by api_data_owner
Last Modified: August 31, 2020
0 comments, 0 views
In  [4]:
filepath = training_data.download(file_name=training_data.name)

In  [5]:
import zipfile with zipfile.ZipFile(filepath, 'r') as zip_ref: zip_ref.extractall(Path(filepath).parent)

In  [6]:
data_path = Path(os.path.join(os.path.splitext(filepath)[ 0]))

过滤掉非 RGB 图像
In [7]:
from glob import glob from PIL import Image

In [8]:
for image_filepath in glob(os.path.join(data_path, 'images', '**','*.jpg')): if Image.open(image_filepath).mode != 'RGB': os.remove(image_filepath)

准备数据
我们现在将使用该prepare_data()函数对训练数据应用各种类型的转换和增强。这些增强使我们能够用有限的数据训练更好的模型,并防止模型过度拟合。
在这里,我们将 3 个参数传递给prepare_data()函数。
  • path:包含训练数据的文件夹路径。
  • chip_size:与导出训练数据时的指定相同。
  • batch_size:你的模型将在一个 epoch 内的每一步训练的图像数量,这直接取决于你的图形卡的内存和你正在使用的模型类型。对于此示例,我们在具有 11GB 内存的 GPU 上使用了 64 的批量大小。
In [9]:
data = https://www.lsbin.com/prepare_data( path=data_path, dataset_type='Imagenet', batch_size=64, chip_size=300 )

从你的训练数据中可视化一些样本
为了理解训练数据,我们将使用show_batch()arcgis.learn 中的方法。show_batch()从训练数据中随机挑选一些样本并将它们可视化。
  • rows:我们想要查看结果的行数。
In [10]:
data.show_batch(rows=2)

python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
python识别植物示例:加载模型架构
arcgis.learn提供以FeatureClassifier模型的形式确定每个特征的类别的功能。要了解有关它的工作和使用情况的深入信息,请查看此链接。
TensorFlow-Lite植物物种识别 - 由于我们正在训练要部署在手机上的模型,因此我们必须使用“tensorflow”后端定义模型。为此,我们可以将参数设置backend为“tensorflow”。
In  [12]:
model = FeatureClassifier(data, backbone='MobileNetV2', backend='tensorflow')

找到最佳学习率
学习率是模型训练中最重要的超参数之一。在这里,我们探索了一系列学习率来指导我们选择最好的学习率。arcgis.learn利用 fast.ai 的学习率查找器为训练模型找到最佳学习率。我们可以使用该lr_find()方法找到可以足够快地训练鲁棒模型的最佳学习率。
In  [13]:
lr = model.lr_find()

python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
Out[13]: 0.00039810716

根据上面的学习率图,我们可以看到lr_find()我们的训练数据建议的学习率是 0.000691831。我们可以用它来训练我们的模型。在最新版本中,arcgis.learn我们甚至可以在不指定学习率的情况下训练模型。它在内部使用学习率查找器来找到最佳学习率并使用它。
python如何识别植物?拟合模型
python识别植物的方法:为了训练模型,我们使用fit()方法。首先,我们将使用 25 个 epoch 来训练我们的模型。Epoch 定义了模型暴露于整个训练集的次数。
In  [14]:
model.fit(25, lr=lr)

epochtrain_lossvalid_losstime
0282.509796284.54592906:33
1219.822098216.60917706:11
2184.608017179.59429906:16
3157.201462152.10751306:13
4146.833130143.23031606:08
5142.532150140.50241106:06
6130.854355128.10719306:13
7123.135384120.28264606:16
8122.825447121.19296306:15
9113.097366110.87620506:09
10110.630867107.83945506:05
11105.668732102.16010306:08
12104.367531101.76054406:11
1396.98246092.82629406:10
1494.38124190.03821606:11
1591.44226187.21102106:12
1689.45610884.47171806:19
1788.84608585.12754106:02
1885.06051680.28258506:05
1983.72343480.03022006:20
2082.75042778.10875706:26
2181.43613477.34899906:27
2280.91558177.15044406:26
2381.23152277.08885206:26
2480.63702476.96645406:26
python识别植物示例:在验证集中可视化结果
下面的代码将选择一些随机样本,并排向我们展示真实情况和相应的模型预测。这使我们能够在笔记本本身中验证模型的结果。一旦满意,我们就可以保存模型并在我们的工作流程中进一步使用它。
【python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)】In  [15]:
model.show_results(rows=4, thresh=0.2)

python如何识别植物(使用TensorFlow-Lite模型进行植物物种识别)

文章图片
在这里,来自训练数据的地面实况的子集与模型的预测一起被可视化。正如我们所看到的,我们的模型表现良好,预测与真实情况相当。
保存模型
TensorFlow-Lite植物物种识别:我们将以 tf-lite 格式保存我们训练的模型。
我们将使用该save()方法来保存训练好的模型。默认情况下,它将保存到我们的训练数据文件夹中的“模型”子文件夹中。
In  [  ]:
model.save('Plant-identification-25-tflite', framework="tflite")

python如何识别植物?部署模型tf-lite 模型现在可以部署在移动设备上。Survey123 for ArcGIS 即将推出的功能集成了此类 tf-lite 模型。要了解有关在 Survey123 中部署此模型的更多信息,请加入早期采用者社区以访问 Survey123 私人测试版。
参考文献[1]  http://otmedia.lirmm.fr/LifeCLEF/PlantCLEF2017/TrainPackages/PlantCLEF2017Train1EOL.tar.gz
[2]  http://otmedia.lirmm.fr/LifeCLEF/PlantCLEF2017/TrainPackages/PlantCLEF2017Train2Web.txt
[3]  http://otmedia.lirmm.fr/LifeCLEF/PlantCLEF2015/Packages/TrainingPackage/PlantCLEF2015TrainingData.tar.gz

    推荐阅读