合成数据加速机器视觉学习

虽然机器学习在基于视觉的自动化中的应用正在增长,但许多行业都面临着挑战,并难以在其计算机视觉应用中实施它。这在很大程度上是由于需要收集许多图像,以及与准确注释这些图像中的不同产品相关的挑战。
该领域的最新趋势之一是利用合成数据来加快数据收集和训练过程。合成数据通常被视为由计算机模拟生成的任何数据。
然而,将合成数据用于视觉用例需要合成图像生成方面的专业知识,并且可能很复杂、耗时且成本高昂。此外,虽然已经存在一些在现实生活中使用合成数据训练的机器学习模型的技术和最佳实践,但这些技术尚未普遍使用。
需要有一种有效的方法来连接视觉系统传统上所需的技能,以便对其进行训练和部署。这些技能包括数据收集和注释、机器学习模型训练和验证,以及集成到完整的自动化系统中。
提供一种自动化的方式来解决上述任务是扩大技术规模并使其易于访问且具有成本效益的关键。好消息是,有一种方法可以做到这一点!请继续阅读,了解如何操作。
合成数据在基于机器学习的视觉系统中的潜力
到 25 年,机器视觉市场的 AI 预计将达到 $2023B,复合年增长率为 26.3%(来源:MarketsandMarkets)。该市场包括行业用例,例如配套、分拣、拣选、车间安全、吞吐量分析、质量检查等等。例如,视觉系统利用异议检测算法自动识别物体的位置并引导机器人拾取它们。

机器人根据摄像头输入从垃圾箱中拾取金属部件。
物体检测的步骤是什么?
为了了解合成数据的潜力,让我们回顾一下部署典型目标检测视觉系统的工作流程:
部署基于视觉的目标检测系统的典型工作流程。
合成数据可以通过解决数据收集和注释阶段中的一些痛点来帮助缩短此工作流程并使其更加健壮:
- 数据收集 – 从理论上讲,无需设置物理环境即可提供无限量的合成数据。这对于数据受限的方案特别有益,即可以收集的实际数据量仅限于不存在或很难获得。例如,如果必须停止现有生产线以收集训练数据,则可能会造成潜在的生产损失。合成数据还可以提供比收集真实数据时通常观察到的更大的变化。例如,在虚拟 3D 环境中,很容易创建不同的光线或其他物理条件,而在真实环境中,对这些参数的控制通常有限。因此,利用合成数据可以提高机器学习模型在以前从未遇到过的环境中部署时的泛化能力。
- 注释 – 手动注释数据通常被视为一项重复的、平凡的任务。或者,正如谷歌研究院最近的一篇文章中所说的那样:“每个人都想做模型工作,而不是数据工作”。通常,注释对象的人工缺乏领域专业知识或适当的指导,这会导致注释不准确或完全错误。另一方面,合成数据总是被准确地注释,因为注释(边界框、对象轮廓等)是根据对合成数据如何形成的完整了解自动生成的。这样可以减少手动注释项目中常见的注释错误。
弥合合成与真实之间的差距
虽然 3D CAD 和仿真工具已经成熟了很长时间,但最近的进展在将仿真中学到的功能转化为现实方面取得了重大进展。这些计算机视觉技术通常被称为“Sim2Real”。
有一些现有的方法来生成合成数据,这些方法可以训练机器学习模型在输入真实数据时表现良好。

合成数据生成方法介于“接近真实”和“域随机化”之间。
所有这些方法都介于接近真实模拟和域随机化之间。
接近真实 – 在这种方法中,您需要努力使模拟尽可能接近真实的预期场景。以瓶子包装线为例,假设您需要在封盖和运输之前对瓶子进行基于视觉的自动计数。在开始生成合成数据之前,某些属性是已知的:
- 相机属性 – 确切位置、视野、分辨率等。
- 照明条件
- 瓶子和周围材料的特性——颜色、纹理、反射、折射、透明度等。
- 瓶子在测试站中的可能位置
- 由于相机的光学和电子特性而产生的典型噪声或伪影
给定其中一些属性,您可以手动创建模拟其中许多属性的 3D 模拟场景。
- 优点:
- 经过训练的机器学习模型可能在高度相似的场景中表现良好。
- 缺点:
- 对变化和扰动敏感。
- 需要更高的努力才能准确模拟场景。
- 在其他有细微差异的方案中更难自动化或重用。
域随机化 (DR) – 在这里,您可以随机化许多环境属性,从对象的数量及其位置到材质属性、相机属性、周围环境等。当基于这种随机数据集训练机器学习模型时,生成的训练模型将知道如何忽略随机化的属性,并专注于非随机化的属性(例如零件几何形状)。这样,经过训练的模型可以泛化到各种环境和领域,包括实际的预期环境。
- 优点:
- 可以轻松实现自动化。
- 节省宝贵的工程时间。
- 对环境变化不太敏感。
- 缺点:
- 需要更多数据,因为随机化会导致更高的方差(环境外观的更多选项)。
- 在某些情况下,机器学习模型在真实环境中的表现不够好,需要一些手动调整,例如,设置相机位置、视野、图像分辨率和对象纹理。

