合成数据在计算机视觉任务中的应用指南

今年早些时候,我与 Cognizant 深度学习协会团队的一位经理进行了交谈。 他的团队使用深度学习算法创建概念验证(展示商业机会的试点项目)。 他注意到他的团队面临的主要挑战之一是获取此类 POC 的数据。 获取特定于某个问题的具有良好代表性的数据是很困难的。 此外,在大多数情况下,利用真实世界的数据来测试系统是否提供所需的输出是不可能的,因为它会带来隐私相关的问题。 当我们结束谈话时,他表示一个可能的解决方案是生成合成数据(Synthetic Data),并且他的团队已经开始研究它。 这次谈话是我对“合成数据”的介绍。

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

在我处理AI模型的两年里,我对输入这些模型的数据的关注从未超出过数据增强过程。 最常见的是,在等式中,AI系统 = 模型 + 数据,我们保持数据不变并继续调整参数以提高模型性能。 吴恩达 (Andrew Ng) 最近在 LinkedIn 上发帖称,他正在考虑组织竞赛,我们采用流行的架构并保持不变,并要求团队处理数据——试图刺激以数据为中心的人工智能开发。

大多数时候,架构并不像数据集那么重要,拥有高质量、有代表性的数据集始终是一项不错的投资,在大多数情况下可能比升级到最新的检测器更重要。
— 约瑟夫·纳尔逊,联合创始人/首席执行官@ Roboflow

从我的研究中,我意识到缺乏高质量的、正确标注的数据实际上是世界各地AI团队面临的最大挑战,它阻碍了深度学习充分发挥其潜力。

我相信读者可以利用这篇文章作为了解计算机视觉合成数据生成(SDG-CV)领域的窗口。 SDG-CV 上有很多资源,但由于该领域最近变得流行,你可能会迷失方向。 在本文中,我尝试写下我对合成数据生成及其用例的理解。

1、计算机视觉任务中的合成数据

合成数据是通过计算机程序生成的数据。 这些程序可以是生成式深度学习算法(GAN、VAE、自回归模型)或生成 3D 模拟的 CGI 和游戏引擎(Unreal、Unity、Blender 等)。 计算机视觉的合成数据可以是 RGB 图像、分割图、深度图像、立体对、LiDAR 或红外图像。
在这里插入图片描述

图1:合成RGB图像、深度图像、表面法线、语义标签

为了构建强大的、高性能的深度学习模型,你需要大量带标注的数据。 你会惊讶地发现,在大多数情况下,这些模型不需要真实的训练图像即可表现良好。 与真实感相比,他们更喜欢数据的多样性,尤其是在物体检测方面。 然而,分割任务需要高度的纹理真实感,因为分割模型严重依赖纹理。

下面的一些示例将说明为什么采用合成数据是有益的。

2、合成数据使用示例

假设你对每年在地球上乱扔大量塑料瓶感到苦恼。 因此,你决定训练机器人来检测塑料瓶。 现在,这些瓶子可以以数千种不同的方式破碎。 收集瓶子的图片并对其进行注释不仅是一项乏味的任务,而且使用这样的数据集训练模型并不能涵盖所有可能的场景。 然而,它太贵了。 这些瓶子可以出现在不同的地形、不同的光照条件下,并放置在各种其他物体旁边。 更简单的替代方案是使用任何图形引擎(即 Unreal、Unity 或 Blender)合成数千个假的皱巴巴的瓶子图像。

让我们看看一个棘手的问题,合成数据可以解决这个问题—例如,自动驾驶汽车经过训练可以发现道路上的其他汽车。 显然,此类系统已经接受过大量汽车图像的训练,并且它们在识别汽车方面可能非常准确。 但它会检测到翻转的汽车吗? (这是我从 Immersive Limit 得到的一个有趣的例子。) 在现实世界中拍摄数千张翻转汽车的图像是不切实际的。 然而,通过使用任何 3D 渲染软件,我们可以合成任意数量的具有多种变化的翻转汽车。

3、合成数据与增强图像有何不同?

当我最初开始阅读有关合成数据的内容时,我脑海中浮现出一个疑问:合成数据的好处是否可以通过数据增强来实现。 好吧,这就是答案。

数据增强(Data Augmentation)是深度学习和计算机视觉工程师广泛使用的一项技术,通过将图像旋转几度、放大一点或翻转图像来修改真实数据。 该技术创建了数据集中现有图像的变体,并且可以被视为生成更多标记数据的廉价替代方案。

在这里插入图片描述

图 (2a):原始输入图像。 图(2b):狗的增强图像。 图(2c):不同背景上的目标对象-狗

但是,如果我们的目标对象出现在不同的背景、不同的光照条件或不同的上下文中,如图(2c)所示,该怎么办?

