使用 Falcon 的合成数据训练 YOLOv8
由 Rebekah Bogdanoff 和 Mish Sukharev 撰写
本文将提供一个高级概述,介绍如何使用我们的数字孪生仿真平台 Falcon 的数据来训练 YOLOv8 模型,从而真正弥合 Sim2Real 鸿沟。本文涵盖了如何创建场景、从数字孪生生成数据、训练和测试模型,并介绍了获得高性能结果的最佳实践。
Duality 的社区经理 Rebekah Bogdanoff 也在一个视频系列中介绍了这一过程(点击此处观看),让您轻松地跟随整个练习。
YOLOv8 在检测合成图像(底部一行)和真实世界图像(顶部一行)中的 Cheerios 盒子时的性能比较
本文提供了 Falcon EDU 练习 1 和 2 的内容概述。任何人都可以亲自尝试这些练习,并访问更详细的文档,这些文档将引导您完成整个过程。只需注册 Falcon 的免费 EDU 等级,即可立即开始: 创建账户 - Duality AI 的 FalconCloud。
您还可以查看这些练习中的数据集,无论是 HuggingFace 上的样本数据集,还是在您创建免费账户时提供的完整数据集。
截至本文发布时,我们拥有以下免费数据集:
……我们正在不断增加更多内容。请继续关注下一个练习:用于越野自主的语义场景分割。
为什么使用合成数据?
合成数据是从模拟的真实世界环境中生成,用于为训练 AI 模型创建带标签的数据集。尽管其他组织使用 AI 生成的合成数据,但 Duality.ai 改用数字孪生来创建逼真的图像,这些图像既基于物理世界数据,又可以通过 Python API 进行高度控制。Duality.ai 的专有软件 Falcon 利用 Unreal Engine 的高渲染能力,创建合成图像来训练模型以在物理世界中工作。
使用 Falcon 的合成数据创建或补充训练数据集的优势包括:
- 效率:消除昂贵且耗时的数据收集和标注工作。利用我们的库中的孪生体快速创建数据。
- 可定制性:根据可能需要检测罕见边缘情况或在不同光照条件下操作的特定任务定制数据集。
- 可扩展性:按需生成多样化的数据集。
在这些练习中,我们训练 YOLOv8 在室内环境中检测两个物体:一个麦片盒和一个汤罐。使用 Falcon,我们复制了真实世界条件,同时引入了随机性以获得更稳健的结果。这包括物体姿态变化、视觉遮挡和多样化的光照条件。
步骤 1:在 FalconEditor 中创建数据集
为了生成合成数据,我们使用 FalconEditor——我们的集成开发环境,它允许我们创建任何感兴趣的场景、部署虚拟传感器、运行模拟,并在一个地方生成所有数据。
我们的文档 ( 1. 二进制安装 - 文档 - Duality AI FalconCloud) 将引导您完成 FalconEditor 的安装和配置。您需要创建一个免费帐户才能查看文档。
仿真设置
场景包含 4 个主要组件:
- 用于检测对象的数字孪生:练习 1 使用 Cheerios 盒子,练习 2 使用汤罐(或您选择的孪生体)。
- 环境:将虚拟环境与真实世界测试场景对齐至关重要。一个模拟室内光照条件的小房间。
- 其他对象的数字孪生:添加额外的杂乱对象以增加多样性和真实感。
- 传感器:一个 RGB 摄像头传感器捕捉图像。
注意:运行此场景所需的所有数字孪生和资产均在 FalconCloud 中免费提供,您可以通过免费帐户访问它们。
设置场景,包括一个英雄物体、一个额外的杂物物体和一个虚拟摄像头传感器。
创建有目的的数据
虽然我们可以将主对象放置在房间的任何位置,并且类似地,将相机放置在任何所需的位置,但我们的目标是创建一个有目的的、信息丰富的、与真实世界中存在的数据集无法区分的数据集(在此处阅读更多关于如何制作这种健壮数据集的信息这里)。为了实现这一目标,我们需要考虑一些参数。
一个健壮的数据集包括
- 多样化视图:一个麦片盒从不同角度看是不同的,所以我们需要确保所有物体的侧面都得到表示。
- 受控随机性:通过掉落物体来引入随机性,以创建新的物体姿态、遮挡、分组等。这种方法由 Falcon 的物理系统支持,捕捉多样化的物体姿态和相互作用,增强数据集的丰富性。相机角度也出于同样的原因随机化。
- 综合条件:控制光照、与摄像头的距离、部分物体遮挡的普遍性等参数对于充分训练模型和防止错位至关重要。AI 训练中的错位数据是指不能准确表示预期任务或目标的数据,导致模型行为有偏差或不可靠。它们可能导致模型性能不佳,通常表现为假阳性或假阴性。
用 Python 调整仿真参数
在 Falcon 中完全控制仿真参数非常快速。虽然练习 1 和 2 提供了完全预配置的参数,但说明仍会引导您了解关键变量以及如何调整它们。这些包括
摄像头参数
将模拟摄像头的参数与用于拍摄测试图像的真实摄像头的参数进行匹配。
后期处理参数
后期处理包括对图像在场景中生成后进行的所有修改。它们旨在模仿真实相机拍摄的照片中存在的真实光学伪影。这些包括
- 焦距:物体将聚焦的距离
- 景深:聚焦区域的大小以及图像失焦区域的模糊程度
- 渐晕:真实世界镜头通常会在边缘产生一定程度的光线衰减。这对于每个镜头和每个传感器可能看起来都不同,但可以在 FalconEditor 中快速复制。
孪生参数
这些参数定义了场景中数字孪生的初始条件——在本例中是麦片盒或汤罐。对于练习 1 和 2,主要参数包括
-模型正在学习检测的数字孪生物品 -物品从场景中掉落的最大高度 -孪生体将掉入场景的区域
只需按下播放键!——运行仿真
Falcon 可以通过各种专为不同合成数据工作流程设计的模块进行定制。这里我们使用 FalconVision,这是一个专门为简化视觉模型训练数据生成而设计的模块。一旦场景设置好,运行它就像按下“播放”一样简单。
场景的 Python 脚本将指导物体定位和图像捕捉过程。脚本将首先指示 Falcon 在指定体积内随机位置放置每个杂物孪生体,然后放置选定的物体孪生体,最后定位相机并捕捉图像。然后它重复这个过程,在环境中以不同位置、姿态和角度捕捉孪生体,直到创建一个完整的数据集。图像生成后,它们会自动保存到输出文件夹中,这些文件夹将用于稍后训练 AI 模型。
Falcon 在创建图像时还会生成 YOLO 标注,节省了大量时间和精力。它将训练和验证图像以及标签分别保存到不同的文件夹中,供训练脚本使用。
这个过程大约需要 30-40 分钟。
注意:我们如何知道注释是准确的?使用数字孪生体,所有真实信息都包含在场景中,Falcon 精确知道每个像素属于哪个物体,从而使注释标签 100% 准确。
步骤 2:训练 YOLOv8
数据集完成后,练习 1 和 2 指导用户使用图像和注释训练 YOLOv8 模型。训练纯粹使用合成数据,然后用户将稍后测试模型,以确保训练能够真正弥合 Sim2Real 鸿沟,即实际在物理世界中工作。如果没有这种对齐,训练将毫无用处。
如前所述,Falcon 将数据分成训练和验证文件夹。模型使用合成训练数据来调整参数并“学习”检测选定的对象。然后它使用单独的验证合成数据来评估它在非训练数据集中检测对象的效果。
使用 Google Colab 简化
训练可以在您的本地机器上进行,但学习者或休闲用户可以使用 Google Colab(一种免费的处理服务)来训练和测试他们的模型。这避免了潜在的安装冲突或内存问题。使用 Google Colab,您可以
- 免费访问 GPU。
- 在浏览器上编写和执行 Python——这是一个重要的组件,因为训练过程由几个 Python 脚本控制(这些在 EDU 练习中有详细介绍)。
- 无需繁琐的机器配置即可训练模型。
任何拥有 Google 帐户的人都可以访问 Colab,您可以在这里了解更多信息: https://colab.research.google.com。我们的文档中也有说明。
开始训练
练习 1 和练习 2 自动提供训练和测试脚本,您可以简单地在您的机器或 Google Colab 上运行它们。您可以调整一些参数,例如测试数据的位置、训练数据的位置或 epoch 数量。
在模型训练过程中,脚本会输出每个 epoch 的进度、损失函数和 mAP50 指标。完成后,它会绘制这些指标并将其输出到图表中,供用户分析潜在的训练问题。练习概述了一些更常见的问题,例如过拟合、欠拟合或损失发散。 更多内容请参阅我们的文档。
训练脚本绘制了每个 epoch 的损失、mAP50、精确度、召回率等指标,以跟踪进度并识别潜在问题。
虽然此过程确实输出了 mAP50 分数,但重要的是要注意,此分数仅基于过程中的合成数据。要了解模型是否真正在物理世界中工作,我们必须使用真实世界图像对其进行测试。
步骤 3:测试 YOLOv8
与上述训练一样,练习 1 和 2 的测试脚本已经设置好,用户只需运行测试脚本即可,它将使用我们提供的带注释的真实世界图像测试模型。练习 2 的扩展部分概述了如何拍摄和注释自己的真实世界图像,以便更高级的用户可以创建自己的测试集,并调整其模拟以提供对齐的合成图像。
测试完成后,脚本输出以下内容
- mAP50 分数:我们的练习实现了大于 0.9 的 mAP50 分数
- 精确度和召回率图表:绘制每个置信度级别的精确度和召回率。这有助于用户准确找出模型的总体能力。
- 预测文件夹:模型对测试图像中物体位置的所有预测。这可以帮助用户了解模型性能不佳的具体情况。
分析结果
在第一轮训练之后,您可能希望将 mAP50 进一步提高;例如,制造商可能希望 mAP50 达到或大于 0.99。合成训练数据相较于真实世界训练数据的一个强大优势是,我们可以轻松地返回并创建新的训练数据,从而创建更健壮的模型,调整参数,并扩展数据集,为模型提供学习和良好表现所需的信息。
那么,我们可以在合成数据中引入哪些改变来提高模型性能呢?模拟又如何让这一切变得轻而易举?
- 光照:调整亮度、暗度和色温以增加多样性。与真实世界光照不同,我们可以轻松调整模拟光照,并且可以在整个数据集中编程光照变化,以便我们可以训练模型在各种光照条件下执行。
- 其他物体:包含逼真的物体数量和位置,以教模型不检测什么。FalconCloud 提供了一个资产库供您使用,我们的文档概述了如何创建您自己的孪生体。此外,您的模拟可以提供额外的多样性,例如数字孪生体的随机生成位置。
- 背景:使用多样化或真实的背景,以增强模拟与真实世界空间的对齐。精心设计的环境允许用户针对特定条件进行训练,并轻松地在各种环境中进行训练。
- 姿态:确保主对象模仿测试数据中发现的真实姿态。模拟使我们能够严格控制这一点。遮挡:包括部分可见或被遮挡的主对象,以匹配真实世界场景。数字孪生库为用户提供了各种资产。
我们不一定需要调整所有这些参数才能成功训练。这是合成数据更容易快速尝试变体以找到更好结果的另一个领域——对于真实世界数据来说,这是一项更加困难的任务。
练习之外
练习 1 和 2 旨在为用户提供关键的 AI 训练知识、基础模拟技能,以及开始创建自己项目所需的基本脚本和功能。每个练习都以一个挑战结束,鼓励用户继续改进模型或编辑模拟以适应他们自己的新颖孪生体。
Duality 定期为所有级别的学习者提供现场课程,教授更专业和深入的技能。这些课程包括:数字孪生创建、蓝图分解、模拟设置等等。所有这些资源都旨在降低任何希望利用合成数据带来的巨大可能性来构建更智能、更通用 AI 模型的用户的门槛。
准备好开始了吗? 创建您的免费 Falcon EDU 帐户,亲自尝试这些练习。然后开始您自己的任何能想到的合成数据项目!