UniSim

UniSim是多伦多大学、麻省理工和WaabiAI开发的全新自动驾驶仿真系统,利用NeRF技术实现高真实感的相机和雷达数据渲染,首次在大规模真实数据上实现闭环测试。该平台可生成罕见危险场景,测试自动驾驶的感知、预测和规划能力,有助于减少真实世界与仿真的差距,促进安全关键场景的测试和模型训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近来自多伦多大学,麻省理工大学和 Waabi AI 的研究者们在一篇 CVPR 2023 论文中提出了一种全新的自动驾驶仿真平台,直接利用神经辐射场(NeRF)渲染自动驾驶场景中的相机和雷达数据,首次在大规模真实数据上实现了高逼真度的全方位仿真,从而实现无人车的端到端的闭环测试,包括感知,预测和规划。

为什么需要自动驾驶传感器仿真?

近些年来,随着自动驾驶技术的突飞猛进,无人车能够在大部分常规情景下有很好的表现。但是目前的技术仍难保证安全的部署,究其原因是在真实世界存在着很多安全关键(safety-critical)的场景而这些边界又是至关重要的。仿真测试变成了一种行之有效的手段,它能帮助研究者们能够以低成本的方式来生成大量的边界场景,从而全方位的测试和训练已有自动驾驶模型。由于无人车通过装配各种传感器来感知真实世界,真实的可拓展的传感器仿真变成为整个仿真系统重要的一环。

在 CVPR2023 的一篇 Highlight 工作,来自来自多伦多大学,麻省理工大学和 Waabi AI 的研究者展示了一个基于神经网络的相机 / 雷达仿真系统。

  • 项目主页:https://waabi.ai/unisim/

  • 论文地址:https://waabi.ai/wp-content/uploads/2023/05/UniSim-paper.pdf

不同于以往工作,UniSim 首次同时做到了:

1. 高度逼真 (high realism): 可以准确地模拟真实世界 (图片和 LiDAR), 减小真实世界和仿真的鸿沟

2. 闭环测试 (closed-loop simulation): 可以生成罕见的危险场景,测试无人车,并允许无人车和环境自由交互

3. 可扩展 (scalable): 可以很容易的扩展到更多的场景,只需要采集一次数据,就能重建并仿真测试

仿真系统的搭建

UniSim 首先从采集的数据中,在数字世界中重建自动驾驶场景,包括汽车、行人、道路、建筑和交通标志。然后,利用重建的场景进行仿真,生成一些罕见的关键场景。

UniSim 主要基于最近几年流行的 NeRF(神经辐射场)方法。

首先,UniSim 将场景分为三部分:静态背景(如建筑、道路和交通标志)、动态物体(如行人和汽车)和区域外物体(如天空和非常远的道路)。作者们用了多个 NeRF 来分别建模静态背景和每一个动态物体。更具体来说,作者们选择使用 Instant-NGP+SDF (signed distance function) 的表示方式。

针对自动驾驶场景的挑战(数据稀疏、场景复杂),UniSim 做了一些改进:

1. 因为动态物体往往只有某些角度可见,作者们使用一个网络 (Hypernet) 生成每一个物体的特征 (hash grid). 这样可以共享形状信息,从而生成更完整的汽车形状。

2. 渲染 (volume rendering) 得到一个低分辨率的 feature map, 然后用 CNN 上采样生成高清图片。这不仅降低了渲染时间(因为特征图分辨率较低),而且改善了生成图片质量(因为 CNN 可以通过周围像素信息进行推理)。

仿真能力展示

重放 (self-replay)

UniSim 可以准确的重建原始数据 (replay). 因为使用了 SDF (signed distance function),  UniSim 还能够重建各种几何信息,比如 normal/depth。

UniSim - 重建结果

动态物体行为控制 (dynamic-actor manipulation)

UniSim 可以将车辆从场景中删除,控制他们不同的行为,或者将其他场景中的车辆插入到当前场景中,以生成一些 safety-critical 的罕见场景。

UniSim - 动态物体移除 

动态物体控制

自由视角渲染 (novel view synthesis)

自动驾驶汽车可以生成不同与原始视角的数据,比如向左变道,改变相机 / LiDAR 的位置。

UniSim - SDV 视角控制

闭环仿真 (closed-loop simulation)

结合以上的能力,UniSim 可以进行闭环的仿真测试。

首先,通过控制汽车的行为,UniSim 可以创建一个危险的罕见场景,比如有一辆汽车在当前车道突然迎面驶来。

然后,UniSim 仿真生成对应的数据。

接着,运行自动驾驶系统,输出路径规划的结果。

根据路径规划的结果,无人车移动到下一个指定位置,并更新场景 (无人车和其他车辆的位置)。

然后继续进行仿真,运行自动驾驶系统,更新虚拟世界状态 ……

