用Jetson NANO实现手语识别案例

Dennis Faucher
359 0 2019-08-17

目前,云计算的经济利益偏向于短暂的工作负载而非永远在线的工作负载。一个短暂的例子是云功能,例如Amazon Lambda或GCP云功能或Azure功能。短期云功能比始终在线的云VM或永远在线的本地VM更具成本效益。另一个短暂的例子是临时使用云计算进行灾难恢复或机器学习(ML)模型培训。通常不需要D/R资源,也不需要ML GPU资源池。如果您的企业需要持续不断地拥有大量GPU资源,那么肯定是在内部而不是在云中构建。

我花了很多时间使用99美元的Jetson Nano IoT设备,并发现使用临时云GPU是一种加速ML模型创建的经济有效的方法。

教我的Nano识别手语


GitHub上有一套优秀的手语训练图像(点击这里)。 我认为通过Jetson NANO相机的实时视频输入教NANO识别手语会很有趣.

NVIDIA DIGITS
NVIDIA提供名为DIGITS的免费机器学习培训环境。 DIGITS可以消除构建和测试机器学习模型带来了所有编程上的痛苦。 DIGITS可以从源代码编译,在容器中运行,也可以作为AWS VM使用。 为了熟悉DIGITS,我一直在Mac上的Ubuntu VM中从编译源运行它。 NVIDIA DIGITS具有GPU感知功能(自然而然)。 我的Ubuntu VM无法访问GPU,因此我的所有训练都是在vCPU上运行的,并没有尽可能高的性能。

图像加载比较
在我的笔记本电脑VM和我的云VM中将87,000个手语手的小图像加载到DIGITS数据集中并没有花那么长时间。 在笔记本电脑VM中加载大约需要4分钟,在云VM中大约需要2分钟。


模型创建比较
模型创建是云VM(可访问NVIDIA GPU)的亮点。 在模型创建期间,运行机器学习python代码,分析75%的图像以查找模式,然后针对其他25%的图像连续测试这些模式以进行验证,直到准确性最大化并且损失最小化。


在我的笔记本电脑VM上运行此模型创建估计完成时间为11天(!)。 我放弃了那次运行并开始研究使用云虚拟机所需的时间和费用。 推荐的NVIDIA DIGITS EC2实例类型为p2.xlarge,每小时费用约为0.90美元。 我估计Cloud VM上的运行时间是8小时。 与我购买一张价值几千美元的NVIDIA GPU卡相比,8美元对我来说是一个很好的经济价值。 

云端训练,边缘部署

一旦模型被训练,我可以将模型下载到我的Nano并关闭云VM以停止计费。 值得庆幸的是,DIGITS使得下载模型变得简单。 只需单击下载模型。

该文件被格式化为gzipped tar文件,其命名约定为20190514-175338-623c_epoch_30.0.tar.gz。我将文件(tar xzvf)扩展为Nano上的“sign-language-model”目录。 Nano开发套件包括用于文件识别的工作源代码以及使用由DIGITS创建的Caffe模型的实时相机识别。你可以在这里找到关于GitHub的代码和说明。

我所需要做的就是将一些参数传递给实时相机识别程序(imagenet-camera),以便加载下载的机器学习模型。

NET=sign-language-model
~/jetson-inference/build/aarch64/bin/imagenet-camera \
--prototxt=$NET/deploy.prototxt \
--model=$NET/snapshot_iter_15300.caffemodel \
--labels=$NET/labels.txt \
--input_blob=data \
--output_blob=softmax

Jetson Nano将此模型缓存到内存中,并使用其128核GPU开始以每秒60帧的速度识别实时图像。 高fps实时识别是Nano与其他物联网设备(如Raspberry Pi和Google Coral)的不同之处。

 

总结
并非所有在公共云中的工作负载都是最具成本效益或性能最高的, 有些是。 需要定义每个工作负载的要求以及内部部署和云数据中心的功能,以确定每个工作负载的正确位置。 在我的项目里,我几个小时都无法访问本地NVIDIA GPU,因此在云VM中租用NVIDIA GPU是有道理的。 我也听到过“在云中训练,在边缘部署”的建议,这似乎是测试这个概念的一个很好的理由。 任务完成!