学习模拟简明教程【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 这里最新…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...