UnrealSynth 虛幻合成數(shù)據(jù)生成器利用虛幻引擎的實時渲染能力搭建逼真的三維場景,為 YOLO 等 AI 模型的訓(xùn)練提供自動生成的圖像和標(biāo)注數(shù)據(jù),官方下載地址:UnrealSynth虛幻合成數(shù)據(jù)生成器?。
UnrealSynth 生成的合成數(shù)據(jù)可用于深度學(xué)習(xí)模型的訓(xùn)練和驗證,可以極大地提高各種行業(yè)細(xì)分場景中目標(biāo)識別任務(wù)的實施效率,例如:安全帽檢測、交通標(biāo)志檢測、施工機(jī)械檢測、車輛檢測、行人檢測、船舶檢測等。

1、UnrealSynth 合成數(shù)據(jù)工具包內(nèi)容
UnrealSynth 基于 UE5 虛幻引擎開發(fā),目前支持 YOLO 系列模型合成數(shù)據(jù)的生成,當(dāng)前版本號 V1.0,主要文件和目錄的組織結(jié)構(gòu)如下:
- Engine/:發(fā)布本程序的原始軟件的編碼和資源文件,其中包含構(gòu)件此程序的二進(jìn)制編碼和一些存放在 content 文件中的原始資產(chǎn)等
- UnrealSynth/Binaries/:本程序兼容系統(tǒng)及其他的二進(jìn)制文件
- UnrealSynth/Content/:本程序中所使用的所有資產(chǎn)文件已被烘焙成 pak 包
- UnrealSynth.exe:運行程序
- LICENSE.md:開發(fā)包許可協(xié)議文件
運行UnrealSynth的推薦配置為:
- 處理器:13th Gen Intel(R) Core(TM) i5-13400 2.50 GHz
- RAM:64.0 GB
- 獨顯:NVIDIA GeForce RTX 3080 Ti
2、UnrealSynth 合成數(shù)據(jù)生成
以下是以 YOLO 模型為例,詳細(xì)講述如何使用 UnrealSynth 虛幻引擎數(shù)據(jù)生成器來生成為 YOLO 模型生成訓(xùn)練的合成數(shù)據(jù)。
打開 UnrealSynth 虛幻引擎合成數(shù)據(jù)生成器,點擊【虛幻合成數(shù)據(jù)生成器】按鈕,進(jìn)入虛幻場景編輯頁面,點擊【環(huán)境變更】按鈕切換合適的場景,輸入【模型類別】參數(shù)后就可以開始導(dǎo)入模型,點擊【導(dǎo)入 GLB 模型】彈出文件選擇框,任意選擇一個 GLB 文件,這里以抱枕文件為例,添加抱枕 GLB 文件后的場景如下:

將 GLB 文件添加到場景后,接下來就可以配置 UnrealSynth 合成數(shù)據(jù)生成參數(shù),參數(shù)配置說明如下:
- 模型類別: 生成合成數(shù)據(jù) synth.yaml 文件中記錄物體的類型
- 環(huán)境變更 : 變更場景背景
- 截圖數(shù)量 : 生成合成數(shù)據(jù)集 image 目錄下的圖像數(shù)量,在 train 和 val 目錄下各自生成總數(shù)一半數(shù)量的圖片
- 物體個數(shù) : 設(shè)置場景中的物體個數(shù),目前最多支持 5 個,并且是隨機(jī)的選取模型的類別
- 隨機(jī)旋轉(zhuǎn) : 場景中的物體隨機(jī)旋轉(zhuǎn)角度
- 隨機(jī)高度 : 場景中的物體隨機(jī)移動的高度
- 截圖分辨率: 生成的 images 圖像數(shù)據(jù)集中的圖像分辨率
- 縮放 : 物體縮放調(diào)整大小
點擊【確定】后會在本地目錄中...\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 合成數(shù)據(jù)已生成,可以利用數(shù)據(jù)集訓(xùn)練 YOLO 模型,會在 images 下生成兩個圖像目錄:train 和 val。train 目錄表示訓(xùn)練圖像數(shù)據(jù)目錄,val 表示驗證圖像數(shù)據(jù)目錄。
例如 train 目錄下的圖像集合:

同樣在 labels 標(biāo)注目錄下也會生成兩個標(biāo)注目錄:train 和 val。train 目錄表示標(biāo)注訓(xùn)練數(shù)據(jù)目錄,val 表示標(biāo)注驗證數(shù)據(jù)目錄。
生成的 labels 標(biāo)注數(shù)據(jù)格式如下:
0 0.68724 0.458796 0.024479 0.039815
0 0.511719 0.504167 0.021354 0.034259
0 0.550781 0.596759 0.039062 0.04537
0 0.549219 0.368519 0.023438 0.044444
0 0.47526 0.504167 0.009896 0.030556
0 0.470313 0.69537 0.027083 0.035185
0 0.570052 0.499074 0.016146 0.040741
0 0.413542 0.344444 0.022917 0.037037
0 0.613802 0.562037 0.015104 0.027778
0 0.477344 0.569444 0.017188 0.016667
生成的 synth.yaml 數(shù)據(jù)格式如下:
path:
train: images
val: images
test:
names:
0: pear
1: Fruit tray
2: apple
3: papaya
4: apple
3、利用 UnrealSynth 合成數(shù)據(jù)訓(xùn)練 YOLOv8 模型
數(shù)據(jù)集生成后有三個辦法可以進(jìn)行模型訓(xùn)練:使用 python 腳本、使用命令行、使用在線服務(wù)。
第一種是使用 python 腳本,需首先安裝 ultralytics 包,訓(xùn)練代碼如下所示:
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 命令行工具,訓(xùn)練代碼如下:
# 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?或者其他在線訓(xùn)練工具。