
这是蓝河科技的精确杂草控制机器人See & Spray的原型。资料来源:蓝河科技
耕作对你今天的生活有什么影响?如果你住在城市里,你可能会感到与生产食物的农场和田地脱节。农业是我们生活的一个核心部分,但我们常常认为它是理所当然的。
今天的农民面临着一个巨大的挑战——用更少的可用土地养活不断增长的全球人口。世界人口预计将增长到到2050年将达到100亿这将使全球粮食需求增加50%。随着对粮食需求的增长,土地、水和其他资源将面临更大的压力。
农业中固有的可变性,比如不断变化的天气条件,以及杂草和害虫等威胁,也会对农民生产粮食的能力产生相应的影响。用更少的资源生产更多的食物的唯一方法是通过农业机器人这可以帮助农民解决困难的工作,提供更多的一致性、准确性和效率。
农业机器人使用PyTorch
在蓝河技术在美国,我们正在建造下一代智能机器。农民使用我们的工具来控制杂草,并以促进农业可持续发展的方式降低成本。我们的除草机器人集成了摄像头,计算机视觉,机器学习和机器人技术,使一个智能喷雾器,驾车通过田地(使用AutoTrac以减少司机的负荷),并迅速瞄准和喷洒杂草,留下完整的作物。
机器需要实时决定什么是作物,什么是杂草。当机器在野外行驶时,高分辨率相机以高帧率收集图像。我们使用PyTorch开发了一个卷积神经网络(CNN)来分析每一帧,并生成一个像素级精确的作物和杂草所在的地图。一旦所有的植物都被识别出来,每一种杂草和作物都被映射到田间位置,机器人只喷洒杂草。整个过程在几毫秒内完成,因为效率很重要,所以农民可以尽可能多地耕种土地。上面的视频是一个很棒的See & Spray视频,它更详细地解释了这个过程。

亚历克斯·马什(Alex Marsh)是我们的外勤行动专家之一,图为他拿着自动喷雾器。我们在蓝河与大型机器一起工作-亚历克斯是6英尺4英寸高,大约与轮胎的顶部水平。资料来源:蓝河科技
为了支持机器学习(ML)和机器人技术栈,我们基于NVIDIA Jetson AGX Xavier System on Module System on Module (SOM) AI在边缘计算机上构建了一个令人印象深刻的计算单元。由于我们所有的推断都是实时发生的,上传到云将花费太长时间,所以我们将服务器群带到现场。这款机器人的总计算能力仅用于视觉推理和喷雾机器人,与IBM的超级计算机Blue Gene(2007)不相上下。这使得这台机器具有世界上任何移动机器中最高的计算能力!
建立杂草检测模型
我的研究人员和工程师团队负责训练识别作物和杂草的神经网络模型。这是一个具有挑战性的问题,因为许多杂草看起来就像庄稼。专业的农学家和杂草科学家训练我们的标签工人正确地标签图像-你能发现下面的杂草吗?

资料来源:蓝河科技
在下图中,棉花是绿色的,杂草是红色的。

资料来源:蓝河科技
机器学习栈使用PyTorch进行训练
在机器学习方面,我们有一个复杂的堆栈。我们使用PyTorch来训练所有模型。我们在PyTorch上构建了一套内部库,允许我们执行可重复的机器学习实验。我的团队的职责分为三类:
- 构建部署到机器人上的生产模型
- 进行机器学习实验和研究,以不断提高模型性能
- 与机器学习、A/B测试、过程改进、软件工程相关的数据分析/数据科学
我们选择PyTorch是因为它非常灵活且易于调试。新团队成员可以迅速跟上进度,文档也很完整。在使用PyTorch之前,我们的团队广泛使用Caffe和Tensorflow。2019年,我们决定切换到PyTorch,过渡是无缝的。该框架使我们能够同时支持生产模型工作流和研究工作流。例如,我们用the武器库对于图像变换和张量变换。它包含了一些基本的功能它也很好地集成了复杂的增强包,比如imgaug。将《火炬视觉》中的transform对象与imgaug整合起来是小菜一碟。
下面是使用的代码示例时尚mnist dataset.。一个名为Custom Augmentor的类初始化iaa。构造函数中的顺序对象,然后在调用方法中调用augment_image()。然后在ToTensor()之前,将CustomAugmentor()添加到transform . compose()的调用中。现在,在为培训和验证加载批时,train和val数据加载器将应用CustomAugmentor()中定义的增强。
此外,PyTorch已经成为计算机视觉生态系统中最受欢迎的工具论文和代码, PyTorch是一种常见的提交)。这使我们很容易尝试新的技术,如Debiased对比学习半监督训练。
在模型训练前面,我们有两个正常工作流程:生产和研究。对于研究应用程序,我们的团队在内部的在预分的计算群集上运行Pytorch。在内部内部群集上执行的作业由Slurm管理,它是一个基于HPC批处理作业的计划程序。它是免费的,易于设置和维护,并提供我们团体运行数千台机器学习工作的所有功能。对于我们基于生产的工作流程,我们在AWS中托管的Kubernetes(K8S)集群的顶部使用ARGO工作流程。我们的Pytorch训练代码使用Docker部署到云端。

资料来源:蓝河科技
在野外机器人上部署模型
对于生产部署,我们的首要任务之一是边缘计算设备的高速推断。如果机器人需要更慢地慢慢地等待推断,它不能像字段一样高效。为此,我们使用TensorRT将网络转换为Xavier优化模型。TensorRT不接受JIT模型作为输入,所以我们使用ONNX从JIT转换为ONNX格式,然后我们使用TensorRT转换为TensorRT引擎文件,我们直接部署到设备上。随着工具栈的发展,我们希望这个过程也能得到改进。我们的模型被部署到Artifactory使用一个詹金斯构建过程通过从Artifactory提取,它们被部署到现场的远程机器上。
为了监控和评估我们的机器学习运行,我们发现权重与偏差平台成为最好的解决方案。他们的API可以快速地将W&B日志集成到现有的代码库中。我们使用W&B来监控正在进行的培训,包括培训和验证损失的活曲线。
SGD vs Adam Project
作为使用PyTorch和W&B的一个例子,我将运行一个实验,并比较在PyTorch中使用不同求解器的结果。在PyTorch中有许多不同的求解器-显而易见的问题是您应该选择哪一个?求解器的一个流行选择是亚当。它通常不需要设置任何参数就能得到很好的结果,是我们模型的常用选择。在PyTorch中,此求解器可在torch.optim.adam。
机器学习研究人员的另一个流行选择是随机梯度下降法(SGD)。此求解器可在PyTorch中以torch.优化。sgd的形式获得。动量是机器学习中的一个重要概念,它可以帮助求解器找到更好的解,避免陷入优化空间的局部极小。关于SGD和动量的问题是:我是否能够找到一个打败Adam的SGD的动量设置?
告诉我们你的想法!