域随机化示例 – 对象位置、外观和光照条件被随机化,以便模型学会忽略这些属性并专注于几何形状。图像来源:Fangyi Zhang et al. – Adversarial Discriminative Sim-to-real Transfer of Visuo-motor policies
- 微调 – 我们用来采用以前针对特定任务在某个数据集上训练的机器学习模型,并继续在不同的数据集上训练它,可能使用不同的参数和不同的任务。在纯粹基于合成数据训练模型后,有时模型可以立即在真实数据中表现得足够好。在某些情况下,根据环境和任务的不同,机器学习模型可能需要使用少量真实(通常带注释的)图像进行一些微调,然后才能正常运行。
- 域适应 (DA) – 能够在一个或多个“源域”中训练的算法应用于不同(但相关)的“目标域”。在我们的例子中,合成数据集是我们的源域,我们希望训练一个模型在现实生活中表现良好。

“域转移”技术有助于缩小数据集源域与不同但相关的目标域之间的差距。
有几种技术可以缩小这种差距(通常称为“域转移”)。一些技术使用 GAN 来生成看起来更接近目标域的图像。其他方法使用基于导数的方法来生成逼真的图像。一般来说,DA是一个广泛而迷人的研究领域。
在工业用例中采用合成数据的挑战
您可以使用游戏引擎或模拟器,如 Blender、Unity3D、Unreal、Gazebo 等,并创建自定义 3D 模拟以生成合成注释数据集。通常,要使用这些工具实现您的目标,需要 3D 环境和编程方面的特定专业知识和知识。您需要知道如何创建场景,在不同图像之间创建方差(随机化),调整虚拟摄像机和其他传感器,最后创建图像,并以所需的格式进行注释。

