搜索 Unity

由3D模型生成合成数据

2021年9月8日 类别 技术 | 8 分 阅读
Image of the different applications of computer vision
Image of the different applications of computer vision

合成数据现在能根据3D资源进行生成。如果你在计算机视觉模型的开发中遇到了数据方面的困难,可阅读本文来获悉更多的数据来源和数据生成技术。

与真实数据相比,使用合成数据的计算机视觉系统标志着一种重大的转变。真实数据的收集和标注通常需要大量的人力,而合成数据只需一名机器学习工程师花费几分钟就能生成完毕,使得开发更为迅速、数据更为丰富。数据的生成速度是如此之快,你完全可以一次性尝试多种数据变体,快速找到对模型改进有实质性作用的数据。

但即便是合成数据,找到充足的数据来源仍是一个难题:数据集可能不必通过在成千上万的图像和标注中采样生成,但仍旧需要数十种或上百种模型网格、纹理、动画等3D资源。诚然,合成数据对内容来源的要求更低,但3D资源的制作也需要有更为新颖的制作手段。

幸运的是,电影和游戏行业已经与同样的问题角力了四十多年。四十年的时间足以让行业开发出成熟的内容创作技术、积累庞大的内容库,其中的大部分内容更是能直接用于合成数据。

本文将针对几种计算机视觉应用类型,介绍最为合适的3D内容创作方式。

在线3D资源

要想获取3D资源,速度最快、成本最低的方法就是在网上搜索。类似Unity Asset Store等线上商店云集了各色3D艺术家制作的免费和付费内容,可用于游戏、电影和其他3D应用。

Different examples of asset store assets
Unity Asset Store中搜索出来的“Chair”

资源通常以“资源包”的形式分发,包内常包含多种3D模型、纹理变体、材质和动画。所有内容都可以用于随机化生成,产生几乎无限的变体。不同的艺术家都有着自己的风格特色,制作出的资源也能进一步增加数据多样性,防止模型出现偏差和过度拟合。

如果视觉模型需要检测“椅子”或“猫”等种类多样的大型物体,在线资源是很好的选择。为了让视觉模型具备一定的泛用性,数据集的形状、材质、颜色和姿态等各方面必须足够多样。 

而那些现实中不存在的卡通风资源或奇特的纹理和颜色,也能提高视觉模型的泛用性。在我们最近参与的一个项目中,我们将数据集从一个小型高清写实资源库切换成Asset Store上的各色3D模型和纹理,并观察到模型的性能有了显著的改进——其效果优于此前任意一种改进方案。

资源扫描

合成数据集要想用在物体或工业制品检测的训练中,物品模型就必须逼真、精确。此类模型一般不容易在网上找到,但我们可以借助3D扫描技术来自行制作资源。

different grocery store products all available in the asset store
SynthDet的资源皆使用平板扫描仪和3D建模技术制作而来。

SynthDet的资源便是使用平板扫描仪和3D建模技术制作而来,制作教程可在此处查看。

市面上目前存在有多种3D扫描技术,适用于不同的物品种类、质量要求和预算。比较好用的有以下几种:

优点:适用于任意大小或形状的物体;可捕捉材质质感和细节

缺点:对光照条件和物体颜色非常敏感;过程无聊

 

  • 平板扫描仪和3D模型:平板扫描仪可从各个角度来扫描扁平表面,扫描结果可合并成纹理贴图,贴到人工制作的3D网格模型上。关于此方法的详情,请在我们百货商品检测项目视频教程中了解。

优点:成本低廉,还原度高

缺点:只适用于带有扁平表面的物体;需要人工制作模型。

 

  • 工业3D扫描仪:专业的3D扫描设备,可使用激光或结构光扫描出高度精确的几何形,非常适合用于扫描机械部件和复杂电子设备。

优点:能精确测量绝大多数物体的几何形状,速度快

缺点:成本高昂,扫描对象的尺寸受限

程序化内容生成

扫描和在线3D资源通常描绘的是真实物体,比如猫、椅子或木头纹理。而另一种内容形式——程序化资源,也在快速成长。这里的程序化指的是基于规则算法来生成无限的资源变化。程序化资源自带的参数可用于定制其外观和形状,将参数随机化就可以生成极为多样的资源,非常适合用于制作合成数据。资源的随机化参数可以反复调整,藉此提高视觉模型的性能。

如果资源数量较多但有点千篇一律,程序化资源可以很好地补足短板。路面、人脸以及布料和混凝土等都非常适合程序化地生成。资源的部分元素,如磨损、年龄、形状和颜色,都可以作为参数加入到随机化算法中。市面上较为常见的程序化资源制作工具包括:Unity Shader Graph、Adobe Substance 3D和Houdini等,Unity Asset Store上也提供有几种专门针对特定内容的程序化生成工具。

Easy roads 3d app that builds procedural roads in Unity
EasyRoads3D可在Unity中程序化地生成路面。

程序化生成技术同样可以辅助生成合成数据的环境,生成程序既可以生成杂乱随机的环境,也可以生成结构复杂的系统,为数据集提供较为逼真的背景。你可以使用Unity的API编写出程序化的环境生成程序,也可以使用Houdini来生成带有一定构造的环境。

若想了解更多的实例、上手程序化内容生成,请查看Unity Learn上的Getting Started with Houdini & UnityIntroduction to ShaderGraph教程。

开始使用合成数据

游戏和电影行业已经积累了大量的3D内容,而我们可以发挥一下“拿来主义”,借助这些内容快速地打开局面,训练、迭代视觉模型。所有这些资源皆包含在了Unity Perception资源包中,只要导入资源包、为其加入随机化元素,你就能迅速生成种类多样的数据集。

以上方法皆已被Unity Computer Vision团队采用。如果你想根据特定标准制作合成数据,或想进一步学习合成数据的使用方法,可在此处联系我们

2021年9月8日 类别 技术 | 8 分 阅读