今年早些时候,我与Cognizant的一位经理进行了一次交谈,他是深度学习协会团队的负责人。他的团队使用深度学习算法创建概念验证(演示商机的试点项目)。他注意到,他的团队面临的主要挑战之一是获得此类POC的数据。获取针对某一问题的具有良好代表性的数据是很困难的。此外,在大多数情况下,使用真实世界的数据来测试系统是否提供所需的输出是不可能的,因为它强加了与隐私相关的问题。在我们结束谈话时,他表示,一个可能的解决方案是生成合成数据,他的团队已经开始调查这一问题。这段对话是我对“合成数据”的介绍。
在我处理人工智能模型的两年时间里,在此之前,我对反馈到这些模型中的数据的关注从未超出过数据增强过程。在最常见的等式中,AI系统=模型+数据,我们保持数据不变,并继续调整参数以提高模型性能。Andrew Ng最近在LinkedIn上发帖称,他正在考虑组织比赛,让我们采用一个流行的架构并保持它的恒定,并要求团队使用数据-这是为了刺激以数据为中心的人工智能开发。Andrew Ng recently posted on LinkedIn
从我的研究中我意识到,缺乏高质量的正确注释的数据实际上是世界各地人工智能团队面临的最大挑战,它阻碍了深度学习充分发挥其潜力。
我相信读者可以把这篇文章作为了解计算机视觉合成数据生成(SDG-CV)领域的一个窗口。SDG-CV上有很多资源,但是自从这个领域最近变得流行起来,你就有可能迷路。在本文中,我试图加深对合成数据生成及其用例的理解。
计算机视觉任务中的合成数据:
合成数据是通过计算机程序生成的数据。这些程序可以是生成性深度学习算法(GAN、VAE、自回归模型),也可以是生成3D模拟的CGI和游戏引擎(虚幻、统一、Blender等等)。计算机视觉的合成数据可以是RGB图像、分割图、深度图像、立体对、激光雷达或红外图像。
要构建健壮、高性能的深度学习模型,您需要大量带注释的数据。你会惊讶地发现,在大多数情况下,这些模型并不需要真实的训练图像就能很好地执行。他们更喜欢数据的多样性,而不是照片真实感,特别是在物体检测方面。然而,分割任务需要高度的纹理真实感,因为分割模型严重依赖于纹理。
下面的几个例子将说明为什么采用合成数据是有益的。
合成数据用法示例:
假设你对每年在我们星球上乱扔的塑料瓶数量感到苦恼。所以你决定训练一个机器人来检测塑料瓶。现在,这些瓶子可以以数千种不同的方式皱缩。收集瓶子的图片并对其进行注释不仅是一项乏味的任务,而且使用这样的数据集训练您的模型不会涵盖所有可能的场景。尽管如此,它还是太贵了。这些瓶子可以出现在不同的地形上,在不同的照明条件下,躺在各种其他物体旁边。更简单的选择是使用任何图形引擎-即虚幻、Unity或Blender-合成数千个假的皱巴巴的瓶子图像。
让我们来看看一个棘手的问题,在那里合成数据可以起到拯救作用–自动驾驶汽车被训练成在道路上识别其他汽车的例子。很明显,这样的系统已经在大量的汽车图像上进行了训练,很可能它们在识别汽车方面非常准确。但是它能检测到翻转的汽车吗?(这是我从沉浸式限制中得到的一个有趣的例子。)在现实世界中拍摄数以千计的翻转汽车的图像是不切实际的。然而,通过使用任何3D渲染软件,我们可以合成任意数量的翻转汽车,并且有多种变化。Immersive Limit
合成数据与增强图像有何不同?
当我最初开始阅读合成数据时,我脑海中突然浮现出一个疑问,那就是合成数据的好处不能通过数据增强来实现。好吧,这就是这个问题的答案。
数据增强是DL和CV工程师广泛使用的一种技术,通过将图像旋转几度、放大一点或翻转图像来修改实际数据。该技术创建数据集中现有图像的变体,并且可以被视为生成更多标签数据的廉价替代方案。
但是,如果我们的目标对象出现在不同的背景、不同的照明条件或不同的上下文中,如图(2c)所示。
在这种情况下,合成数据占据了上风。另一个例子是,假设你正在训练一个无人机系统来监控高尔夫球场的维护。在这种情况下,您的训练数据是草地的图像,数据增强几乎没有任何用处。此外,在给定的一天中,根据天气和一天中的时间,照明可能会有所不同。使用3D场景渲染软件,您可以模拟虚拟高尔夫球场并提取训练图像。这绝对不像听起来那么容易,但这是一次性的投资,将来会为你节省大量的金钱和时间。
生成合成数据:
如前所述,合成数据可以通过两种方法生成:
1.基于深度学习的方法在这种方法下可以采取两种方法:
a)使用生成性对抗网络:在GAN模型中,我们创建了一个生成性模型,该模型随机抽取样本数据,生成与真实数据非常相似的合成数据。鉴别器基于之前设置的条件将该合成生成的数据与实际数据集进行比较。
b)使用变分自动编码器:在VAE模型中,编码器将真实数据集压缩成紧凑的形式,并将其传输到解码器。然后,解码器生成输出,该输出是真实数据集的表示。通过优化输入和输出数据之间的相关性来训练系统。
2.基于3D渲染的方法基于3D渲染的SD生成的基本流程相当简单:
准备并按程序生成对象的3D模型,将其放置在模拟场景中,设置环境(摄像机视点、照明等)并渲染用于训练的合成图像。基本上,就是创建一个逼真的虚拟世界,并提取其中的图像。当您具有3D渲染的合成数据时,3D渲染器也会自动为您进行注释。
当我联系一些合成数据初创公司和公司时,我发现他们中的大多数依赖于基于CGI或3D渲染的方法来生成合成数据。避免使用基于深度学习的方法的原因很容易猜到:首先,优化Gans并非易事。其次,甘斯伴随着模式崩溃的问题。这意味着你的发电机崩溃了,产生的样品种类有限,例如。只生成几个类别的数据。这是不可取的。毕竟,将多样性和角落案例引入训练是使用合成数据集的全部想法。然而,这些公司更多地使用对抗性网络进行域名适配。
综合数据的好处以及您必须考虑在培训和测试中采用它们的原因。
以下是您必须采用合成数据进行培训和测试的几个原因:
- 合成数据减轻了数据集的偏差。这对于人脸识别等与人类相关的计算机视觉任务尤其重要。
- 合成数据能够覆盖真实数据捕获不实用的上下文中的角落情况。很多时候,真实的数据集不够多样化。合成数据包含更多的用例和模式。这样,您的模型就可以准备好处理很少发生的危急情况。
- 数据收集和标记是一项费力、昂贵和耗时的任务(例如:面部关键点检测的注释)。您可以自动为您的数据集添加像素完美的标签。这为您节省了大量时间,并加快了产品上市的时间。
- 它解决了隐私或法律问题,这些问题使使用真实数据变得不可能或困难得令人望而却步。例如在医疗和金融应用中。
- 在渲染级别,合成数据生成可以随机化照明条件、相机视点、对象方向、更改图像分辨率等。
做好准备,让我们进一步了解一种用于增强或改进合成数据的技术。这项技术在缩小合成数据中的Sim2Real差距方面起到了不可或缺的作用。我将简要描述一下它是什么,详细的解释留待改天再解释。
摘要:
以下是我个人认为在视觉训练的合成数据方面做了一些令人印象深刻的工作的初创公司和公司-AI Reverie、Chooch AI、DataGen、Parallel Domain、NeuroLabs、Synthel AI、Zumo LabsAI Reverie Chooch AI Datagen Parallel Domain Neurolabs Synthesis AI Zumo Labs
你可以在这里找到合成数据公司的全面名单。我还没有机会看名单上所有公司的演示。如果你感兴趣的话,可以去看看。here
希望本文能帮助您深入了解合成数据生成及其用例。在接下来的几天里,我希望在SD域中开发一些现成的工具和包。关于那件事,我会随时通知你的。
感谢阅读!
参考资料:
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/16/%e8%ae%a1%e7%ae%97%e6%9c%ba%e8%a7%86%e8%a7%89%e7%9a%84%e5%90%88%e6%88%90%e6%95%b0%e6%8d%ae%ef%bc%9a%e4%bd%a0%e6%9c%89%e6%b2%a1%e6%9c%89%e6%83%b3%e8%bf%87%ef%bc%9f/