学习模拟简明教程【Learning to simulate】

深度神经网络是一项令人惊叹的技术。 有了足够的标记数据,他们可以学习为图像和声音等高维输入生成非常准确的分类器。 近年来,机器学习社区已经能够成功解决诸如对象分类、图像中对象检测和图像分割等问题。

上述声明中的加黑字体警告是有足够的标记数据。 对真实现象和现实世界的模拟有时会有所帮助。 在某些情况下,合成数据可以提高计算机视觉或机器人控制应用中深度学习系统的性能。

模拟可以为我们提供带有免费标签的准确场景。 但我们以侠盗猎车手 V (GTA) 为例。 研究人员利用了在 GTA V 世界中自由漫游时收集的数据集,并一直使用该数据集来引导深度学习系统等。 许多游戏设计师和地图制作者都致力于创造 GTA V 的错综复杂的世界。他们一条条街道精心设计,然后对街道进行精细梳理,添加行人、汽车、物体等。

GTA V(侠盗猎车手 V)中的示例图像

这很贵。 无论是时间还是金钱。 使用随机模拟场景我们可能不会做得更好。 这意味着重要的编辑情况可能会严重采样不足,并且我们的分类器可能无法学习如何正确检测它们。 让我们想象一下我们正在尝试训练一个检测危险场景的分类器。 在现实世界中,我们会遇到如下危险场景的频率很低,但它们却非常重要。 如果我们生成大量随机场景,那么像下面这样的危险场景也很少。 对这些重要情况进行欠采样的数据集可能会产生无法处理这些情况的分类器。

危险交通场景的示例。 当对合成数据进行随机采样时,这些重要情况可能会被欠采样。 我们可以做得更好吗?

学习模拟(Learning to simulate)的想法是,我们可以学习如何最佳地生成场景,以便深度网络可以学习非常好的表示或可以在下游任务中表现良好。

为了测试我们的工作,我们使用虚幻引擎 4 和 Carla 插件创建了一个参数化的程序交通场景模拟器。 我们的模拟器创建了一条具有不同类型交叉口(X、T 或 L)的可变长度道路。 我们可以在道路上布满建筑物,并在道路上布满 5 种不同类型的汽车。 建筑物和汽车的数量由可调参数以及汽车的类型控制。 我们还可以在 4 种不同的天气类型之间更改天气,从而控制照明和降雨效果。 主要思想是学习控制不同任务(例如语义分割或对象检测)的这些场景特征的最佳参数。

我们的程序场景模拟器的演示。 我们改变道路的长度、交叉路口、汽车的数量、汽车的类型和房屋的数量。 所有这些都由一组参数控制。

为了获取传感器数据,我们将一辆汽车放在生成的场景的道路上,它可以从生成的场景中捕获 RGB 图像,这些图像自动具有语义分割标签和深度标注(免费!)。

使用一组固定参数从我们的模拟器生成的场景的内部视图

然而,学习模拟算法比这更普遍。 我们不必专门将它用于交通场景,它可以适用于任何类型的参数化模拟器。 我们的意思是,对于任何将参数作为输入的模拟器,我们提出了一种搜索最佳参数的方法,以便生成的数据对于深度网络学习下游任务来说是最佳的。 据我们所知,我们的工作是首先进行模拟优化,以最大限度地提高主要任务的性能,并将其应用于交通场景。

继续我们算法的关键。 传统的机器学习设置如下,其中数据从分布 P(x,y) 中采样(x 是数据,y 是标签)。 通常,这是通过收集现实世界中的数据并手动标记样本来实现的。 该数据集是固定的,我们用它来训练我们的模型。

传统机器学习

通过使用模拟器训练主任务网络,我们可以从模拟器定义的新分布 Q 生成数据。 该数据集不是固定的,我们可以在计算和时间限制允许的情况下生成尽可能多的数据。 尽管如此,在此域随机化设置中生成的数据是从 Q 中随机采样的。获得良好模型所需的数据可能很大,并且性能可能不是最佳的。 我们可以做得更好吗?