在这种情况下,合成数据占据上风。 另一个例子是,假设你正在训练无人机系统来监控高尔夫球场的维护情况。 在这种情况下,你的训练数据是草地图像,数据增强几乎没有任何用处。 此外,在某一天,照明可能会根据天气和一天中的时间而有所不同。 使用 3D 场景渲染软件,你可以模拟虚拟高尔夫球场并提取训练图像。 这绝对不像听起来那么容易,但这是一项一次性投资,可以在未来为你节省大量金钱和时间。

4、生成合成数据

如前所述,合成数据可以通过两种方法生成:

4.1 基于深度学习的合成数据生成

基于深度学习可以采取两种方法:

  • 使用生成对抗网络

在 GAN 模型中,我们创建了一个生成模型,该模型采用随机样本数据并生成与真实数据非常相似的合成数据。 判别器根据之前设置的条件将综合生成的数据与真实数据集进行比较。

  • 使用变分自编码器

在VAE模型中,编码器将真实数据集压缩成紧凑的形式并将其传输到解码器。 然后解码器生成一个输出,它是真实数据集的表示。 通过优化输入和输出数据之间的相关性来训练系统。

在这里插入图片描述

图 (3a):生成对抗网络 图 (3b):变分自动编码器

4.2 基于3D渲染的合成数据生成

基于 3D 渲染的 SD 生成的基本工作流程相当简单:

准备并按程序生成对象的 3D 模型,将它们放置在模拟场景中,设置环境(相机视点、照明等)并渲染合成图像以进行训练。 基本上,创建一个逼真的虚拟世界并提取它们的图像。 当你拥有 3D 渲染的合成数据时,3D 渲染器还可以自动进行标注。

在接触一些合成数据初创公司和公司时,我发现他们中的大多数依赖基于 CGI 或 3D 渲染的方法来生成合成数据。 避免使用基于深度学习的方法的原因很容易猜到:首先,优化 GAN 并不容易。

其次,GAN 存在模式崩溃的问题。 这意味着你的发生器崩溃,产生的样本种类有限,即。 仅生成少数类别的数据。 这是不希望的。 毕竟,将多样性和极端情况引入训练是使用合成数据集的整体理念。 然而,这些公司更多地使用对抗网络来进行领域适应。

5、合成数据的必要性

以下是必须采用合成数据进行训练和测试的几个原因:

  • 合成数据减轻了数据集偏差。 这对于人脸识别等与人类相关的计算机视觉任务尤其重要。
  • 合成数据能够覆盖实际数据捕获不可行的情况下的极端情况。 很多时候,真实的数据集不够多样化。 综合数据包含更多用例和模式。 这样你的模型就可以处理很少发生的关键情况。
  • 数据收集和标记是一项费力、昂贵且耗时的任务(例如:面部关键点检测的注释)。 你可以为数据集实现自动像素完美标记。 这可以为你节省大量时间并加快产品的上市时间。
  • 它解决了使真实数据的使用变得不可能或极其困难的隐私或法律问题。 例如在医疗和金融应用中。
  • 在渲染级别,合成数据生成可以随机化照明条件、相机视点、对象的方向、更改图像分辨率等。

6、结束语

以下是我个人认为在机器视觉训练合成数据方面做出了一些令人印象深刻的工作的几家初创公司和公司:AI Reverie、Chooch AI、Datagen、Parallel Domain、Neurolabs、Synthesis AI、Zumo Labs 。

可以在 此处查看合成数据公司的完整列表。 我还没有机会观看名单上所有公司的演示。 如果你有兴趣,请查看一下。


原文链接:合成数据与计算机视觉 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150791.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷达波束高度估计、折射分类、大气波导现象概念

一、雷达波束高度估计 雷达波束在地球大气层中的传播并非直线,而是受到大气层的影响呈现出一种弯曲的形态,这种现象称为大气折射。这是由于地球大气的密度并非均匀,从地面到高空,大气的密度逐渐减小,因此电磁波在穿过大气层时,会因大气密度的变化而改变传播方向,形成弯曲…

2000至2022年中国月度植被覆盖度产品

简介: 中国区域2000至2022年月度植被覆盖度产品的空间分辨率250米,合成方式采用月最大值合成。本产品采用基于归一化植被指数(NDVI)像元二分模型,根据土地利用类型确定纯植被像元值和纯裸土像元值,计算中去…

cereal:支持C++11的开源序列化库

cereal:支持C11的开源序列化库 文章目录 一:引言二、cereal简介三、cereal的下载和使用 一:引言 序列化 (Serialization) 程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另…

互联网图片安全风控实战训练营开营!

内容安全风控,即针对互联网产生的海量内容的外部、内部风险做宏观到微观的引导和审核,从内容安全领域帮助企业化解监管风险和社会舆论风险,其核心是识别文本、图片、视频、音频中的有害内容。 由于互联网内容类型繁杂、多如牛毛,加…

JVM技术文档--JVM诊断调优工具Arthas--阿里巴巴开源工具--一文搞懂Arthas--快速上手--国庆开卷!!

