玩转边缘智能,你就是AI圈最潮的仔(上篇)

image

只要你对云计算、AI 等技术领域有那么一丢丢关注,那么这两年肯定没少看到「边缘计算」、「边缘智能」之类的概念,似乎一夜之间,整个业界都在朝着边缘位置进发,希望将各种智慧能力带给边缘设备,从最接近用户的地方为用户提供服务。

感兴趣并且也想自己试一试?本系列文章将手把手介绍,如何借助 Jetson nano 设备,并配合 AWS 机器学习和 IoT 服务实现你自己的边缘智能。由于涉及的内容较多,本文将分为上下两篇,还请持续关注。

一、基本概念简介

上手 Amazon Web Services (AWS) 边缘智能前,首先需要明确一些最基础的概念。

边缘智能(Edge Intelligence,EI:是指在「终端侧」部署的人工智能。为什么只在云端做推理不行?众所周知,人工智能(AI)正在成为改变各行各业的通用技术,此前绝大部分AI是依赖云端实现的,因为云端有更丰富的算力、GPU 资源、机器学习平台等。然而随着 AI 芯片和边缘算力的不断发展,EI 已成为未来的趋势。

边缘计算:OpenStack 基金会对外发布的白皮书《边缘计算 – 跨越传统数据中心》对「边缘计算」这一概念进行了清晰的阐述,边缘计算是为应用开发者和服务提供商在网络边缘侧提供云服务和 IT 环境服务,「边缘」指的是位于管理域的边缘,尽可能地靠近数据源或用户。其目标是在靠近数据输入或用户的地方提供计算、存储和网络带宽。但不同行业对应边缘计算的定义可能不同。基于物联网技术的行业更多的边缘侧旨在设备端。

Jetson Nano:这是 NVIDIA 推出边缘 AI 开发板,GPU 使用了 NVIDIA Maxwell™ 架构,配备128个 NVIDIA CUDA® 核心,开发者可基于 Jetson Nano 开发各类 EI 应用。

image
Jetson Nano Developer Kit

边缘计算与 IoT云平台:边缘计算与云计算平台将是共生互补的关系,边缘计算并不会取代云计算,而是通过边缘侧的算力,让传统云计算框架进一步去中心化,在边缘侧完成部分计算工作,然后将结果汇聚到云端进行统一处理。云端也可以通过 OTA,将模型训练后下放与边缘端集成到一起。云端仍旧可以处理时间不敏感的应用场景,通过数据的汇聚以及云端的大数据分析进一步为业务的决策提供数据支撑。

二、场景描述

本文我们将通过 AWS Greengrass 和 Jetson Nano 实现图片分类。AWS Greengrass 通过 Lambda 处理图像分类的消息与调用本地的 SageMaker 训练好的 Neo 模型,然后通过 Topic 把图像分类的结果发送至 AWS IoT Core。其中边缘推理部分使用了 Greengrass ML inference。本文将以乐高恐龙图像分类作为开启 EI 亦或 AIoT 应用的开端.

image
恐龙图片分类素材

三、技术架构

image
AWS EI image classification

AWS IoT Greengrass 可将 AWS 无缝扩展至边缘设备,因此可以在本地操作其生成的数据,同时仍可将云用于管理、分析和持久存储。借助 AWS IoT Greengrass,边缘设备可以运行 AWS Lambda 函数、Docker 容器,基于机器学习模型执行预测、使设备数据保持同步以及与其他设备安全通信,甚至在没有连接 Internet 的情况下也可实现这些功能。

Amazon SageMaker 是一种完全托管的机器学习服务。借助 Amazon SageMaker,数据科学家和开发人员可以快速轻松地构建和训练机器学习模型,然后直接将模型部署到托管的生产就绪环境中。它提供了一个集成 Jupyter Notebook 的实例,供我们轻松访问数据源以便进行探索和分析,因此无需自行管理服务器。

Amazon SageMaker Ground Truth 是数据标注服务,为机器学习模型构建高品质的训练数据集。

Amazon SageMaker Neo 使机器学习模型训练一次即可在云和边缘站点中的任何环境运行。Neo 可自动优化 TensorFlow、Apache MXNet、PyTorch、ONNX 和 XGBoost 模型,以部署在 ARM、Intel 和 Nvidia 处理器上,减少移植所需的时间和工作。但需要注意一点的是:Neo 当前支持的是从 TensorFlow、MXNet 或 PyTorch 导出的图像分类模型,以及 XGBoost 模型。

本文具体实现的流程如下图所示,相关源代码和对应的库请参阅文末参考链接:

image
AWS EI Demo 流程图

AWS EI 实验步骤

4.1 图片标注(SageMaker GroundTruth)

在这次试验中,我们将使用 SageMaker GroundTruth 服务来标注由乐高恐龙组成的图像训练集。步骤如下:

  1. 将未标注的数据集上传到 S3;
  2. 在 SageMaker GroundTruth 中创建一个私有的 Labeling workforce;
  3. 创建一个 GroundTruth Labeling job;
  4. 使用 GroundTruth 平台来标注图片;
  5. 分析结果。

4.1.1 下载未标注的数据集

在这一步中,我们将未标注的数据集下载到本地,然后上传到刚创建的存储桶中,将其作为 SageMaker GroundTruth 的数据输入。这个数据集包含388个文件,其中包含6大分类(Brachiosaurus、Dilophosaurus、Spinosaurus、Stegosaurus、Triceratops和 Unknown)。

数据集下载请点击这里

随后将未标注的数据集上传到 S3:

  1. 在 ap-northeast-1 区域创建一个 S3 存储桶,并给存储桶唯一命名(例如 ground-truth-labelling-job-initials-20200112)
  2. 将下载的数据集上传到刚创建的桶中。(因为下面的步骤需要做人工标注,所以建议将6大类乐高恐龙分别选取2-3张作为需要标注的数据集即可)
  3. 在设置权限这一步保持默认即可,然后完成设置。

4.1.2 在 GroundTruth 中创建一个私有的 Labeling workforce

这一步中我们将通过 SageMaker GroundTruth 在 ap-northeast-1 创建一个图像分类任务。

  1. 打开 AWS 控制台 > Amazon SageMaker > 标签工作人员 (Labeling workforces)
  2. 选择私有(Private)标签然后创建私有团队(Create private team)
  3. 给私有标注的工作组命名
  4. 填写一个有效的邮箱地址
  5. 创建私有团队

image
创建私有团队

创建成功后,我们的邮箱会收到来自 [email protected] 发来的验证邮件,这个邮件包含了我们创建 Workforce 的用户名和临时密码。
image
创建 workforce

使用登录链接和临时密码登录到标注控制台进行标注。

此时会要求我们更改临时密码。

因为我们还没有分配给 Worker(我们自己)标注任务,此时标注任务是空的,下一步将分配给自己标注乐高恐龙的标注任务。

4.1.3 创建一个 GroundTruth Labeling job

这一步我们需要创建一个标注任务,然后分配给 Workforce。

  • 打开AWS控制台 > Amazon SageMaker > 标记任务 (Labeling jobs)
  • Step1:指定任务详细信息中:

— 定义任务名称(记住任务名称,我们在 Notebook 中的代码会用到)

— 创建清单文件(manifest),输入 S3 训练数据集的路径,注意要以/结尾。例如:s3:////
image
创建Manifest

—IAM 角色,在测试环境中我们可以允许它访问所有的S3存储桶,当然也可以指定只能访问特定存储桶。
image

— 任务类型,选择图像分类。

image
任务类型

Step2:选择工作人员并配置工具

选择“私有(Private)”>“私有团队(Private teams)在下拉框中我们已经在1.2创建过的”>“取消自动标记”>“其他配置中工作人员数量为1”>“图像分类标记工具中添加6个标签:Brachiosaurus、Dilophosaurus、Spinosaurus、Stegosaurus、Triceratops和Unknown”

返回标注作业的页面查看 Jobs 的状态,此时我们的邮箱会有 [email protected] 发来的邮件,内容是分配给我1个 Job 需要完成。

4.1.4 用 GroundTruth 平台标注图片

这一步就是人工标注的过程,因为前面我们已经节选出13张有代表的图像,下面就对这13张图像进行标注即可。如下图:
image

标注完成后返回到 SageMaker 平台。可以跟踪标记任务的状态以及进度。

image

4.1.5 结果验证

我们可以用 Sublime text 打开输出中的/manifests/output.manifest文件,它是一个 json 文件,包含一些被标记图片的元数据,例如:
image
Manifests格式

4.2 模型训练与优化

这一步我们主要目的是通过 Amazon SageMaker notebook 编写训练模型的代码,通过代码来调用云计算的资源,比如机器学习类型的实例。它将执行数据训练,并将训练和优化好的模型以 Amazon SageMaker Neo 导出。下一步将 Amazon SageMaker Neo 模型部署到 Jetson Nano 的设备上。如果不想对模型进行训练,可以到参考链接处下载训练好的模型。

这个 Notebook 主要是展示端到端机器学习的工作流程:

  • 使用 SageMaker GroundTruth 创建的标签数据集,然后将数据集分为训练和验证;
  • 使用 SageMaker 容器训练模型;
  • 使用 SageMaker Neo 优化模型。

4.2.1 下载代码 ipynb 并导入 SageMaker notebook

图像分类代码可点击这里下载,注意请不要使用参考链接中 GitHub 上的代码。
image
创建 Amazon SageMaker 笔记本

4.2.2 部分代码解析

在 OUTPUT_MANIFEST 要输入 SageMaker GroundTruth 的 output 路径,前面的步骤已经验证过 output 的 manifest 的 json 格式。
image
代码解析 - 1

在创建 SageMaker 训练任务时,请根据自己数据集训练的个数来调整超参数(hyperparamerter)和训练实例的类型(InstanceType)如下:

image
代码解析 - 2

在 InputDataConfig 中,替换 AttributeNames 为自己定义的名称,例如:

“AttributeNames”: \[“source-ref”,”groundtruth-labeling-job-20191209-clone”\]

启动训练作业,我们可以在 SageMaker notebook 中查看到结果,也可以返回到 SageMaker 控制台的训练任务中看到训练状态。训练时间长短取决于训练实例类型、数据集大小、超参数的定义。
image
SageMaker notebook的训练状态

image
SageMaker console的训练状态

通过使用 SageMaker Neo 来优化压缩模型给终端 Jetson Nano 使用,导出的模型路径我们要记录起来,在下一步骤部署 GreenGrass 的时候会用到。
image
模型导出

小结

回顾 Demo 流程图,我们已经一起完成了第一部分:图片标注和第二部分模型训练与优化。下篇内容将是另一个重点,我们将会开始构建边缘环境与执行边缘推理。

image
AWS EI Demo 流程图

参考链接:

  1. Nvidia Jetson Nano 介绍
  2. Nvidia Jetson Nano 镜像烧录
  3. AWS IoT Greengrass
  4. NVIDIA Jetson Nano with AWS ML@Edge
  5. 《智联网・未来的未来》电子工业出版社 2018,6 彭昭
  6. Amazon SageMaker Neo 模型下载

image

你可能感兴趣的:(机器学习,人工智能)