我们引入学习模拟,它优化了我们在主要任务上选择的指标—通过定义与该指标直接相关的奖励函数 R 来训练管道(通常与指标本身相同)。 我们从参数化模拟器 Q(x,y|θ) 中采样数据,用它在算法的每次迭代中训练主要任务模型。 然后,我们定义的奖励 R 用于通知控制参数 θ 的策略的更新。 奖励 R 是通过在验证集上测试训练后的网络获得的。 在我们的例子中,我们使用普通策略梯度来优化我们的策略。

非正式地,我们试图找到最佳参数 θ,它为我们提供了分布 Q(x,y|θ),从而最大化主要任务的准确性(或任何度量)。

学习模拟

学习模拟问题的数学表述是一个双层优化问题。 尝试使用基于梯度的方法解决它会对较低级别的问题造成平滑性和可微性约束。 在这种情况下,模拟器也应该是可微分的,但这通常是不正确的! 这就是为什么像普通策略梯度这样的不需要微分的优化方法是有意义的。

模拟优化问题的双层学习的数学公式

下面展示了我们的实例计数和语义分割方法。

我们探索的汽车计数任务很简单。 我们要求网络计算场景中每种特定类型的汽车数量。 下面是一个示例场景,右侧有正确的标签。

汽车计数任务示例

我们使用学习模拟来解决这个问题,并与仅使用随机模拟所发生的情况进行比较。 在下图中,重点关注红色和灰色曲线,它们显示了学习模拟 (LTS) 如何在 250 个 epoch 后获得更高的奖励(计算的汽车的平均绝对误差更低)。 随机采样情况会短暂改善,但一旦采样的随机批次不足以完成任务,性能就会下降。 灰色曲线在几次迭代中缓慢上升,但学习模拟会收敛到蓝色曲线(我们使用真实模拟参数)所示的最佳精度。

计车任务奖励。 请注意学习模拟如何收敛到蓝色曲线所示的最佳可能奖励(在模拟数据集上)。

这意味着什么? 观察它的一个好方法是可视化场景中不同场景和对象的概率。 我们绘制随时间变化的天气概率。 我们生成的地面实况验证数据集对某些天气(晴朗的中午和晴朗的日落)进行了过采样,并对其余天气进行了欠采样。 这意味着晴朗的正午和晴朗的日落天气的图像比其他类型的天气更多。 我们可以看到我们的算法恢复了粗略的比例!

随时间变化的天气概率 (logits)

让我们对汽车生成概率做同样的事情。 我们的地面实况数据集对某些类型的汽车(银色日产和绿色甲壳虫)进行了过采样。 学习模拟在训练后也反映了这些比例。 本质上,该算法推动模拟器参数来生成与地面实况数据集相似的数据集。

随时间变化的汽车概率(logits)

现在我们展示一个示例,说明学习模拟如何提高 KITTI 流量分段数据集上随机模拟的准确性,该数据集是在现实世界中捕获的数据集。

来自 KITTI 数据集的示例图像。

我们的模拟器上的真实语义分割标签的示例。 在模拟器中,可以免费获得对象标签 - 无需人工标注者

作为我们的基线,我们分别训练主要任务模型 600 次,模拟器使用不同的随机参数集生成数据。 我们监控每个网络的验证 Car IoU 指标,并选择验证奖励最高的一个。 然后我们在看不见的 KITTI 测试集上对其进行测试。 我们训练学习模拟 600 次迭代,并获得 0.579 的 Car IoU(广泛分割指标),远高于使用随机参数基线(随机参数)实现的 0.480。 我们还展示了使用另一种无导数优化技术(随机搜索)的结果,该技术在本实验中没有取得良好的结果(尽管它在汽车计数方面确实效果很好)。 最后,我们还通过在 982 个带标注的真实 KITTI 训练图像(KITTI 训练集)上进行训练来展示用于分割的 ResNet-50 网络的实际性能,以显示上限。

