99 lines
3.9 KiB
Markdown
99 lines
3.9 KiB
Markdown
# MAGAIL4AutoDrive
|
||
|
||
> 基于多智能体生成对抗模仿学习(MAGAIL)的自动驾驶训练系统 | MetaDrive + Waymo Open Motion Dataset
|
||
|
||
本项目利用 Waymo 真实驾驶数据,通过 MetaDrive 仿真环境构建专家回放系统,提取车辆状态与动作,用于训练多智能体模仿学习算法 (MAGAIL)。
|
||
|
||
## 📁 核心模块
|
||
|
||
* **`Env/expert_replay_env.py`**: 专家回放环境。核心类 `ExpertReplayEnv`,负责读取 Waymo 轨迹,计算逆动力学动作,并过滤非道路/静态车辆。
|
||
* **`Env/inverse_dynamics.py`**: 逆动力学模块。根据车辆位置和航向计算油门、刹车和转向动作。
|
||
* **`scripts/generate_expert_data.py`**: 数据收集脚本。批量运行场景并保存训练数据。
|
||
* **`scripts/visualize_replay.py`**: 可视化脚本。用于观察回放效果和数据质量。
|
||
|
||
***
|
||
|
||
## 🚀 1. 数据收集
|
||
|
||
### 生成专家数据
|
||
使用 `generate_expert_data.py` 脚本从 Waymo 数据集中批量提取 (State, Action) 对。
|
||
|
||
```bash
|
||
# 设置 Python 路径
|
||
export PYTHONPATH=$PYTHONPATH:.:./metadrive
|
||
|
||
# 运行生成脚本
|
||
# --data_dir: Waymo 数据路径 (建议使用 exp_filtered)
|
||
# --output_dir: 结果保存路径
|
||
# --num_scenarios: 要处理的场景数量
|
||
python scripts/generate_expert_data.py \
|
||
--data_dir data/exp_filtered \
|
||
--output_dir data/training_data \
|
||
--num_scenarios 100 \
|
||
--start_index 0
|
||
```
|
||
|
||
**生成的 `.pkl` 文件结构**:
|
||
包含一个列表,每个元素是一条车辆轨迹(Trajectory Dictionary):
|
||
* `obs`: `(T, 45)` - 观测矩阵。包含 Ego 状态 (5维) + 10辆邻居车相对信息 (40维)。
|
||
* `acts`: `(T, 2)` - 动作矩阵。`[Steering, Accel]`,归一化到 `[-1, 1]`。
|
||
* `agent_id`: 车辆 ID。
|
||
* `scenario_id`: 所属场景 ID。
|
||
|
||
**内置过滤器**:
|
||
脚本会自动过滤掉以下无效车辆:
|
||
1. **非道路车辆**:始终在停车场或路外行驶的车辆。
|
||
2. **静态车辆**:全称移动距离小于 5米 且速度从未超过 1m/s 的车辆(作为背景流存在,不收集数据)。
|
||
|
||
---
|
||
|
||
## 🔍 2. 数据可视化与验证
|
||
|
||
### 回放可视化
|
||
使用 `visualize_replay.py` 直观地观察回放效果,确认车辆行为是否自然,以及过滤逻辑是否生效。
|
||
|
||
```bash
|
||
# 运行可视化
|
||
# --horizon: 回放的最大步数 (Waymo 场景通常为 90 或 198 步)
|
||
python scripts/visualize_replay.py \
|
||
--data_dir data/exp_filtered \
|
||
--start_index 0 \
|
||
--num_scenarios 1 \
|
||
--horizon 200
|
||
```
|
||
|
||
**观察要点**:
|
||
* **受控车辆 (Controlled Agents)**:控制台会显示数量(如 `Controlled agents: 2`)。这些是真正产生数据的车辆。
|
||
* **背景车辆**:如果在渲染图中看到其他车(通常是路边停放的),但受控数量很少,说明静态过滤生效了。
|
||
|
||
### 数据分析
|
||
使用 `analyze_expert_data.py` 查看生成数据的统计分布。
|
||
|
||
```bash
|
||
python scripts/analyze_expert_data.py --data_path data/training_data/expert_data_0_100.pkl
|
||
```
|
||
|
||
---
|
||
|
||
## 🧠 3. 模型训练 (Next Steps)
|
||
|
||
有了 `data/training_data/` 下的专家数据后,您可以开始训练 MAGAIL 模型。
|
||
|
||
### 训练流程
|
||
1. **加载数据**:使用 `dataset/expert_dataset.py` 中的 `ExpertDataset` 类加载 `.pkl` 数据。
|
||
2. **初始化 MAGAIL**:
|
||
* **Generator (Policy)**: 接收观测 `(B, 45)`,输出动作 `(B, 2)`。
|
||
* **Discriminator**: 接收状态-动作对 `(s, a)`,判断是专家还是生成器。
|
||
3. **交互采样**:
|
||
* 在 `MultiAgentScenarioEnv`(非回放模式)中运行 Policy。
|
||
* 收集 Policy 生成的轨迹。
|
||
4. **对抗更新**:
|
||
* 利用专家数据和 Policy 数据训练 Discriminator。
|
||
* 利用 Discriminator 的输出作为 Reward (GAIL Reward) 训练 Policy (PPO/TRPO)。
|
||
|
||
### 推荐配置
|
||
* **Observation**: 45维 (Ego + 10 Neighbors)
|
||
* **Action**: 2维 Continuous (Steering, Accel)
|
||
* **Horizon**: 200 steps
|
||
* **Batch Size**: 1024+ (多智能体环境下数据量很大)
|