c94571ddaaece52f93a2e34255dd308128af4dfd
MAGAIL4AutoDrive
基于多智能体生成对抗模仿学习(MAGAIL)的自动驾驶训练系统 | MetaDrive + Waymo Open Motion Dataset
[
- ✅ 车道过滤和红绿灯检测优化
- ✅ 支持5维简化/107维完整观测空间
- ✅ 专家轨迹数据集(52K+训练样本)
- 🚧 MAGAIL算法实现(判别器+策略网络)
🚀 快速开始
环境安装
# 克隆项目
git clone <repository_url>
cd MAGAIL4AutoDrive
# 安装依赖
pip install metadrive-simulator==0.4.3 torch numpy matplotlib scenarionet
# 创建必需目录
mkdir -p analysis_results
touch scripts/__init__.py dataset/__init__.py Algorithm/__init__.py
数据准备
# 1. 转换Waymo数据
python -m scenarionet.convert_waymo -d ~/mdsn/exp_converted --raw_data_path /path/to/waymo --num_files=150
# 2. 筛选场景(无红绿灯)
python -m scenarionet.filter --database_path ~/mdsn/exp_filtered --from ~/mdsn/exp_converted --no_traffic_light
# 3. 验证数据集
python scripts/check_database_info.py
运行环境
# 测试多智能体环境
python Env/run_multiagent_env.py
# 收集专家数据(10个场景测试)
python dataset/expert_dataset.py
📁 项目结构
MAGAIL4AutoDrive/
├── Env/ # 仿真环境模块
│ ├── scenario_env.py # 多智能体场景环境(含轨迹存储)
│ ├── run_multiagent_env.py# 环境运行脚本
│ └── simple_idm_policy.py # 测试策略
│
├── dataset/ # 数据集模块
│ └── expert_dataset.py # PyTorch Dataset(5维观测)
│
├── scripts/ # 工具脚本
│ ├── check_track_fields.py # 数据字段验证
│ ├── check_database_info.py # 数据库信息检查
│ ├── analyze_expert_data.py # 统计分析
│ └── visualize_expert_trajectory.py # 轨迹可视化
│
├── Algorithm/ # MAGAIL算法(待完善)
│ ├── bert.py # Transformer判别器
│ ├── disc.py # 判别器网络
│ ├── policy.py # 策略网络
│ ├── ppo.py # PPO优化器
│ └── magail.py # MAGAIL训练循环
│
└── analysis_results/ # 分析输出
├── statistics.pkl # 数据统计
└── distributions.png # 可视化图表
🎯 核心功能
1. 环境与数据处理
scenario_env.py - 多智能体场景环境
- 专家轨迹完整存储(位置、速度、航向角、车辆尺寸)
- 车道区域过滤(自动移除非车道车辆)
- 红绿灯状态检测(双重保障机制)
- 107维完整观测空间(激光雷达+车道线)
expert_dataset.py - 专家数据集
- 状态-动作对提取(逆动力学)
- 批量采样和序列化
- 支持PyTorch DataLoader
2. 数据分析工具
| 脚本 | 功能 | 输出 |
|---|---|---|
check_database_info.py |
验证数据库完整性 | 场景总数、映射关系 |
check_track_fields.py |
检查可用字段 | 必需/可选字段列表 |
analyze_expert_data.py |
统计分析 | 轨迹长度、速度、交互频率 |
visualize_expert_trajectory.py |
轨迹可视化 | 动画展示车辆运动 |
3. MAGAIL算法
判别器 (Algorithm/bert.py + disc.py)
- Transformer编码器处理动态车辆数量
- CLS标记或均值池化聚合特征
- 支持集中式/去中心化/零和模式
策略网络 (Algorithm/policy.py + ppo.py)
- Actor-Critic架构
- 参数共享机制(所有车辆共享模型)
- PPO/TRPO优化器
⚙️ 配置说明
# 环境配置
config = {
# 数据路径
"data_directory": "~/mdsn/exp_filtered",
# 多智能体设置
"num_controlled_agents": 3, # 初始车辆数
"max_controlled_vehicles": 10, # 最大车辆数限制
# 车道过滤
"filter_offroad_vehicles": True, # 启用车道过滤
"lane_tolerance": 3.0, # 容差(米)
# 场景加载
"sequential_seed": True, # 顺序加载场景
"horizon": 1000, # 最大步数
}
📊 数据集统计
当前数据规模(基于exp_filtered):
- 场景总数: 12,201
- 已收集场景: 10个测试场景
- 轨迹数: 900条
- 训练样本: 52,065个(s,a)对
- 观测维度: 5维(简化) / 107维(完整)
- 动作维度: 2维(油门/刹车, 转向)
数据质量:
- 静止车辆占比: 54.8%(正常,包含停车场和路边停车)
- 平均轨迹长度: 67帧(6.7秒 @ 10Hz)
- 平均速度: 1.46 m/s
- 近距离交互(<5m): 1.92%
🛠️ 使用示例
收集专家数据
# dataset/expert_dataset.py
from expert_dataset import ExpertTrajectoryDataset
# 收集1000个场景
trajectories = ExpertTrajectoryDataset.collect_from_env(
env_config,
num_scenarios=1000,
save_path="./expert_trajectories.pkl"
)
# 创建数据集
dataset = ExpertTrajectoryDataset(trajectories, sequence_length=1)
环境测试
from scenario_env import MultiAgentScenarioEnv
env = MultiAgentScenarioEnv(
config=config,
agent2policy=your_policy
)
obs = env.reset()
for step in range(1000):
actions = {aid: policy(obs[aid]) for aid in env.controlled_agents}
obs, rewards, dones, infos = env.step(actions)
❓ 常见问题
Q1: KeyError: 'bbox'
原因: Waymo转换数据不含bbox字段
解决: 使用length/width/height,代码已添加条件检查
Q2: ModuleNotFoundError: scenario_env
原因: Python路径问题
解决: 脚本开头添加:
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../Env"))
Q3: 多次reset失败(clear_objects错误)
原因: MetaDrive对象管理bug
解决: 每次收集数据都重新创建环境(已实现)
Q4: 静止车辆占比过高
原因: Waymo真实场景包含停车场等静止车辆
解决: 可在数据收集时过滤平均速度<2m/s的轨迹
📈 开发路线图
✅ 已完成(Phase 1)
- 数据转换与筛选
- 完整轨迹存储
- 数据质量分析
- PyTorch Dataset构建
🚧 进行中(Phase 2)
- 107维完整观测空间
- 数据质量过滤
- 轨迹可视化工具
📅 计划中(Phase 3-4)
- 判别器网络实现
- Actor-Critic策略网络
- MAGAIL训练循环
- TensorBoard监控
- 实验与评估
📚 参考资料
📄 License
MIT License
💡 提示: 项目处于活跃开发中,欢迎提Issue或PR贡献代码!
Description
Languages
Python
100%