用合成数据训练语义分割模型【裂缝检测】

最近,我们推出了合成裂缝分割数据集,在本文中,我们将深入探讨应用于合成数据生成过程的改进和启发式方法。 阅读完这篇文章后,你将了解我们如何设法创建一个数据集,该数据集可以像使用真实数据一样高效地训练模型。

 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

1、数据集创建过程的快速回顾

让我们回顾一下我们在本文中详细讨论的合成数据集创建过程的总体思路。

我们首先收集现实世界的纹理,例如沥青、墙壁和混凝土。 想象一下你在这些纹理上绘制裂缝,就像在绘画程序中使用画笔一样。 然而,这仅仅是开始。 我们将更进一步,使用一些合成和后处理技术将这些绘制的裂缝转换为真实的裂缝。 在以下部分中,我们将更深入地探讨合成和后期处理的世界。

2、以数据为中心 vs. 以模型为中心

在机器学习和人工智能领域,增强模型性能主要有两种理念:以数据为中心和以模型为中心的方法。 以模型为中心的方法主要集中于改进模型的架构、大小和训练技术。 相反,以数据为中心的理念强调提高训练数据的质量、多样性和相关性。 基本信念是,即使模型的架构保持不变,卓越的数据也会带来卓越的模型。 在此背景下,我们坚持以数据为中心的方法。 在整个实验过程中,我们保持相同的模型架构、模型大小和超参数。 你可以在本文的结论部分找到有关架构和培训的详细信息。

让我们探索所有用于创建合成数据的逐步增强和启发式方法,这些数据能够训练与真实数据训练的模型相当的模型。

3、合成数据生成器

生成器是我们合成数据创建过程的核心。 生成器的设计应能够模拟实际裂缝的复杂且多样的结构。 这种初步的表示作为进一步处理和细化的基础,使合成图像更接近现实。

我们发现3种不同类型的算法的组合可以很好地充当生成器:

生成器

通过合并这些图案并按顺序分层,我们可以为预期裂缝生成复杂多样的结构。 生成器的输出由白色背景上的 1 像素轮廓组成,作为后续处理的蓝图。 对于随机游走,我们采用了逐渐改变的厚度来增强数据的多样性。

可以点击这里阅读有关每种算法的更多信息。

4、膨胀和腐蚀

首先,我们需要增加线条的粗细。 在 python 中,我们使用 cv2.dilate 来实现此目的。 需要调整一些参数,例如迭代次数、内核和 kernel_size。 我们将它们保持在某个随机范围内以增加多样性。 内核也可能是随机的。

腐蚀

我们想以某种方式破坏线路,可以使用 ImgAug 中的 iaa.ElasticTransformation

弹性变换

我们还应用 iaa.PiecewiseAffine 来进一步扭曲图像:

逐点仿射变换

第一次训练:此时,生成的图像可能看起来相当令人信服,但在训练一个好的模型时,我们通常需要更高水平的真实感,尤其是在细节方面。 我们尝试过在此类图像上训练模型,但它立即过度拟合,导致在真实图像上表现不佳。

5、边缘平滑

经过仔细检查,很明显我们的裂缝呈现出切入背景的锋利边缘线。 这种细节级别对于训练模型来说可能显得人为,可能导致过度拟合,即模型在合成数据上表现完美,但在真实数据上表现不佳。 值得注意的是,这种细节水平虽然对人眼来说并不明显,但可能会给模型的泛化带来挑战。 为了缓解这个问题,我们以一定的概率应用 iaa.GaussianBlur 和 iaa.MotionBlur 的组合,为裂缝引入模糊效果:

没有边缘平滑(左),有边缘平滑(右)

通过这个小技巧,我们成功地训练了一个没有过拟合的模型,但是真实图像上的 IoU 仍然远未达到令人满意的值:

6、轮廓纹理

目前,我们的线条采用鲜明、无瑕疵的黑色,与现实中的外观相去甚远。 我们的目标是为这些线条注入更丰富、更难以预测的质感。 这是我们发现的一个巧妙的技巧:我们偶尔会在生成器的裂缝上方添加一些模糊的噪点(即 1 像素线),而不是扩大线条。 这种噪声与 iaa.ElasticTransformation 的组合溶解了裂缝的像素,将它们展开,并且裂缝在不使用膨胀的情况下变得更厚。

轮廓纹理

7、上色

继续增强线条纹理,我们将为它们注入随机的深色阴影,并撒上一点杂色。 这个调整确保我们的裂缝不仅仅是平坦的。 这种变化肉眼几乎察觉不到,但对于模型来说可能很重要。 以下是一些值得注意的例子:

上色

在这一步训练模型进一步提升了性能:

8、调整参数随机化

在我们的实验中,不断出现一个问题:我们如何确定噪声水平、线条粗细或模糊强度等参数的最佳值? 我们彻底检查了在每个参数选定范围的最高和最低极端情况下生成的图像。 在审查这些边缘案例时,我们偶尔会允许结果显得有些不切实际,超出了现实的范围。 这种方法有助于开发更具弹性和更有效的模型。