学习模拟可以被视为一种元学习算法,它调整模拟器的参数以生成合成数据,以便基于这些数据训练的机器学习模型分别在验证集和测试集上实现高精度。 我们证明它在实际问题中击败了领域随机化,并相信这是一个非常有前途的研究领域。 看到在不久的将来它的扩展和应用会发生什么将是令人兴奋的,我鼓励每个人研究模拟和学习模拟如何帮助你的应用或研究。


原文链接:学习模拟简明教程 - BimAnt

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

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

相关文章

【高并发内存池】第一篇 项目简介及定长内存池

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

二十三种设计模式全面解析-当你的对象需要知道其他对象的状态变化时,观察者模式是你的救星!

在软件设计的世界中,有一种设计模式以其简洁而强大的特性闪耀着光芒,它就是——观察者模式(Observer Pattern)。这个模式它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,为我们创造…

035、目标检测-物体和数据集

之——物体检测和数据集 目录 之——物体检测和数据集 杂谈 正文 1.目标检测 2.目标检测数据集 3.目标检测和边界框 4.目标检测数据集示例 杂谈 目标检测是计算机视觉中应用最为广泛的,之前所研究的图片分类等都需要基于目标检测完成。 在图像分类任务中&am…

OpenGL_Learn13(材质)

1. 材质 cube.vs #version 330 core layout (location 0) in vec3 aPos; layout (location 0 ) in vec3 aNormal;out vec3 FragPos; out vec3 Normal;uniform mat4 model; uniform mat4 view; uniform mat4 projection;void main() {FragPosvec3(model*vec4(aPos,1.0));Norma…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示:

STM32-基本定时器

一、基本定时器的作用 定时触发输出直接驱动DAC。 二、基本定时器的框图 以STM32F103系列为例,具体开发板请查看开发手册。 类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出基本定时器TIM6 / TIM7APB116位向上1~65536可以0无通用定时…

Yolov5安装运行过程中出现的问题

Yolov5安装运行过程中出现的问题合集 安装问题pip 安装 requirements.txtcmd下如何退出python&#xff1f;升级numpy protobuf版本过高AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from 地址找不到图片NameError: name warnings is not de…

Spring Cloud学习(九)【Elasticsearch 分布式搜索引擎01】

文章目录 初识 elasticsearch了解 ES倒排索引ES 的一些概念安装es、kibana安装elasticsearch部署kibana 分词器安装IK分词器ik分词器-拓展词库 索引库操作mapping 映射属性索引库的 CRUD 文档操作添加文档查看、删除文档修改文档Dynamic Mapping RestClient 操作索引库什么是Re…

后端老项目迁移方法

老项目迁移方法 需求&#xff1a; 因某个模块MySQL表结构、表关系 错乱复杂&#xff0c;而且其他模块的代码也在操作这个模块的数据库 耦合严重 导致Web工程代码紊乱、不易理解、性能低下&#xff0c; 故在 系统由A JavaWeb工程迁移至B工程 时&#xff0c;重构MySQL表结构、表…

计算机毕业设计选题推荐-个人健康微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

2023年【陕西省安全员B证】考试报名及陕西省安全员B证模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年陕西省安全员B证考试报名为正在备考陕西省安全员B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员B证模拟试题祝您顺利通过陕西省安全员B证考试。 1、【多选题】《陕西省建设工程质量和…

【C++】容器string的构造函数和迭代器

目录 1 什么是string 2 迭代器 2.1 迭代器的使用 2.2 auto关键字以及代码可读性 3 构造函数 string - C Reference 1 什么是string 上图是C官网对于string的解释&#xff1a;string是表示字符序列的对象。 string本质是一个类&#xff0c;位于std的命名空间下&#xff0…