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

学习模拟简明教程【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

相关文章:

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

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

电子学会C/C++编程等级考试2021年12月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:输出整数部分 输入一个双精度浮点数f, 输出其整数部分。 时间限制:1000 内存限制:65536输入 一个双精度浮点数f(0 < f < 100000000)。输出 一个整数,表示浮点数的整数部分。样例输入 3.8889样例输出 3 答案: //参…...

数字游戏

题目描述 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串 来玩数字游戏&#xff0c;小 P 同学想要知道字符串中究竟有多少个 1。 注意&#xff1a;01 字符串为每一个字符是 0 或者 1 的字符串&#xff0c;如“101”&#xff08;不含双引号&#xff09;为一个长度为 3 …...

k8s pod 处于Terminating的原因分析和解决处理——筑梦之路

之前整理了一下各种资源长时间无法回收&#xff0c;解决处理的命令行 k8s 各种资源Terminationg状态处理 —— 筑梦之路_k8s自定义资源修改状态-CSDN博客 这里具体整理下pod长时间处于Terminating状态的相关知识&#xff0c;主要是对前面的补充和完善&#xff0c;作为笔记记录…...

西南科技大学814考研二

C语言数据结构与算法 线性表 顺序表(静态分配内存) #include <stdio.h> #include <stdbool.h> //静态顺序表 #define MAX_SIZE 8 //顺序表储存的数据类型 typedef int ElemType; typedef struct {ElemType data[MAX_SIZE];int length; }SeqList; //初始化顺序表…...

oracle21c报错 【ORA-65096: 公用用户名或角色名无效】

1.数据库版本 oracle21c 2.问题提示 创建用户提示【ORA-65096: 公用用户名或角色名无效】 create user 自定义用户名 identified by 密码;--例:用户为test1&#xff0c;密码为123456 create user test1 identified by 123456;三.解决办法及结果 oracle11g之后的版本&#xff…...

C++ 递增/递减运算符重载

作用&#xff1a; 通过重载递增运算符&#xff0c;实现自己的整型数据 总结&#xff1a; 前置递增返回引用&#xff0c;后置递增返回值 递增 #include<iostream> using namespace std;class MyInteger { private:int m_Num 0; public:friend ostream& operator<…...

Android 13.0 无源码app增加授予相关权限

1.概述 在13.0的系统rom产品定制化开发中,对于一些无源码app增加一些权限,比如悬浮窗权限,由于app内部没申请这个权限, 所以需要系统适配默认授予这个权限,就需要在PMS解析安装app的时候 授予悬浮窗权限就可以了 2.无源码app增加授予相关权限的核心类 frameworks/base/cor…...

CI/CD相关概念学习

文章目录 CI/CD相关概念学习前言CI/CD相关概念介绍集成地狱持续集成持续交付持续部署Devops CI/CD相关应用介绍JenkinsTekton PipelinesSpinnakerTravis CIGoCD CI/CD相关概念学习 前言 本文主要是介绍一些 CI/CD 相关的概念&#xff0c;通过阅读本文你将快速了解 CI/CD 是什么…...

一、认识STM32

目录 一、初识STM32 1.1 STM32的命名规则介绍 1.2 STM32F103ZET6资源配置介绍 二、如何识别芯片管脚 2.1 如何寻找 IO 的功能说明 三、构成最小系统的要素 一、初识STM32 1.1 STM32的命名规则介绍 以 STM32F103ZET6 来讲解下 STM32 的命名方法&#xff1a; &…...

vue-router的编程式导航有哪些方法?

Vue Router 提供了几种编程式导航的方法&#xff0c;主要包括以下几种&#xff1a; router.push(location, onComplete?, onAbort?)&#xff1a;跳转到新的 URL&#xff0c;类似于 <router-link> 的 to 属性。可以指定路径或者命名的路由。 router.replace(location, …...

连接服务器上mysql数据库

1. 首先在服务器的安全组上设置开放3306端口&#xff08;默认是这个&#xff0c;有自定义可以酌情更改&#xff09; 2. 更改服务器上的数据库配置文件vi /etc/mysql/my.cnf 增加下面bind- address配置 [mysqld] bind-address0.0.0.0 3. 授予本地IP地址的主机连接权限 - 创建…...

IDEA 中设置 File Header 以及自定义类、方法注释模板的方法

目录 1 设置 File Header2 自定义类、方法注释生成类注解模板生成方法注解模板 1 设置 File Header File -> Settings -> File and Code Templates -> Includes -> File Header -> 编辑 2 自定义类、方法注释 File -> Settings -> Live Templates -&g…...

【数据结构】图的存储结构及实现(邻接表和十字链表)

一.邻接矩阵的空间复杂度 假设图G有n个顶点e条边&#xff0c;则存储该图需要O&#xff08;n^2) 不适用稀疏图的存储 二.邻接表 1.邻接表的存储思想&#xff1a; 对于图的每个顶点vi&#xff0c;将所有邻接于vi的顶点链成一个单链表&#xff0c;称为顶点vi的边表&#xff08…...

ROS Turtlebot3多机器人编队导航仿真

文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言 前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真&#xff0c;接下来考虑多机器人编队在编队行进过程中的避障问题&…...

端口配置错误,导致RabbitMq启动报错

SpringBoot启动&#xff0c;报错如下&#xff1a; 2023-11-19 01:33:43.030 UID[] [] [AMQP Connection 116.xxx.xx.xxx:15672] ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occured java.net.SocketException: Sock…...

<MySQL> 什么是JDBC?如何使用JDBC进行编程?

目录 一、JDBC是什么&#xff1f; 二、JDBC常用接口和类 2.1 DataSource 2.2 Connection 2.3 Statement 2.4 ResultSet 三、JDBC的使用 3.1 获得数据库驱动包 3.2 添加到项目依赖 3.3 描述数据库服务器 3.4 建立数据库连接 3.6 执行SQL语句和接收返回数据 3.7 释放…...

基于安卓android微信小程序的装修家装小程序

项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑&#xff0c;确定所要实现的功能后进行界面的设计&#xff0c;在这中间还要考虑如何可以更好的将功能及页面进行很好的结合&#xff0c;方便用户可以很容易明了的找到自己所需要的信息&#xff0c;还有系…...

基于SSM的小区物业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

c语言免杀火绒

文章目录 前记c加载器补充知识 前记 pyinstaller pyinstaller目前已经被杀疯了&#xff0c;简单打包一个hello a"hello" print(a)#pyinstaller -F -w b.py -n HipsMain.exe考虑Nuitka pip uninstall nuitka pip install nuitka pip install nuitka1.8.5 这里最新…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...