十几个人的团队如何在短时间里开发一个AI“放牛娃”(上)

2022-08-26 12:48:21 浏览数 (1)

本文整理自oneCup公司的研讨会

精准农业

美国养牛业价值 750 亿美元,其中包括超过 70 万个牧场、9300 万头肉牛和约 3600 万头小牛出生。但该行业并非没有挑战。2015 年,美国养牛业损失了近 390 万头牛和犊牛。幼犊受到的打击尤其严重,有 7% 的犊牛无法断奶。这对牧场产生了重大影响,耗资约 38.7 亿美元。养牛可能是一项全天候的工作,但牧场主无法负担人力资源来跟踪牛的健康和福利 24x7。

OneCup AI 的 BETSY 将通过使用 AI 帮助牧场主跟踪和监控他们的牲畜,让他们更深入地了解牲畜的健康、成长和活动,从而颠覆价值数十亿美元的牧场产业。

本讲座向大家讲解OneCup 如何利用 NVIDIA TAO、NVIDIA DeepStream 和 NVIDIA Triton ™ SDK 可克服开发障碍并在创纪录的时间内将 BETSY 推向市场。同时OneCup AI 团队还分享他们如何使用 NVIDIA TAO 来实现模型的超高准确度,以及他们如何使用 NVIDIA DeepStream 将这些尖端模型集成到视频处理管道中,在部署的设备上以 2K 分辨率实现高达 30 FPS边缘。

所以,BETSY 首先定义了包含动物的边界框,然后她将动物切成了各个部分,尾巴、头部、膝盖等,它运行面部识别算法来确定是动物是独一无二的,因为它的特征在这里,我们显示激活图,告诉什么使动物特别。一旦我们有了 ID 并将 ID 分配给肢体,我们称为肢体跟踪。如果牛身上有标签,我们使用光学字符识别 ocr 来读取标签。我们所做的一切都是通过打开关键点来模拟动物身上存在的骨骼层次,来观察动物的结构。有了这些信息,我们可以让BETSY来照顾所有动物的健康和活动。

我们最初听到了牧场主和农民的需求,当他们向我们解释他们如何管理他们的牛时,我们意识到使用计算机视觉实现自动化的巨大机会,所以我们想创造一个BETSY 这样的产品。

但是像任何其他初创公司一样,我们是一个小团队,我们面临着许多现实的挑战。比如,当你想建立一个计算机视觉 AI 时,你必须建立大型训练集,是一件很重要的事情,你需要训练很多模型,你选择哪些模型效果最好 训练模型很昂贵,你必须将这些模型集成到管道中,所以我们必须努力解决这些问题,一旦建立了管道,我们就必须转身部署在边缘和云。我们的用例需要满足两种情况。我强调我们是一个小团队,最多只有十几个人,我们必须在不到半年的时间里把它作为一个 mvp(Multi-stage Vision Pipline) 启动并运行。

我想与你分享我们实际上是如何做到的。我们成功的关键是拥有适合工作的正确工具,我们很幸运拥有 Nvidia 的工具集:Deepstream和TAO,可以让我们创建早期版本的BETSY。

TAO 模型实际上有两种我们使用的类型,我们使用称为检测器来查看边界框,以及使用分类器来对边界框的内容进行分类,我将深入研究TAO,来看看如何在短时间内创造 BETSY 。

构建 BETSY 的另一个关键部分实际上是弄清楚如何大规模部署,我们可以遵循两种不同的途径,一种是将其部署在边缘或物联网物联网上,第二种当然是将它部署在云中,例如,我们正在使用 AWS。实际上,我们在 oneCUP 上同时进行了这两个方面的研究,我们找到了一种在云端边缘的 jetson 构建 BETSY 的方法,其关键方面是能够在两个位置部署 deepstream,您可以在此图中看到它是怎么做的,在边缘的云中,我们有几乎相同的管道让 BETSY 看到她看到的东西,这对于构建一次,并以多种方式和方法编写它至关重要,这就是我们能够做到的在为客户部署计算机视觉时选择使用边缘计算还是云计算。

在我们的开发者故事中,您可能认为这只是从 a 到 b 的一条简单路径,而这张图表明了这一点,但我可以向您保证,这是一条充满了荆棘的路径,尽管如此,我们的路径成功确实遵循了三个主要轨道——

首先是捕获我们的数据,所以一路走来,因为我们在农场和大学部署了数百个摄像头以捕获尽可能多的镜头,我们都在上传到云中,而且使用 Nvidia jetson,

