# imitation_demo **Repository Path**: hy17003/imitation ## Basic Information - **Project Name**: imitation_demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-09 - **Last Updated**: 2025-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 模仿学习Demo - Car Racing环境 这是一个基于Car Racing环境的完整模仿学习演示项目,实现了专家数据收集、行为克隆(Behavior Cloning)和DAgger算法。 ## 项目概述 本项目展示了模仿学习在自动驾驶场景中的应用,通过收集专家驾驶数据,训练神经网络模型来学习驾驶策略。项目包含以下主要组件: - **专家数据收集器**:手动控制Car Racing环境收集专家数据 - **行为克隆算法**:基于专家数据训练端到端的策略网络 - **DAgger算法**:通过迭代式数据收集和训练提升模型性能 - **在线DAgger**:专家实时纠正智能体行为的真正DAgger实现 - **模型测试器**:可视化测试训练好的模型性能 ## 环境要求 ### 系统要求 - Python 3.8+ - CUDA 11.0+ (可选,用于GPU加速) - Linux/Windows/macOS ### 依赖包 ```bash gymnasium[box2d]==0.29.1 torch>=2.0.0 torchvision>=0.15.0 numpy>=1.21.0 matplotlib>=3.5.0 opencv-python>=4.5.0 pygame>=2.1.0 tqdm>=4.64.0 scikit-learn>=1.1.0 tensorboard>=2.10.0 ``` ## 快速开始 ### 1. 环境设置 ```bash # 激活conda环境 conda activate pytorch # 安装依赖 pip install -r requirements.txt ``` ### 2. 收集专家数据 ```bash python main.py collect --episodes 10 --data_dir data/expert ``` ### 3. 训练行为克隆模型 ```bash python main.py train-bc --data_dir data/expert --epochs 50 --batch_size 32 ``` ### 4. 训练DAgger模型(离线版本) ```bash python main.py train-dagger --expert_data_dir data/expert --iterations 5 --use_bc_init ``` ### 5. 运行在线DAgger(真正的DAgger) ```bash python online_dagger.py --episodes 10 --data_dir models/online_dagger ``` ### 6. 测试模型 ```bash python main.py test --model_path models/bc/best.pth --episodes 5 ``` ## 项目结构 ``` imitation_demo/ ├── src/ # 源代码目录 │ ├── data_collection/ # 数据收集模块 │ │ └── expert_data_collector.py │ ├── models/ # 模型定义 │ │ └── policy_network.py │ ├── training/ # 训练模块 │ │ ├── behavior_cloning.py │ │ └── dagger.py │ ├── testing/ # 测试模块 │ │ └── model_tester.py │ └── utils/ # 工具模块 │ └── data_loader.py ├── data/ # 数据目录 │ ├── expert/ # 专家数据 │ └── agent/ # 智能体数据 ├── models/ # 模型文件目录 │ ├── bc/ # 行为克隆模型 │ ├── dagger/ # DAgger模型 │ └── online_dagger/ # 在线DAgger模型 ├── docs/ # 文档 │ ├── README.md │ └── DAGGER_EXPLANATION.md ├── logs/ # 日志文件 ├── main.py # 主程序入口 ├── online_dagger.py # 在线DAgger实现 ├── interactive_dagger.py # 交互式DAgger收集器 ├── config.json # 配置文件 ├── requirements.txt # 依赖列表 ├── setup.py # 安装脚本 ├── QUICKSTART.md # 快速开始指南 ├── PROJECT_SUMMARY.md # 项目总结 └── DAGGER_USAGE.md # DAgger使用说明 ``` ## 使用指南 ### 1. 收集专家数据 首先需要手动控制Car Racing环境收集专家数据: ```bash python main.py collect --episodes 10 --data_dir data/expert ``` **控制说明:** - `A` 或 `←`:左转 - `D` 或 `→`:右转 - `W` 或 `↑`:加速 - `S` 或 `↓`:刹车 - `ESC`:退出 **特点:** - 自动录制,无需手动控制 - 3帧叠加提供运动信息 - 96x96分辨率 - 时间戳命名文件 ### 2. 训练行为克隆模型 使用收集的专家数据训练行为克隆模型: ```bash python main.py train-bc --data_dir data/expert --epochs 50 --batch_size 32 ``` **参数说明:** - `--data_dir`:专家数据目录 - `--epochs`:训练轮数 - `--batch_size`:批次大小 - `--learning_rate`:学习率 - `--hidden_dim`:隐藏层维度 ### 3. 训练DAgger模型(离线版本) 使用DAgger算法训练模型: ```bash python main.py train-dagger --expert_data_dir data/expert --iterations 5 --use_bc_init ``` **特点:** - 从BC模型开始训练 - 智能体自动收集数据 - 混合专家和智能体数据 - 迭代式改进 ### 4. 运行在线DAgger(真正的DAgger) 专家实时纠正智能体行为: ```bash python online_dagger.py --episodes 10 --data_dir models/online_dagger ``` **特点:** - 智能体自动控制 - 按SPACE键接管控制 - 实时学习专家纠正 - 真正的DAgger算法 **控制说明:** - `SPACE`:专家接管控制 - `A/D`:转向 - `W`:加速 - `S`:刹车 - `ESC`:退出 ### 5. 测试模型 测试训练好的模型: ```bash python main.py test --model_path models/bc/best.pth --episodes 5 ``` **参数说明:** - `--model_path`:模型文件路径 - `--episodes`:测试轮次数 - `--deterministic`:使用确定性策略 - `--record`:记录测试数据 ## 算法详解 ### 1. 行为克隆(Behavior Cloning) 行为克隆是最简单的模仿学习方法,直接使用监督学习训练策略网络。 **算法流程:** 1. 收集专家数据:$(s_i, a_i)$ 2. 训练策略网络:$\pi_\theta(s) \approx a$ 3. 使用MSE损失:$L = \frac{1}{N}\sum_{i=1}^N ||\pi_\theta(s_i) - a_i||^2$ **优点:** - 实现简单 - 训练效率高 - 不需要环境交互 **缺点:** - 分布偏移问题 - 专家数据质量要求高 - 泛化能力有限 ### 2. DAgger算法 DAgger通过迭代式数据收集解决分布偏移问题。 #### 离线DAgger(当前实现) **算法流程:** 1. 初始化:$\pi_0 = \text{BC}(\mathcal{D}_0)$ 2. 迭代训练: - 使用当前策略收集数据:$\mathcal{D}_i = \{(s, \pi_i(s))\}$ - 专家离线标注:$\mathcal{D}_i' = \{(s, a^*)\}$ - 训练新策略:$\pi_{i+1} = \text{BC}(\mathcal{D}_0 \cup \mathcal{D}_1' \cup ... \cup \mathcal{D}_i')$ #### 在线DAgger(真正的DAgger) **算法流程:** 1. 初始化:$\pi_0$(随机或从BC开始) 2. 在线交互: - 智能体在环境中运行:$s_t \sim \pi_i$ - 专家实时观察并纠正:$a_t^* = \text{Expert}(s_t)$ - 立即更新策略:$\pi_{i+1} = \text{Update}(\pi_i, (s_t, a_t^*))$ **优点:** - 解决分布偏移问题 - 性能通常优于行为克隆 - 在线版本最小化分布偏移 **缺点:** - 需要专家在线标注 - 计算成本高 - 实现复杂 ### 3. 网络架构 **策略网络结构:** - 输入:3×96×96灰度图像(3帧叠加) - 卷积层:4层CNN特征提取 - 全连接层:2层MLP - 输出:3维动作向量(转向、油门、刹车) - 动作约束:tanh激活函数限制动作范围到[-1,1] **损失函数:** - MSE损失:$L = ||\pi_\theta(s) - a||^2$ - 动作归一化:训练时归一化,测试时反归一化 ## 性能评估 ### 评估指标 1. **奖励指标:** - 平均奖励 - 奖励标准差 - 最大/最小奖励 2. **长度指标:** - 平均轮次长度 - 长度标准差 3. **动作指标:** - 动作分布统计 - 动作平滑度 ### 可视化分析 模型测试器提供以下可视化: - 奖励分布直方图 - 轮次长度分布 - 性能趋势图 - 与专家数据对比 ## 配置说明 项目使用`config.json`进行配置管理,包含以下配置项: ```json { "data_collection": { "env_name": "CarRacing-v2", "max_episodes": 10, "image_size": [84, 84] }, "behavior_cloning": { "batch_size": 32, "learning_rate": 1e-4, "num_epochs": 100 }, "dagger": { "num_iterations": 10, "episodes_per_iteration": 5 } } ``` ## 常见问题 ### Q1: 如何提高模型性能? - 收集更多高质量的专家数据 - 调整网络架构(增加层数、调整隐藏层维度) - 使用数据增强技术 - 尝试不同的损失函数 ### Q2: 训练过程中出现内存不足怎么办? - 减小批次大小 - 降低图像分辨率 - 使用梯度累积 - 启用混合精度训练 ### Q3: 模型在测试时表现不佳? - 检查数据预处理是否一致 - 确保使用确定性策略 - 调整动作归一化参数 - 增加训练数据多样性 ### Q4: 如何调试训练过程? - 使用TensorBoard查看训练曲线 - 检查数据加载是否正确 - 验证损失函数计算 - 监控梯度范数 ## 扩展功能 ### 1. 数据增强 - 随机裁剪 - 颜色抖动 - 噪声添加 - 时间序列增强 ### 2. 模型改进 - 注意力机制 - 残差连接 - 批归一化 - 正则化技术 ### 3. 算法扩展 - 逆强化学习 - 生成对抗模仿学习 - 多任务学习 - 元学习 ## 参考文献 1. Ross, S., et al. "A reduction of imitation learning and structured prediction to no-regret online learning." AISTATS 2011. 2. Ho, J., & Ermon, S. "Generative adversarial imitation learning." NIPS 2016. 3. Pomerleau, D. A. "ALVINN: An autonomous land vehicle in a neural network." NIPS 1989. ## 许可证 本项目采用MIT许可证,详见LICENSE文件。 ## 贡献指南 欢迎提交Issue和Pull Request来改进项目。请确保: 1. 代码符合PEP8规范 2. 添加适当的测试 3. 更新相关文档 4. 通过所有测试用例 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交GitHub Issue - 发送邮件至:[your-email@example.com] --- **注意:** 本项目仅用于学习和研究目的,请勿用于商业用途。