通过这种闭环测试,自动驾驶系统和仿真环境可以进行交互,创造出与原始数据完全不一样的场景。

闭环测试:逆行车辆

闭环测试:车辆变道加塞

激光雷达仿真

高速 1 英里不间断仿真

自动驾驶指标

验证仿真系统的准确度 (realism),只是视觉上逼真还不够,还需要从自动驾驶系统的角度进行验证。

检测(Detection)模型

第一个表格,Real2Sim 指的是用真实数据训练的模型,在仿真系统进行测试,Sim2Real 指的是用仿真系统训练的模型在真实数据中进行测试. Lane Shift 指的 UniSim 生成的 SDV 角度偏离原来的轨迹新场景。可以看到,用仿真数据训练的模型,效果非常接近真实数据。用真实数据训练的模型,在仿真数据上的性能也非常接近真实数据。

检测模型在真实数据和仿真数据中进行训练 / 测试的结果对比

UniSim 还可以作为数据增强,提高模型的性能。这里的 Sim 指的是用仿真数据进行训练,包括 replay 和 lane-shift, 由于可以生成更多的场景 (variations), 所以甚至只在仿真数据上进行训练的效果,也能达到用真实数据训练的结果。

用仿真系统生成的数据,可以作为数据增强,提高模型的性能 whaosoft aiot http://143ai.com   

仿真和真实世界的鸿沟(Domain gap)

什么样的仿真系统和真实世界的鸿沟(domain gap)最小?自动驾驶模型在仿真系统中表现得越好(达到更好的检测结果),是否意味着该仿真系统越逼真呢?并非如此。更合理的解释是:当自动驾驶系统在仿真系统中的表现接近它在真实世界的表现时,这个仿真系统才更接近真实世界,而不是自动驾驶系统的指标越高就越好。举个例子,在真实世界的某个场景中,如果自动驾驶系统崩溃了(例如,检测失败),仿真系统在模拟这个场景时,如果自动驾驶系统能够顺利检测到物体并成功通过,作者们认为这个仿真系统并不完全可靠。在下面的表格中,作者们将模型在真实世界的结果作为标签,模型在仿真平台上的结果作为预测,计算一致性指标。他们验证了自动驾驶系统在仿真平台和真实世界之间的表现差距。具体设定和指标定义,请参考论文。

真实世界和仿真的鸿沟

总结和展望

UniSim 是一个统一的传感器仿真平台,它可以处理大规模动态驾驶场景,统一了移动物体和静止背景表示,统一了相机和激光雷达和仿真,统一了动态场景控制和自由视角渲染。

它是首个可以达到如此逼真度的闭环仿真平台。在 UniSim 中,无人车和环境可以自由交互,并且仿真结果非常接近真实世界。这允许其可以测试罕见的关键场景,从而推动自动驾驶的研发。

### Unisim 库简介 Unisim 是一个用于离散事件仿真的 Python 库,它提供了丰富的功能来构建复杂的仿真模型。该库支持多种概率分布以及灵活的实体建模方式[^1]。 以下是关于如何安装和使用 Unisim 的详细介绍: --- ### 安装方法 可以通过 `pip` 工具轻松安装 Unisim 库。运行以下命令即可完成安装: ```bash pip install unisim ``` 如果需要最新版本或者开发版,则可以从 GitHub 上克隆仓库并手动安装: ```bash git clone https://github.com/unisim-project/unisim.git cd unisim pip install . ``` 上述操作会将本地代码打包成可使用的 Python 软件包[^2]。 --- ### 基本使用方法 #### 创建简单的仿真环境 下面是一个基本的例子,展示如何创建一个顾客到达系统的仿真过程: ```python from unisim import Simulation, Entity, Process class Customer(Entity): def __init__(self, name, arrival_time): super().__init__(name) self.arrival_time = arrival_time def customer_arrival(simulation, mean_rate=30): # 平均每小时到达人数 time_between_arrivals = simulation.random.exponential(1 / (mean_rate / 60)) # 将单位转换为分钟 while True: yield simulation.timeout(time_between_arrivals) customer = Customer(f"Customer_{simulation.now}", simulation.now) print(f"{customer.name} arrives at {customer.arrival_time:.2f}") time_between_arrivals = simulation.random.exponential(1 / (mean_rate / 60)) sim = Simulation() process = sim.process(customer_arrival(sim)) sim.run(until=60 * 60) # 运行一小时 ``` 此脚本定义了一个客户类,并利用泊松分布模拟客户的随机到达时间[^3]。 --- ### 高级特性 除了基础的功能外,Unisim 支持更高级别的配置选项,比如资源管理、优先队列处理等。这些工具可以帮助开发者实现更加复杂的真实世界场景仿真。 例如,在 CARLA 场景下结合 LumaAI 插件进行交通流分析时,可以引入类似的排队理论概念来优化车辆行为逻辑。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值