​ Arthas首页 简介 | arthas Arthas官网文档 Arthas首页、文档和下载 - 开源 Java 诊断工具 - OSCHINA - 中文开源技术交流社区 阿丹: 之前聊过了一些关于JMV中的分区等等,但是有同学还是在后台问我,还有私信问我,学了这些…

三维模型3DTile格式轻量化的纹理压缩和质量关系分析

三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中,纹理压缩是一个重要环节。但是,纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析: 1、压缩率与纹理质量&…

【UE】在游戏运行时,通过选择uasset来生成静态网格体

目录 主要流程 步骤 一、创建用于包含静态网格体的Actor蓝图 二、按钮点击事件 效果 主要流程 用户点击按钮后产生一个文件对话框,用户通过文件对话框选择指定的文件夹,我们获取到这个文件夹路径后处理成“按路径获取资产”节点所需的输入&#x…

【开发篇】二十、SpringBoot整合RocketMQ

文章目录 1、整合2、消息的生产3、消费4、发送异步消息5、补充:安装RocketMQ 1、整合 首先导入起步依赖,RocketMQ的starter不是Spring维护的,这一点从starter的命名可以看出来(不是spring-boot-starter-xxx,而是xxx-s…

【源码】hamcrest 源码阅读 空对象模式、模板方法模式的应用

文章目录 前言1. 类图概览2. 源码阅读2.1 抽象类 BaseMatcher2.1 接口 Description提炼模式:空对象模式 2. 接口 Description 与 SelfDescribing 配合使用提炼模式 模板方法 后记 前言 hamcrest ,一个被多个测试框架依赖的包。听说 hamcrest 的源码质量…

STM32 DMA从存储器发送数据到串口

1.任务描述 (1)ds18b20测量环境温度存储到存储器(数组)中。 (2)开启DMA将数组中的内容,通过DMA发送到串口 存在问题,ds18b20读到的数据是正常的,但是串口只是发送其低…

机器学习7:pytorch的逻辑回归

一、说明 逻辑回归模型是处理分类问题的最常见机器学习模型之一。二项式逻辑回归只是逻辑回归模型的一种类型。它指的是两个变量的分类,其中概率用于确定二元结果,因此“二项式”中的“bi”。结果为真或假 — 0 或 1。 二项式逻辑回归的一个例子是预测人…

Scala第十七章节

Scala第十七章节 scala总目录 文档资料下载 章节目标 了解集合的相关概念掌握Traversable集合的用法掌握随机学生序列案例 1. 集合 1.1 概述 但凡了解过编程的人都知道程序 算法 数据结构这句话, 它是由著名的瑞士计算机科学家尼古拉斯沃斯提出来的, 而他也是1984年图灵…

车险计算器微信小程序源码 带流量主功能

车险计算器微信小程序源码带流量主功能,可以精准的算出车险的书目,是一个非常实用的微信小程序源码。 简单的计算让你得知车险价值 另外也支持流量主,具体小编也就不多说了,大家自己搭建研究吧。 源码下载:https://d…

React xlsx(工具库) 处理表头合并

前端导出excel表格 引入xlsx插件,不然应该是运行不起来的 npm i xlsx xlsx中文文档 插件2 exceljs npm i exceljs exceljs中文文档 导出 例子 import { ExportExcel } from ./exportExcel/index;const columns[{title: id,dataIndex: item1,},{title: 序号,dataInd…

开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

RabbitMQ之Fanout(扇形) Exchange解读

目录 基本介绍 适用场景 springboot代码演示 演示架构 工程概述 RabbitConfig配置类:创建队列及交换机并进行绑定 MessageService业务类:发送消息及接收消息 主启动类RabbitMq01Application:实现ApplicationRunner接口 基本介绍 Fa…

12.1 使用键盘鼠标监控钩子

本节将介绍如何使用Windows API中的SetWindowsHookEx和RegisterHotKey函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于SetWindowsHookEx函数可以对所有线程进行监控,包括其他进程中…

Spring Cloud Gateway2之路由详解

Spring Cloud Gateway路由 文章目录 1. 前言2. Gateway路由的基本概念3. 三种路由1. 静态路由2. 动态路由1. 利用外部存储2. API动态路由 3. 服务发现路由(自动路由)3.1. 配置方式3.2 自动路由(服务发现)原理核心源码GatewayDiscoveryClientAutoConfigur…

机器学习算法基础--KNN分类算法

文章目录 1.KNN算法原理介绍2.KNN分类决策原则3.KNN度量距离介绍3.1.闵可夫斯基距离3.2.曼哈顿距离3.3.欧式距离 4.KNN分类算法实现5.KNN分类算法效果6.参考文章与致谢 1.KNN算法原理介绍 KNN(K-Nearest Neighbor)工作原理: 在一个存在标签的…

Springcloud支付模块

客户端消费者80 order(订单模块) 微服务提供者8001 payment(支付模块) 订单模块可以调动支付模块 步骤: 1、建moudle 2、改写pom 3、写yml 4、主启类 5、业务类 1、建父工程(创建spri…