很少能找到具有使用某些常用工具所需的各种专业知识的工程师。
除了所需的专业知识外,与任何其他工程或开发过程一样,此过程需要时间。特别是如果您选择对接近真实的模拟进行建模。这通常非常耗时。有时甚至达到这样的程度:创建模拟的工作量远高于手动收集和注释真实数据的工作量。
最后,即使您选择自己创建数据集,也需要在域随机化和微调的上下文中使用正确的方法创建和训练数据集。对于没有此类方法经验的工程师,培训结果可能不理想。
UnrealSynth软件如何提供帮助
UnrealSynth 虚幻合成数据生成器 利用虚幻引擎的实时渲染能力搭建逼真的三维场景,为 YOLO 等 AI 模型的训练提供自动生成的图像和标注数据。UnrealSynth 生成的合成数据可用于深度学习模型的训练和验证,可以极大地提高各种行业细分场景中目标识别任务的实施效率,例如:安全帽检测、交通标志检测、施工机械检测、车辆检测、行人检测、船舶检测等。
转载:合成数据加速机器视觉学习 (mvrlink.com)
相关文章:
合成数据加速机器视觉学习
虽然机器学习在基于视觉的自动化中的应用正在增长,但许多行业都面临着挑战,并难以在其计算机视觉应用中实施它。这在很大程度上是由于需要收集许多图像,以及与准确注释这些图像中的不同产品相关的挑战。 该领域的最新趋势之一是利用合成数据…...
物业管理服务预约小程序的效果如何
物业所涵盖的场景比较多,如小区住宅、办公楼、医院、度假区等,而所涵盖的业务也非常广,而在实际管理中,无论对外还是对内也存在一定难题: 1、品牌展示难、内部管理难 物业需求度比较广,设置跨区域也可以&…...
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决
错误的原因:是因为服务器分配空间不足,数据库归档日志满导致系统数据库登陆失败。 解决办法:1.删除以前的日志 2.增大归档日志的容量 3.关闭归档模式 一、删除以前的容量 1.登录账号后,查看ORACLE_BASE目录 【oraclelocalhost~】$…...
backbone:从AlexNet到...(持续补充ing)
文章目录 Introduction(前言知识)代码参考卷积、池化输出退化1*1卷积减少或增加通道数自然的减少计算量解决了什么问题,达到了什么样的效果AlexNet整体结构如下VGGNet网络结构如下,D、E分别代表VGG-16、VGG-19下图为VGG-16ResNet结构如下DenseNet结构如下Dense Block——特…...
FiRa标准——MAC实现(二)
在IEEE 802.15.4z标准中,最关键的就是引入了STS(加扰时间戳序列),实现了安全测距,大大提高了测距应用的安全性能。在FiRa的实现中,其密钥派生功能是非常重要的一个部分,本文首先对FiRa MAC中加密…...
oracle中分组函数LISTAGG
前言 Oracle中的 GROUP_CONCAT 函数用于将多行数据合并为一行,并以指定的分隔符分隔各个值。在Oracle中,没有直接的GROUP_CONCAT函数,但可以使用 LISTAGG 函数来实现类似的功能。 如何使用 1、使用SELECT语句选择需要合并的列,…...
深度学习pytorch之hub模块
pytorchhub模块里面有很多模型 https://pytorch.org/hub/ github网址:https://github.com/pytorch/pytorch import torch model torch.hub.load(pytorch/vision:v0.10.0, fcn_resnet50, pretrainedTrue) # or # model torch.hub.load(pytorch/vision:v0.10.0, fc…...
LeetCode 2258. 逃离火灾:BFS
【LetMeFly】2258.逃离火灾 力扣题目链接:https://leetcode.cn/problems/escape-the-spreading-fire/ 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid ,它表示一个网格图。每个格子为下面 3 个值之一: 0 表示草地。1 表示着火的格…...
C# PaddleInference.PP-HumanSeg 人像分割 替换背景色
效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleInference 包含4个分割模型 modnet-hrnet_w18 modnet-mobilenetv2 ppmatting-hrnet_w18-human_512 ppmattingv2-stdc1-human_512 代码 using OpenCvSharp; using Sdcb.PaddleInference; using System; using System.Col…...
Java 变量初始化的两种方式和优缺点比较
第一种初始化方式:(优先推荐) String fileRename null; File fileToSave null; 这种方式将变量的作用域限定在循环外部,即在整个代码块中都可以使用这些变量。初始值为null表示变量在开始时没有具体的数值。 这种方式更好的…...
15.三数之和
题目来源: leetcode题目,网址:15. 三数之和 - 力扣(LeetCode) 解题思路: 1.三重循环暴力遍历,超时原因,三重循环复杂度太高 2.双重循环哈希表,超时原因,哈…...
竞赛选题 深度学习疲劳驾驶检测 opencv python
文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…...
PROFINET和UDP、MODBUS-RTU通信速度对比实验
这篇博客我们介绍PROFINET 和MODBUS-RTU通信实验时的数据刷新速度,以及这种速度不同对控制系统带来的挑战都有哪些,在介绍这篇对比实验之前大家可以参考下面的文章链接: S7-1200PLC和SMART PLC的PN智能从站通信 S7-200 SMART 和 S7-1200PLC进行PROFINET IO通信-CSDN博客文…...
CSS3 多媒体查询、网格布局
一、CSS3多媒体查询: CSS3 多媒体查询继承了CSS2多媒体类型的所有思想,取代了查找设备的类型。CSS3根据设置自适应显示。 多媒体查询语法: media not|only mediatype and (expressions) { CSS 代码...; } not: not是用来排除掉某些特定…...
SpringBoot基础(九)-- 配置文件优先级
目录 1. 3种格式的配置文件的优先级 2. 案例演示 小结: 3. 小技巧:自动提示功能消失解决方案...
C++ static关键字
C static关键字 1、概述2、重要概念解释3、分情况案例解释3.1 static在类内使用3.2 static在类外使用案例一:案例二:案例三 1、概述 static关键字分为两种情况: 1.在类内使用 2.在类外使用 2、重要概念解释 (1)翻译…...
Anaconda Powershell Prompt和Anaconda Prompt的区别
先说结论:主要功能应该一样。区别在于powershell支持的命令更多。比如查询路径的命令pwd和列表命令ls。 Anaconda PowerShell Prompt和Anaconda Prompt是Anaconda发行版中两个不同的命令提示符工具。 Anaconda Prompt是Anaconda发布的默认命令提示符工具࿰…...
关于tcp发送成功但对端无法接收情况的思考
用到一个http服务,但调用频率很高,每次请求都使用短连接的话,有点浪费。 所以尝试复用http连接,请求的时候在头部添加Connection:Keep-alive,对端支持,但会在一定时常或一定请求次数后关闭该连接…...
01-解码-H264转YUV
整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->RTMP推流 客户端:RTMP拉流->解码(H264转YUV)->YUV显示(SDL2) H264码流转YUV是视频解码部分,具体的代码实现如下。 #include <stdio.h> #include <stdlib.h> #ifdef __cplusplus ext…...
keepalived+Nginx+邮件
实验场景: 我使用keepalived保证nginx的高可用,我想知道什么时候ip发生漂移,可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解,这有详细解释:keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
