合成数据可降低获取标注数据的难度,方便机器学习模型的训练。本文属于合成数据系列第二篇,我们将用一个对象检测的例子,来介绍Unity生成和分析合成数据集的各种工具。
在系列首篇文章中(点击回看),我们讨论了搜集大量标签图像、训练机器学习模型完成电脑视觉任务时遇到的各种挑战。还讨论了Google Cloud AI和OpenAI的最前沿研究,在物体检测等类似任务中使用合成数据的可行性。
然而,搜集合成数据、制作可用于训练的数据集是十分复杂的,一不小心就会有所疏漏。这导致开发者往往不得不编写一些一次性的方案来生成数据,然而这些数据的效果通常不理想。今天,我们为大家介绍两款全新工具:Unity Perception Package和Dataset Insight,它们可以删繁就简,让高质量合成数据集的生成和分析更为简单。
Unity Perception 功能包
Unity Perception 功能包捕捉到的RGB、2D包围盒以及其它度量信息
Unity Perception 功能包能够以全新的方式在Unity中合生成合成数据集,且同时支持通用渲染管线(URP)与高清渲染管线(HDRP)。在初版中,功能包带有捕捉数据集的工具,包含4种基本功能:添加对象标签、贴标器、图像捕捉和自定义度量衡。用户在功能包中输入对象标签的相关信息,接着功能包会自动挑选信息、将其反馈到贴标器中。贴标器使用该信息来生成Ground Truth真值数据,象是3D包围盒或语义分隔遮罩。经过处理的真值会与相关度量衡一起储存到JSON文件中。
我们计划在未来添加更多的贴标器,比如实例分隔,来支持其它常见的计算机视觉任务;场景生成工具;配置、管理大批domain randomization(域随机化)参数的功能,以及云服务的规模扩展。
Data Insights数据分析
任何ML从业者都明白查看、分析带标注数据的重要性。而在合成数据集中,云端模拟可生成上百万的图像,数据集会变得非常大。Dataset Insights是一款Python功能包,可让大型合成数据集的数据运算、报告生成更为简单高效。功能包可根据不同的度量衡,利用本地设备或云端服务,在每帧上可视化整个数据集运算积累而成的统计数据。
在下面,我们将介绍如何使用Unity Perception Package和Dataset Insights来生成合成数据集,训练一个可检测商品、并为其贴上标签的物品检测模型。所有工具都具备通用性,也适用于其他环境和计算机视觉任务。我们的目标是让更多ML从业者可利用起合成数据来解决各式各样的需求。
3D资源制作
在Google Cloud AI最近的一次研究中,谷歌使用了64种常见商品,包括麦片与纸巾,来验证了只用合成数据训练物体检测模型的可行性。我们受到研究启发,使用了与原产品大孝形状和纹理变化相近的同数量产品来进行训练。
我们使用数字内容创作工具、扫描标签和摄影扫描来制作了一整个库的商品3D资源。还将现实图像贴在方块、球体和柱状体这类简单形状上,来制作背景和遮挡物资源。所有商品都带有通用渲染管线、Shader Graph制作而成的着色器。
场景制作
我们在背景货架上放置了3D资源,又加入了形状、纹理上的干扰让场景更为复杂。多样化的训练场景可让训练出的ML模型能应付现实中的大部分场景。
Unity编辑器中的场景视图,展示了各个资源的摆放
自左向右:遮挡物体、商品3D资源、和背景货架资源
在每个渲染的Loop循环中,系统会随机生成前景、背景和遮挡物体的摆放位置,以及灯光、物体颜色、模糊效果和噪声干扰。如下方代码所示,Perception功能包会抓取RGB图像、对象包围盒和其它随即参数来生成数据集中的每个图像。
Unity Perception生成的带注解数据输出
从合成数据集中采样而来的带标签图像
使用Dataset Insights分析数据
在大型合成数据集中,要人工检查所有图像几乎是天方夜谭,而识别中的偏差、缺失、瑕疵、错误的摆放位置、摆放姿势等等问题都会让ML模型的表现无法达到最优。
在本例中,生成的对象集会被送入Dataset Insights,用于计算统计数据、训练ML模型。Insights能高效处理用于对象检测模型训练的图像数据,确保数据是有效的。部分数据集的总结数据在下方列出。
Dataset Insights中的表格,展示了数据集中各个对象的分布
通过表格可知商品被识别次数没有出现过多或过少的情况
在测试阶段,我们遇到过部分对象多次出现在一帧中的异常情况,在对象计数的可视化图表中也有体现。对此,我们迅速修复了问题,确保对象能平均地分布到整个数据集中。
数据集中每个例子的对象计数分布
虽然我们希望数据集的对象分布能平均分散在每帧上,但也希望ML模型具有在数量或多或少的图片中检测多个对象的能力。上方表格展示了数据集每帧中所出现的标签对象,对象跟随一个固定的正态分布模式,每帧约有7个对象。
不同光源位置的可视化图表。每个点都表示影响目标对象的光源。为了模拟现实世界中的光照条件,我们还多样化了场景光照的方向和颜色。在上图中,光源位于不同的位置,让数据集中捕捉到的光照和阴影都有不同。
Unity Simulation:大规模模拟合成数据集
为了在模拟中体现出尽可能多的排序组合,我们使用了Unity Simulation云服务,在云端运行项目,生成训练计算机视觉模型所需的完整数据集。
在下一篇文章中,我们将进一步介绍如何使用Unity Simulation生成大规模数据集,来训练机器学习模型、与真实数据做比照,讨论合成数据带来的经济效益,及几个模拟过程中学到的关键点。
Perception工具完全免费,请在Github上下载工具和对象检测示例。如果想要扩大数据集规模,欢迎注册使用Unity Simulation (Beta)云服务。
*文中所有商标均为企业私有财产