9、为什么假图像有用?

在研究中,特别是在机器人学中,这种技术称为域随机化(domain randomization)。 从本质上讲,域随机化是通过使其训练环境多样化来使模型具有适应性,而不是完善该环境的真实性。 我们的想法不是试图使合成数据完全真实(这是非常具有挑战性的),而是将合成数据的各个方面随机化,尤其是那些很难自然化的数据。 通过将模型暴露在大量不同的场景中,即使它们单独存在并不总是“现实”,模型也能学会更好地概括。

为什么它有效?

让我们面对现实吧,我们的合成数据并不能完全体现我们所追求的真实性。 然而,通过在我们的合成数据集中注入更多的多样性,我们可以训练一个擅长处理许多不同情况的模型。 经过无数随机领域的训练后,现实世界变成了模型的另一种变体。 本质上,它是关于训练模型以期待意外情况!

10、通过风格迁移提高数据多样性

了解多样性在我们的数据集中发挥的关键作用,我们现在正在探索一种令人兴奋的方法:风格迁移。 风格转移是一种将一个图像的风格(称为“风格图像”)转移到另一个图像(称为“内容图像”)的技术。 目标是产生一个保留原始图像内容但具有风格图像艺术风格的新图像。 现在,如果我们将生成的裂纹图像之一并使用背景图片作为“样式图像”,则样式迁移的结果将如下所示:

选择特定的风格迁移模型不是我们主要关心的问题,因为我们的目标不是现实主义。 我们的目标只是在视觉上改变裂纹图像,同时保持相同的分割掩模(或地面实况)。 在我们的测试中,我们使用了 PaddlePaddle 中的任意风格迁移模型 。

我们再次训练模型,发现风格迁移显着提高了性能。

11、增强纹理的多样性

在这项研究开始时,我们的主要目标是分割道路裂缝。 这意味着我们的基础背景纹理主要由深色沥青组成。 为了增强模型的多功能性,我们引入了一系列新背景。 这些材料涵盖多种材料,包括混凝土、墙壁、瓷砖、砖块、大理石等。

这次扩张提出了新的挑战。 随着浅色背景的引入,我们最初设计的深色、轮廓分明的裂缝与它们形成鲜明对比,这一点变得很明显。 例如,白色或明亮表面上的裂缝不应该像深黑线一样突出——它们需要更无缝地融合。 这促使我们通过调整裂缝的自适应亮度来改进我们的方法,确保它们在每种背景下都显得自然。

左:没有自适应亮度,右:自适应亮度

通过这些修改,我们重新训练了模型并进一步提高了性能。

12、有效数据合成的关键考虑因素

总之,这里列出了需要你注意的数据合成的关键方面:

  • 真实性,尤其是细节方面:确保合成数据在模式、变化和复杂性方面与现实世界的数据非常相似。 合成算法在创建细节时通常很粗糙。 这会导致数据中出现一些问题,这些问题对于人眼来说可能并不明显,但对模型至关重要,从而导致过度拟合和泛化不良。
  • 多样性和变化:确保涵盖广泛的场景、条件和变化。 合成数据应包含尽可能多的潜在现实情况,以防止真实数据的过度拟合和不稳定的性能。
  • 不完美和随机化:故意引入噪声、异常、模糊和失真,在极端情况下甚至可能看起来有点不切实际。 合成算法无法表达现实世界的所有复杂性和真实性,它们只能创建现实世界的简化和理想化版本。 因此,引入随机性和不完美性将有助于训练一个强大的模型,该模型可以在部署到现实场景中时处理意外或异常情况。
  • 持续验证:定期根据真实数据验证合成数据。 这有助于揭示数据中可能妨碍模型良好泛化的问题。

13、结束语

经过一系列的实验,我们得到了一个值得注意的结果。 通过逐步完善我们的合成数据生成技术,我们有效地训练了一个模型,该模型的性能与专门针对真实世界数据训练的模型几乎相当。 在本博客系列的下一部分中,我们将介绍另一种使用合成数据进行训练的方法 - 该方法优于我们的参考模型。 这一部分将深入研究称为域适应的技术,进一步丰富我们的实验。


原文链接:用合成数据训练分割模型 - BimAnt

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

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

相关文章

【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例

本文对神经网络各层特征图可视化的过程进行运行示例,方便大家使用,有助于更好的理解深度学习的过程,尤其是每层的结果。 神经网络各层特征图可视化的好处和特点如下: 可视化过程可以了解网络对图像像素的权重分布,可…

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny,当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较,今天重点说一下用PyCharm玩转ESP32,在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…

【HarmonyOS】低代码平台组件拖拽使用技巧之常用基础组件(下)

【关键字】 HarmonyOS、低代码平台、组件拖拽、代码编辑器 1、写在前面 本篇接着上一篇的内容来介绍,继续来看我们的登录页面的下半部分的使用,本篇会介绍按钮组件、单选框组件的拖拽使用,还会介绍代码编辑器的使用,最后会完成登…

