当前位置: 首页 > news >正文

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

 

虽然机器学习在基于视觉的自动化中的应用正在增长,但许多行业都面临着挑战,并难以在其计算机视觉应用中实施它。这在很大程度上是由于需要收集许多图像,以及与准确注释这些图像中的不同产品相关的挑战。

该领域的最新趋势之一是利用合成数据来加快数据收集和训练过程。合成数据通常被视为由计算机模拟生成的任何数据。

然而,将合成数据用于视觉用例需要合成图像生成方面的专业知识,并且可能很复杂、耗时且成本高昂。此外,虽然已经存在一些在现实生活中使用合成数据训练的机器学习模型的技术和最佳实践,但这些技术尚未普遍使用。

需要有一种有效的方法来连接视觉系统传统上所需的技能,以便对其进行训练和部署。这些技能包括数据收集和注释、机器学习模型训练和验证,以及集成到完整的自动化系统中。

提供一种自动化的方式来解决上述任务是扩大技术规模并使其易于访问且具有成本效益的关键。好消息是,有一种方法可以做到这一点!请继续阅读,了解如何操作。

合成数据在基于机器学习的视觉系统中的潜力

到 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发布的默认命令提示符工具&#xff0…...

关于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+邮件

实验场景&#xff1a; 我使用keepalived保证nginx的高可用&#xff0c;我想知道什么时候ip发生漂移&#xff0c;可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解&#xff0c;这有详细解释&#xff1a;keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...