学习模拟简明教程【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 字符串 来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。 注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一个长度为 3 …...
k8s pod 处于Terminating的原因分析和解决处理——筑梦之路
之前整理了一下各种资源长时间无法回收,解决处理的命令行 k8s 各种资源Terminationg状态处理 —— 筑梦之路_k8s自定义资源修改状态-CSDN博客 这里具体整理下pod长时间处于Terminating状态的相关知识,主要是对前面的补充和完善,作为笔记记录…...

西南科技大学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,密码为123456 create user test1 identified by 123456;三.解决办法及结果 oracle11g之后的版本ÿ…...
C++ 递增/递减运算符重载
作用: 通过重载递增运算符,实现自己的整型数据 总结: 前置递增返回引用,后置递增返回值 递增 #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 相关的概念,通过阅读本文你将快速了解 CI/CD 是什么…...

一、认识STM32
目录 一、初识STM32 1.1 STM32的命名规则介绍 1.2 STM32F103ZET6资源配置介绍 二、如何识别芯片管脚 2.1 如何寻找 IO 的功能说明 三、构成最小系统的要素 一、初识STM32 1.1 STM32的命名规则介绍 以 STM32F103ZET6 来讲解下 STM32 的命名方法: &…...
vue-router的编程式导航有哪些方法?
Vue Router 提供了几种编程式导航的方法,主要包括以下几种: router.push(location, onComplete?, onAbort?):跳转到新的 URL,类似于 <router-link> 的 to 属性。可以指定路径或者命名的路由。 router.replace(location, …...
连接服务器上mysql数据库
1. 首先在服务器的安全组上设置开放3306端口(默认是这个,有自定义可以酌情更改) 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条边,则存储该图需要O(n^2) 不适用稀疏图的存储 二.邻接表 1.邻接表的存储思想: 对于图的每个顶点vi,将所有邻接于vi的顶点链成一个单链表,称为顶点vi的边表(…...

ROS Turtlebot3多机器人编队导航仿真
文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言 前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真,接下来考虑多机器人编队在编队行进过程中的避障问题&…...
端口配置错误,导致RabbitMq启动报错
SpringBoot启动,报错如下: 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是什么? 二、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微信小程序的装修家装小程序
项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系…...

基于SSM的小区物业管理系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

c语言免杀火绒
文章目录 前记c加载器补充知识 前记 pyinstaller pyinstaller目前已经被杀疯了,简单打包一个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 这里最新…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
【Pandas】pandas DataFrame dropna
Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一个有效观测值”)…...

统计按位或能得到最大值的子集数目
我们先来看题目描述: 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,…...
git删除本地分支和远程分支
删除本地分支 git branch -d 分支名删除远程分支 git push origin --delete 分支名...
C++.OpenGL (9/64)摄像机(Camera)
颜色(Color) 颜色理论在OpenGL中的应用 #mermaid-svg-dKNDfS4EKDUmG4Ts {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-icon{fill:#552222;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-text…...