【云栖 2023】姜伟华:Hologres Serverless 之路——揭秘弹性计算组

云布道师 本文根据 2023 云栖大会演讲实录整理而成,演讲信息如下: 演讲人:姜伟华 | 阿里云计算平台事业部资深技术专家、阿里云实时数仓 Hologres 研发负责人 演讲主题:Hologres Serverless 之路——揭秘弹性计算组 实时化成为…

PDF文件无密码,如何解密?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。想要解密,我们需要输入正确的密码,但是有时候我们可能会出现忘记密码的情况,或者网上下载P…

怎么做好品牌营销,小红书爆款笔记怎么做?

只要在小红书平台进行传播,能够尽可能多的创造爆款笔记,就是所有品牌方和达人的目标。今天来马文化传媒为大家分享下怎么做好品牌营销,小红书爆款笔记怎么做? 一、判断爆款笔记的三大指标 判断一篇笔记是否是爆款笔记,…

【网络通信】探索TCP通信与UDP通信的奥妙

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:知不足而奋进,望远山而前行 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 一.&#x…

QQ微云在哪里打开?答案在这,记得收藏!

QQ微云是腾讯推出的一项智能云服务,它可以帮助大家储存照片、视频、文档等重要文件,以防数据丢失。用户们可以免费使用QQ微云,并且可以随时随地上传或下载自己的文件。那么,qq微云在哪里打开?今天,就让我们…

Python 装饰器用法详解

目录 一、基本概念 二、语法形式 三、用法示例 1、用于日志记录 2、用于性能测试 3、用于事务处理 4、用于缓存结果 5、用于权限验证 总结 Python装饰器是Python中一种非常有用且强大的工具,它允许我们在不修改原有函数或类的基础上,对它们进行…

SOLIDWORKS实用技巧——工程图模板替换

概述 工程师常在出图时选择最佳模板,在编辑一段时间后,发现需要更改图纸大小,怎样更改图纸大小还不影响现有工作。你是否也有此类问题? 那么,新建工程图时的模板从哪里来?如何轻松替换已有工程图的图纸格…

IDEA-SVN合并分支到主干

IDEA-SVN合并branch分支到主干master 1.选择VCS的 Integrate Project 2.选择分支合并 Source1 是合并后的分支 , 主分支 master Source2 是被合并的分支 , 分支 branch Try merge 可以尝试是否可以能够被合并,并且无冲突 3.合并完成后当前项目会出现需要提交的内容,检查一…

CSS特效014: hover后左右开门的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

汽车级芯片NCV7518MWATXG 可编程六沟道低压侧 MOSFET预驱动器 特点、参数及应用

NCV7518MWATXG 可编程六沟道低压侧 MOSFET 预驱动器属于 FLEXMOS™ 汽车级产品,用于驱动逻辑电平 MOSFET。该产品可通过串行 SPI 和并行输入组合控制。该器件提供 3.3 V/5 V 兼容输入,并且串行输出驱动器可以采用 3.3 V 或 5 V 供电。内部通电重置提供受…

做进销存什么软件好用

进销存软件是企业管理库存、采购和销售等环节的信息化管理系统,对于企业的运营和管理具有重要的意义。在选择进销存软件时,需要考虑以下因素: 功能需求:选择能够满足企业实际需求的进销存软件。例如,系统是否支持商品…

边缘计算系统设计与实践

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 随着物联网、大数据和人工智能等技术的快速发展…

使用低代码可视化开发平台快速搭建应用

目录 一、JNPF可视化平台介绍 二、搭建JNPF可视化平台 【表单设计】 【报表设计】 【流程设计】 【代码生成器】 三、使用JNPF可视化平台 1.前后端分离: 2.多数据源: 3.预置功能: 4.私有化部署: 四、总结 可视化低代码…

【云原生】Spring Cloud Alibaba 之 Gateway 服务网关实战开发

目录 一、什么是网关 ⛅网关的实现原理 二、Gateway 与 Zuul 的区别? 三、Gateway 服务网关 快速入门 ⛄需求 ⏳项目搭建 ✅启动测试 四、Gateway 断言工厂 五、Gateway 过滤器 ⛽过滤器工厂 ♨️全局过滤器 六、源码地址 ⛵小结 一、什么是网关 Spri…

打包项目报错:程序包javax.servlet不存在

背景: WebService项目在没有配置Tomcat的情况下重新打包,由于是直接导入别人写好的项目,没有配置其他环境,所以报错程序包javax.servlet不存在 解决方法: 找到servlet-api.jar包,导入到现有项目的SDK 重…

Java,数据结构与集合源码,数据结构概述

目录 数据结构概念: 数据结构的研究对象: 研究对象一,数据间逻辑关系: 研究对象二,数据的存储结构(或物理结构): 研究对象三:运算结构 数据结构的相关介绍&#xff…

BGP的基础知识

BGP——边界网关协议 IGP——内部网关协议——OSPF、RIP、ISIS EGP——外部网关协议——EGP、BGP 边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4&…