雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Deep Learning in Aerial Systems Using Jetson,作者为 Ahmad Kiswani, Amit Aides and Mark Silberstein。
翻译 | 青翼出没一笑扬 老王家会霏的鱼 校对 | Lamaric 整理 | MY
无人驾驶空中系统(UAS)在过去十年中被广泛应用,尽管 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)小组。实验室配备了一台 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)来释放内存以支撑较大的神经网络。
算法描述
我们按照四级管道实现 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 均值聚类法来将碎片中的像素聚为三类:背景、形状和字符。我们使用前两个矩对簇进行分析,并将字符类的像素点转换成目标字符的二进制掩码。
字符的识别和定向
字符的二进制掩码被传递到字符识别阶段。最初我们打算使用 Tesseract OCR 算法,但是我们发现这个算法对图像的质量太过敏感,对单一字符的精确度非常低。因此最终,我们训练了一个传统的神经网络来处理这一步。
除了字母数字类,我们还训练了网络来对旋转字符和无目标类进行区分。前一阶段的字符的二进制掩码被馈入到网络中,每旋转 15°便独立分成一部分。网络将可信度最高的角度作为正确答案。我们从旋转角度和相机方向来推断字符的方向。加入旋转字符提高了系统的精确性。我们推测到它允许网络在区分字母和非字母时更加灵活。
图 6: 采用旋转字符方法确定方向的字符分割和分类阶段
神经网络训练
我们没有有竞赛目标的标准数据集,而且建立一个足够大的可用于训练的数据集是非常需要精力的并且需要创造数千个真实目标来覆盖所有可能的图形、字符以及颜色的组合。除此之外,可能还需要上百种测试来捕捉目标的图像,所有我们根据综合目标训练了我们的深度神经网络。
我们创造了两个合成数据集,一个用来训练图形神经网络而另一个用来训练字符神经网络。我们通过从降采样图形中随机裁剪碎片并在随机位置赋予随机目标来创造形状样品。在赋予目标之前亮度被设为于整块碎片相匹配,而且加入了泊松噪声来模拟相机捕获时的噪声。目标被混合再来碎片中以避免锋锐的边缘。
图 7: 覆盖在真实图像上的合成目标。只有右上角的星星 C 才是真正的目标。
我们通过在全分辨率下生成形状目标,然后用与之前的分割算法相似的 k 均值聚类的方法提取目标字符创造了字符样本。采用这个方法合成目标可用使目标不仅在人眼看来很真实,而且他们也模仿了系统捕获和处理真实图形的过程。图 7 显示了合成目标的样品。唯一的真实目标是在顶部右侧的带有字母 C 的星星。
以上描述的过程使创建庞大的数据集成为可能。每个数据集包括 500K 个带标签的样本并分类在不同的类别中。字符数据集包含额外的旋转字符类。而且,为了防止网络对合成目标过拟合,我们在训练集中增加了在实验条件下捕获的以及过去竞赛中的真实目标物。
训练过程
我们将训练集数据的 80% 用于训练,10% 用于测试,10% 用于验证。我们使用 DIGITS 和一个 NVIDIA Titan X (Maxwell)来进行训练并且在仅仅 28 分钟的训练时间内就达到了 98% 的精确度。
我们进一步验证了在实验中的图片以及过去几年的比赛中的图片。这些图片中出现的少量的目标比大量的验证更有质量。这个设置模仿了真实的竞赛场景,有利于比较不同网络的特点。
总结与展望
......
想要继续阅读,请移步至我们的AI研习社社区:https://club.leiphone.com/page/TextTranslation/679
更多精彩内容尽在 AI 研习社。
不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。
雷锋网雷锋网(公众号:雷锋网)