前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Jetson Xavier NX做个AI白板

用Jetson Xavier NX做个AI白板

作者头像
GPUS Lady
发布2021-05-07 10:30:23
1.2K0
发布2021-05-07 10:30:23
举报
文章被收录于专栏:GPUS开发者GPUS开发者
今天这个项目来自Nazar Kaminskyi,是NVIDIA Jetson 社区项目里的一个

项目故事

今天,我们介绍一个有趣的项目,该项目使用Nvidia Jetson Xavier NX,深度学习和计算机视觉。

在过去的几个月中,许多专业互动已转移到网上:会议,演示文稿或课程。通常,人们需要借助可视化的支持或简短的图表来强调想法,但是用计算机鼠标来做到这一点并不总是那么容易。并非每个人都有图形输入板。

因此,我们想到了如何解决此问题的想法:我们使用普通的RGB摄像头和一个人的手将任何墙壁或平坦的表面转换为交互式白板。

研究阶段

寻找实现此想法的方法,我们假设控制AI白板最简单的方法是使用指尖并选择以下手指组合进行控制:

然后,我们寻找诸如手部和/或指尖检测器之类的解决方案,这些解决方案将帮助我们快速有效地实施该系统。、

在对不同选项进行分析和测试期间,我们决定将流程分为3个主要阶段:

-图像中的手部检测

-指尖本地化

-与白板的交互

手势检测

作为一种手部检测器,我们选择了神经网络,因为它比传统的检测/跟踪对象的方法更灵活,尽管后者通常比神经网络更快(但是我们将在后面看到如何处理速度因子)。因此,作为一个手检测器,我们决定使用一个预训练的YOLO卷积神经网络。

为了完成这个pipeline,我们使用了一个经过预训练的改进VGG16卷积神经网络作为统一手势和指尖检测的指尖检测器,因为它是可用的最佳精确解决方案之一。

参考:

https://github.com/MahmudulAlam/Unified-Gesture-and-Fingertip-Detection

硬件选择

作为我们的主要组件,我们 将NVIDIA Jetson Xavier NX与Raspberry Pi相机配合使用, 使用JetPack 4.4,我们还利用了Tensorflow 1.15.3。

运行我们的第一个原型所需的最后一步是实现与AI白板的各种交互,即处理指尖检测器的输出。所有的代码和说明都放在github:

https://github.com/preste-ai/AI_whiteboard

遇到的问题

我们首先遇到了几个问题:

1.与手的检测有关的几个问题。检测器工作不稳定。特别是,尽管这是主要配置,但它无法正确地检测到只有食指指向的手。同样,当将手移离摄像机太远(超过一米)时,我们也遇到了一些问题,必须将系统设置得离墙很近,这非常不舒服。

2.另一个问题是视频处理速度(帧速率)-平均只有12帧每秒(fps)。Pipeline涉及两个深度神经网络,这并不令人感到意外。不幸的是,这种速度阻止了我们获得平滑的线条和自由绘制。

让我们看看我们如何处理这些问题!

改进

为了提高手部检测的精度,我们根据自己的数据重新训练了手部检测器的模型。收集了12000张手图像的小数据集(感谢同事的“手动”贡献!),并用计算机视觉注释工具(CVAT)进行了标记。经过数据分割,它给了我们9500倍的图像进行训练,1000对图像进行验证和1500倍的图像进行测试。

此外,我们使用了各种数据增强技术(通过图像预处理):亮度,平移,放大和缩小,旋转,剪切变换和水平翻转以及随后的归一化。经过这些操作后,我们需要使用规范化图像为经过重新训练的网络提供数据,以进行正确的推断。

该损失函数,我们用于训练网络是一个组合的交叉熵损失和均方损失。我们使用Adam优化器找到了模型的最佳权重。最终,我们对手持探测器的网络(Yolo)进行了100次训练,并为每批设置了32张图像。您可以在此处查看代码和所有参数。

然后,我们使用三个非常常见的指标,将重新训练的模型与用于第一个原型的模型的性能进行了比较:准确性,精度和召回率。为了确定检测的正确性,我们使用了IOU的值。如果IOU的值大于0.5,则我们认为检测器可以正确预测手的位置,否则-不能。

我们得到的结果如下:

检测器有了很大的改进。

然后,我们可以使用此升级版本来进一步改进我们的AI白板。

性能提升

尽管Jetson Xavier NX具有相当强大的图形处理器单元,但对于我们的神经网络管道,它仍然无法实现实时视频处理。

幸运的是,NVIDIA提供了一个库,可以充分利用基于GPU的硬件:TensorRT库。为了使用该库,我们将模型(手和指尖检测器)转换为TensorRT引擎。为此,我们遵循以下3个步骤:冻结图并删除训练节点(.h5-> .pb)将冻结的图形转换为onnx(.pb-> .onnx)将onnx模型转换为TensorRT引擎(.onnx-> .engine)

转换后,我们将TensorRT引擎序列化到设备上,并且每次AI白板启动时,代码都会加载它们。

注意:这里我们需要指出,TensorRT在优化阶段运行特定于设备的配置文件。因此,如果要使用其他硬件进行推理(与Xavier NX不同),则需要重建引擎。

然后,我们可以将Jetson设备切换到高性能模式后,将解决方案性能与捕获的图像形状为320x240进行比较。对于Jetson Xavier NX,我们使用了功耗模式ID 2(15W 6核)。

最终结果

好结果!我们的准确性和召回率仅略有下降,这对我们的目的而言并不重要。我们很高兴!

结果运行:

欢迎访问我们的存储库,其中包含所有说明以及模型和TensorRT引擎:

https://github.com/preste-ai/AI_whiteboard

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档