第二,一旦我们有了我们的镜头,我们就必须提倡该镜头来解释BETSY 如何从它所看到的东西中学习,所以我们继续进行一个巨大的过程,整理成千上万的图像和数十万个注释,一旦我们有了这个,我们实际上必须训练模型,这就是 TAO 真正有用的地方,我们训练检测器和分类器来识别奶牛,并确定它们在BETSY 正在观看的视频中所做的事情,后来我们实际上添加了更多高级模型,例如您在上面的SLide中看到的关键点和 ID,最后在一年的时间里,我们添加了诸如 DeepStream 集成之类的东西,我们最初将所有东西真正捆绑在一起,我们使用了Deepstream 5.0,需要 C 的模型,但是在去年 10 月 NVIDIA 发布了 DeepDtream6.0 的伟大产品,它允许我们在捕获数据编辑数据和构建模型之间做很多 Python,然后将这些模型集成到 DeepStream 中,我们能够构建BETSY 并进行部署。

在 oneCup 上,我们疯狂地采集数据,我们实际上在您在这张地图上看到的地点部署了 400 多个摄像头。这包括大约 60 个地点,在地图上,您可以看到橙色,代表奶牛和肉牛,深绿色实际上是学术机构,而浅蓝色表示野牛,甚至还有深蓝色,那些是羊...因为我们制作了这张地图,所以我们在那里的农场 ,大规模收集镜头,并将其带入我们的系统进行训练。你问多少,我很高兴与你分享,我们有大约 400 TB 的视频素材位于云中。

为了让这一切顺利进行,您需要部署摄像头,实际上我们对如何收集这些素材进行了很多思考,并且 oneCup 不仅将摄像头部署到了我们想从视频中获取信息的位置,实际上还部署了我们自己的 WiFi 系统,一个好的 wi -fi 信号对于获得我们想要的数据至关重要。这是开始收集信息的基础。

您可能想知道为什么我们要使用 jetson Xavier NX 与摄像头通话,我们看到,牧场实际上存在一个非常大的问题,就是缺乏带宽,那里的大多数牧场的带宽都非常少,甚至都没有,所以很难将大量视频传入云中,我们使用jetsons Xavier NX,捕捉来自这些摄像机的视频,并在适用的情况下运行各种管道,并将我们可以保持带宽限制的内容上传到云中,jetson Xavier NX使这成为可能,所以在某些情况下,我们获取视频,而在其他情况下,我们会降低要上传的视频的比特率,我们在边缘端做分析,然后把取得的牧场元素放入云端以进行进一步分析。

现在您拥有所有这些数据,因为所有这些视频和图像您必须将其注释,以用于数据训练。这涉及到绘制边界框,显示一头牛、一条尾巴和头,在我们的例子中,你还需要用点来绘制骨骼的结构,我们当然还添加了动物正在做什么的活动或描述,以及边界框、关键点和分类等,我们创建了这些训练集,其中包含数十万张图像中的许多图像,并进行了数十万次调整。我们需要这个来做出最好的工作。

我们刚开始做的时候,没有自动化工具可以快速完成,所以我们必须手动完成,一个有趣的现象是,专业的视频游戏玩家实际上可以注释图像是大约比普通人快3.5倍 我是认真的,所以这些专业的视频游戏玩家帮助我们构建了这些用于驱动 BETSY 的惊人数据集.

这个过程中我们也获得一个经验,就是您的数据集必须非常一致,即您的框在所有情况下都必须相同,如果你给奶牛绘制的边界框都不一致,最后训练的结果会产生噪音会产生矛盾,当你实际运行计算机视觉时,你会在模型预测中就会看到这一点,因此非常重要的是,您的边界框和用于训练的数据必须尽可能一致和完整。

不仅仅只有牛,oneCup 有更大的野心,所以你可以看到,在左上角,我们实际上得到了一匹带有关键点的马,而左下角,我们有猪或以及它们的年龄等,通过这样做,我们实际上试图找到不同的方法来让 AI 变得更加健壮,例如,在这里我们可以看到,奶牛是黑白图案,小奶牛也是如此,但是如果你看我们的马,它也有黑白图案,所以你希望能够区分马和牛,即使它们有相同的相似颜色图案,我们成功地做到了,所以当您构建训练集以考虑您希望 AI 真正学习的内容时,非常重要。

一旦你有了训练数据,真正的乐趣就开始了,这就是你开始训练你的模型做你想做的事情的地方,这是工作中最有趣的部分之一。我们使用Nvidia TAO,TAO 不仅是一组模型集合,您可以针对特定用例(我们例子是观察动物)重新训练这些模型,还可以在专用的硬件上优化这些模型,以获得令人难以置信的速度运行。

你在这里看到的是我们的第一层人工智能,BETSY用来识别牛,这称为检测器,它告诉我们屏幕里哪些像素是牛,哪些像素不是。然后对图像进行切割,包括膝盖、头部和蹄子。这是TAO 的一种模型。我们能够使用 TAO 来测试各种类型的模型,看看哪种模型最适合我们的用例。当你在 Tao 训练它们时,大多数模型在检测器的情况下,所有检测器都使用一种称为 Kitty 的通用数据输入格式。对于 Nvidia TAO模型,它可以将数据转换成这种 kitty 格式 ,然后为我们的用例尝试不同的模型,看看哪些模型最适合 Betty 看到传入镜头的需求。

(未完续读)

0 人点赞