亚冠

基于Jetson在Aerial系统内进行

2019-08-12 06:02:06来源:励志吧0次阅读

  基于 Jetson 在 Aerial 系统内进行深度学习

  按:本文为 AI 研习社编译的技术博客,原标题 Deep Learning in Aerial Systems Using Jetson,作者为 Ahmad Kiswani,Amit AidesandMark Silberstein。

  翻译 | 青翼出没一笑扬 老王家会霏的鱼 校对 | Lamaric 整理 | MY

  无人驾驶空中系统(UAS)在过去10年中被广泛应用,尽管 UAS 最早被应用在军事上,事实证明,它们在很多其它领域都是有用的,包括农业、地理制图、航空摄影、搜索和救济等。但是这些系统都需要一个人循环完成远程控制、场景识别和数据获取。这不仅增加了操作本钱,而且将运用范围极大程度上限制在了能够进行远程控制的应用范围内。

  图 1:2015 年 AUVSI SUAS 比赛队伍。地面目标可以在团队前面看到。照片由 AUVSI Seafarer 分会提供。

  我们的工作致力于将深度学习引入无人驾驶系统,主要是通过以下两点:

  针对特定任务优化深度神经络,比如对象检测、目标识别、重建、定位等;

  针对成本和性能对深度神经络进行优化。我们通过现有平台的嵌入式图形处理单元(GPU)来平衡高性能与低功耗,比如英伟达的 Jetson TK1 开发工具和 Jetson TX1。

  2016 年我们的技术团队参加了由国际无人驾驶系统协会(AUVSI)举办的无人机系统竞赛,并取得了第 4 名的成绩。在这篇文章中,我们将阐述怎样基于 Jetson 在 Aerial 系统内进行深度学习。

  竞赛的规则是安全地应用和执行系统工程原理,并开发和操作自主无人驾驶系统(UAS),成功地完成一组特定的任务。

  其中的一项任务是对地面目标进行自动检测,定位和分类(ADLC)。每个地面目标都包含了位置(经纬度)、形状(圆,三角等)、字母(每一个地面目标都被一个居中单词表示,如图 1 所示)、字母方向和颜色这几个特点。这些地面目标在比赛前都是未知的,并被分散在杂乱无章的任务区域中。无人机需要在任务区域的上空飞行并识别这些目标和它们的属性和位置。

  在这篇文章中,我们将介绍构建此类系统的一些束缚和挑战,并解释我们如何在 Jetson TK1 开发人员工具包中使用深度学习来在可变条件下实现人类级别的准确性。

  系统描写

  我们在 ATHENA 无人机视觉和图像科学实验室(VISL)开发我们的系统,这是一个由 20 个学生成立的技术空中系统(TAS)小组。实验室配备了1台 Sony a-6000 的相机

  ,可以以每秒两帧的速度产生 24M 像素的彩色图像。覆盖任务搜索区域只需要大约 10 分钟,整个飞行任务时间少于 30 分钟。这要求系统平均以小于 0.7 秒/张的速度处理 1200 张图像。

  图 2:ATHENA 空中技术系统团队在 2016 年比赛中使用的无人机

  我们选择了英伟达 Jetson TK1 工具作为我们的主要图像处理单元,由于它的 GPU 以轻量和紧凑的方式为卷积神经络提供了非常高性能且高效的计算。我们能够优化内存密集型应用程序,以适应 Jetson 的 2GB 内存,并取得处理图像所需的数据速率。

  我们针对比赛做了以下设计:

  设计 ADSL 算法作为级联分类器在任务流程的初期阶段用来排除掉那些检测目标之外的图像。这节省了计算资源同时加快了每帧图象的平均处理速度。

  设计深度学习络时在正确率和速度之间找到一个平衡点。

  多核的并行 CPU 共享算法(Jetson 有一个 4 核的 ARM CPU)。

  使用一台独立的机载计算机来控制相机并与地面工作站通信。这保证了 Jetson 仅用来处理图象任务。

  从 Jetson 操作系统中去除不必要的模块(Linux For Tegra:L4T)来释放内存以支持较大的神经络。

  算法描写

  我们依照4级管道实现 ADLC 算法,如图 3 所示。

  使用区域检测算法实现目标检测。

  使用一个深度神经络 DNN1 来实现形状分类。

  字符分割。

  使用另外一个深度神经络 DNN2 来实现字符分类。

  图 3:ADLC 算法管道 : 蓝色方块由 CPU 处理,绿色方块由 GPU 处理。

  ADLC 算法的结果被发送到地面基站并且在传统的 GUI 中显示给无人机操作者(图 4)。

  图 4:ADLC 用户界面显示算法的不同阶段和终究的分类。

  区域检测

  我们选择在 CPU 上运行标准 blob 检测算法来实现区域检测。这使得 GPU 可以摆脱出来去执行分类任务。blob 检测算法能够检测图片中的显著性区域,而且可以在缩小的图像上执行来以精度换取速度。使用目标的大小及凸性等标准可以进一步挑选候选者。我们使用 OpenCV4Tegra 作为算法的优化方法,并且并行运行四个检测任务。

  使用神经络进行区域探测是十分可能的,而且有着 Jetson TX1 的更高性能的 GPU,我们希望我们的下一代系统能够在整个管道中使用端到端的深度学习,甚至对相机拍摄的高分辨率图象进行处理。

  形状分类

  从全分辨率图像中裁剪出目标候选,并将其缩小成 32 x 32 像素的碎片,随后用卷积神经络(CNN;见图 5)处理它们。我们精心的的设计了能够在轻量级计算的同时保持高精度的络。除了组织者定义的形状分类外,我们还加入了一个「无目标」的分类来辨认误报。被辨认为「无目标」或被分类到低可信度的部分将会被丢弃。在管道的这个节点上,绝大多数的误报都被消除了。

  我们使用 CAFFE with cuDNN 来进行 DNN 推断。

  图 5:Blob 检测和形状分类阶段。

  字符分割

  在这一步,被分类成肯定形状(圆,正方形等等)的碎片经过预处理生成目标内字符的二进制掩码。我们假设碎片的背景是相对均匀的,在目标周围进行严格的剪切。我们使用 k 均值聚类法来将碎片中的像素聚为3类:背景、形状和字符。我们使用前两个矩对簇进行分析,并将字符类的像素点转换成目标字符的二进制掩码。

  字符的识别和定向

  字符的二进制掩码被传递到字符辨认阶段。最初我们打算使用 Tesseract OCR 算法,但是我们发现这个算法对图像的质量太过敏感,对单一字符的精确度非常低。因此最终,我们训练了一个传统的神经络来处理这一步。

  除了字母数字类,我们还训练了络来对旋转字符和无目标类进行区分。前1阶段的字符的二进制掩码被馈入到络中,每旋转 15°便独立分成一部分。络将可信度最高的角度作为正确答案。我们从旋转角度和相机方向来推断字符的方向。加入旋转字符提高了系统的精确性。我们推测到它允许络在辨别字母和非字母时更加灵活。

  图 6: 采用旋转字符方法肯定方向的字符分割和分类阶段

  神经络训练

  我们没有有竞赛目标的标准数据集,而且建立一个足够大的可用于训练的数据集是非常需要精力的并且需要创造数千个真实目标来覆盖所有可能的图形、字符和颜色的组合。除此之外,可能还需要上百种测试来捕捉目标的图象,所有我们根据综合目标训练了我们的深度神经络。

  我们创造了两个合成数据集,一个用来训练图形神经络而另一个用来训练字符神经络。我们通过从降采样图形中随机裁剪碎片并在随机位置赋予随机目标来创造形状样品。在赋予目标之前亮度被设为于整块碎片相匹配,而且加入了泊松噪声来模拟相机捕获时的噪声。目标被混合再来碎片中以避免锋锐的边缘。

  图 7: 覆盖在真实图像上的合成目标。只有右上角的星星 C 才是真正的目标。

  我们通过在全分辨率下生成形状目标,然后用与之前的分割算法相似的 k 均值聚类的方法提取目标字符创造了字符样本。采用这个方法合成目标可用使目标不但在人眼看来很真实,而且他们也模仿了系统捕获和处理真实图形的进程。图 7 显示了合成目标的样品。唯一的真实目标是在顶部右边的带有字母 C 的星星。

  以上描述的进程使创建庞大的数据集成为可能。每一个数据集包括 500K 个带标签的样本并分类在不同的类别中。字符数据集包括额外的旋转字符类。而且,为了防止络对合成目标过拟合,我们在训练集中增加了在实验条件下捕获的以及过去比赛中的真实目标物。

  训练进程

  我们将训练集数据的 80% 用于训练,10% 用于测试,10% 用于验证。我们使用 DIGITS 和一个 NVIDIA Titan X (Maxwell)来进行训练并且在仅仅 28 分钟的训练时间内就到达了 98% 的精确度。

  我们进一步验证了在实验中的图片和过去几年的比赛中的图片。这些图片中出现的少量的目标比大量的验证更有质量。这个设置模仿了真实的比赛场景,有利于比较不同络的特点。

  总结与展望

  ......

  想要继续阅读,请移步至我们的AI研习社社区:

  更多精彩内容尽在 AI 研习社。

  不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

  (公众号:)(公众号:)

  原创文章,未经授权制止转载。详情见转载须知。

西宁科技网
哈尔滨女性网
哈尔滨游戏网
分享到: