利用 3D 引擎在深度学习中生成合成数据

合成数据生成对于提供数据驱动的算法至关重要,该算法在几乎所有计算机视觉问题中都超过了传统技术的性能。在现实世界中收集和标记这些数据饥渴的模型所需的数据量可能变得不可行且容易出错,而合成数据使我们有可能生成具有像素完美注释的大量数据。

利用 3D 引擎在深度学习中生成合成数据

1、合成数据的介绍

近年来,合成数据生成已成为手动收集和注释数据集的替代方法。数据合成器的优点主要有两个方面。首先,它将获取数据的成本降低到几乎为零,同时消除了几乎所有的数据处理工作。其次,即使数据不可用,它也有可能实现新机器学习想法的快速原型设计。简而言之,构造良好的合成数据生成器会为任何机器学习案例生成现成格式的数据。然而,合成数据生成器的挑战在于,它们通常是特定于领域的,应用领域狭窄,远不如网络架构和学习方法成熟。

在计算机视觉领域,合成数据生成特别有趣,因为相关资源和工具的数量多年来一直在显着增长和改进。不过,发展不是在机器学习领域,而是在虚幻引擎、Blender和Unity等游戏引擎中。通常由专业设计师制作,制作逼真的场景,提供可视化的精美细节。

UnrealSynth虚幻合成数据生成器使用虚幻引擎生成由文本组成的合成数据图像。这些数据将用于训练网络,目的是检测从真实环境中捕获的图像中的文本。

2、使用 3D 引擎合成场景文本数据

随着游戏引擎缩小现实世界和合成世界之间的差距,探索基于游戏引擎的合成数据生成的可能性是很自然的。游戏引擎的优势首先在于,可以通过整体渲染场景和文本来实现现实世界的变化。

UnrealSynth虚幻合成数据生成器利用虚幻引擎的实时渲染能力搭建逼真的三维场景,为YOLO等AI模型的训练提供自动生成的图像和标注数据。UnrealSynth生成的合成数据可用于深度学习模型的训练和验证,可以极大地提高各种行业细分场景中目标识别任务的实施效率,例如:安全帽检测、交通标志检测、施工机械检测、车辆检测、行人检测、船舶检测等。

用户使用UnrealSynth虚幻合成数据生成器可以简单快速的搭建虚幻场景,用户将GLB文件添加到场景后,接下来就可以配置UnrealSynth 合成数据生成参数,通过参数配置生成逼真的虚幻场景, 参数配置说明如下:

参数说明
模型类别生成合成数据synth.yaml文件中记录物体的类型
环境变更变更场景背景
截图数量生成合成数据集image目录下的图像数量
物体个数选场景中的物体个数
随机旋转场景中的物体随机旋转角度
随机高度场景中的物体随机移动的高度
截图分辨率生成的images图像数据集中的图像分辨率
缩放物体缩放调整大小

点击【确定】后会在本地目录中...\UnrealSynth\Windows\UnrealSynth\Content\UserData自动生成两个文件夹以及一个yaml文件:images、labels、test.yaml文件。

UnrealSynth\Windows\UnrealSynth\Content\UserData
    |- images
        |-train
            |- 0.png
            |- 1.png
            |- 2.png
            |- ...
         |-val
            |- 0.png
            |- 1.png
            |- 2.png
            |- ...
    |- labels
        |-train
            |- 0.txt
            |- 1.txt
            |- 2.txt
            |- ...
        |-val
            |- 0.txt
            |- 1.txt
            |- 2.txt
            |- ...
    |- synth.yaml
    

到此,UnrealSynth虚幻合成数据生成器的所有工作就已经完成了,现在就可以使用UnrealSynth虚幻合成数据生成器生成的合成数据区进行模型训练了。

3、利用UnrealSynth生成的合成数据训练YOLOv8模型

数据集生成后有三个办法可以进行模型训练:使用python脚本、使用命令行、使用在线服务。

第一种是使用python脚本,需首先安装ultralytics包,训练代码如下所示:

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='synth.yaml', epochs=100, imgsz=640)

第二种是使用命令行,需安装YOLO 命令行工具,训练代码如下:

# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

第三种是使用ultralytics hub 或者其他在线训练工具。

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号