https://space.bilibili.com/447278957/lists
场景含行人(车头前视画面里会出现);标签是人开的转向和油门,不要求躲人
同时写入车速(km/h),给后续 (单帧图像, 指令, 速度) → (转向, 油门) 用
~/.pyenv/versions/3.11.13/bin/python3 main.py --collect --map grid
同样有行人走动,但规则只沿路到旗子,不躲人、撞了也照常(可用 --dodge 采绕行)
--episodes 为每张地图成功 episode 数;可用单图或 train_maps / test_maps / all
每局在图上多条可达终点的简单路径中随机选一条(不固定最短路);--seed 可复现
默认会短暂扰动方向盘(标签仍是专家纠偏),采集偏离中线后的回正
扰动太密容易把「猛打回正」学进模型,闭环会左右摆;--no-disturb 关掉(等价 --disturb-prob 0)
可混采:同一 --output 先无噪声再有噪声,训练会一起用
--dodge:前方走廊有人时规则打方向绕开(不刹车);横穿从行人后方绕,不插到行进方向前面;标签是绕行转向;撞人的局丢掉
混入绕行数据后再训 BC,RL 从「已会一点绕」的 μ 附近采样,才容易采到成功轨迹
油门标签是专家过弯限速,不叠噪声;须重新采集(旧 npz 没有 throttle/speed)
压到一点草地(车角擦出路缘)仍保留;冲进草地太深或累计压草过久则丢弃重采
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --no-disturb --episodes 2 --map train_maps
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --episodes 3 --map train_maps
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --no-disturb --dodge --episodes 3 --map train_maps
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --episodes 3 --map zigzag
(离屏车头前视,不弹 3D 窗口;标签/扰动/落盘与上面相同,可叠加 --no-disturb / --dodge)
策略观测是挡风玻璃高度前视,不是跟随相机;旧跟随相机 npz 不能接着训,请重新采集
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --no-disturb --episodes 2 --map train_maps
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --dodge --episodes 3 --map all
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --no-disturb --dodge --episodes 5 --map all
--workers N:每张地图一个子进程离屏采集,最多 N 个同时跑(--workers 0 = CPU 核数);只支持 --headless
文件按地图命名 episode_<map>_XXXX.npz,互不撞名;全部结束后由父进程统一写 manifest.json,训练照常 --data 指向该目录
worker 比地图多时(如单图 --workers 4),每张图的 episodes 再切成分片 episode_<map>_sK_XXXX.npz,分片种子不同
终端只回显各 worker 的 map / saved / discarded 进度(前缀 [map]),规划、切点、绕行日志在 <output>/logs/collect_<map>.log;--worker-verbose 全部回显
--map 也接受逗号列表:--map l_bend,hook,test_maps
同一 --output 追加采集时编号自动续接;但 --seed 不变会采出同样的路线/扰动,追加请换 --seed
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --no-disturb --episodes 3 --map train_maps --workers 8
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --dodge --episodes 5 --map all --workers 5
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.collect --headless --episodes 8 --map serpentine --workers 4 --seed 7
共享 CNN,按 straight/left/right/stop 分头;(单帧图像, 导航指令, 车速) → 所选头的 (转向, 油门)
行人只出现在画面里;旧分头最后一层的行人列加载时丢掉
旧跟随相机数据 / 旧单头拼接 checkpoint 都不能用,请按新镜头重新采集再训练
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.train \
--data data/driving \
--epochs 30 \
--batch-size 256 \
--lr 1e-4 \
--checkpoint checkpoints/pilotnet.pt
之后按 T 开启自动驾驶(导航指令仍由规则规划器提供,转向和油门由模型预测)
油门由模型直接执行,不再因前方行人强制降速;泛化评测请换测试地图
~/.pyenv/versions/3.11.13/bin/python3 main.py --checkpoint checkpoints/pilotnet.pt --map crossroads
(与 PPO 同一套环境:随机路线、行人、撞人终止;压草只扣分不结束;确定性、不加探索噪声)
先看 BC 基线能不能到终点;--steer expert 是规则转向+油门对照;--no-peds 只测跟路
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.eval_pilot \
--map train_maps \
--checkpoint checkpoints/pilotnet.pt \
--episodes 3
规则对照(环境成功率上限)
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.eval_pilot \
--map train_maps --steer expert --episodes 3
关掉行人,只看跟路
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.eval_pilot \
--map l_bend --checkpoint checkpoints/pilotnet.pt --no-peds --episodes 3
与 PPO 同一套终止(撞人结束;这是 RL 该对照的 BC 基线)
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.eval_pilot \
--map all --checkpoint checkpoints/pilotnet.pt --episodes 3
对齐 main.py:撞人/压草不结束,只看能不能到旗子(可换 --map ring)
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.eval_pilot \
--map all --checkpoint checkpoints/pilotnet.pt --like-main --episodes 3
(单帧图像, 导航指令, 速度) → (转向, 油门)
导航指令仍是规则的 straight/left/right;行人只出现在画面里,不另做特征向量
空路钉完整冻结 BC;靠近行人只对转向从高斯采样(油门用均值,避免刹停),策略梯度可进 CNN/主干
绕开行人/到旗子有正奖励;压草只扣分不结束,撞人仍结束 rollout
无窗口离屏渲染
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.train_pilot_rl \
--map all \
--pilot-checkpoint checkpoints/pilotnet.pt \
--total-steps 1000000 \
--rollout-steps 1024 \
--checkpoint checkpoints/pilot_rl.pt
多进程仿真 + 主进程批量推理,提高 GPU 利用率(--window 时不能并行)
每个环境采 --rollout-steps 步,一次更新样本量 = num_envs × rollout_steps;总步数仍按环境交互累计
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.train_pilot_rl \
--map all \
--pilot-checkpoint checkpoints/pilotnet.pt \
--total-steps 20000000 \
--rollout-steps 1024 \
--num-envs 24 \
--checkpoint checkpoints/pilot_rl.pt
(同一套 PPO;窗口是跟随相机给人看,策略仍吃前视;比离屏慢)
行人在小地图上是橙色点(出生点 28m 内不刷,3D 里一开始常常看不到人)
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.train_pilot_rl \
--map train_maps \
--pilot-checkpoint checkpoints/pilotnet.pt \
--total-steps 200000 \
--rollout-steps 1024 \
--checkpoint checkpoints/pilot_rl.pt \
--window
(按 T;转向和油门由微调网络,导航指令仍是规则)
~/.pyenv/versions/3.11.13/bin/python3 main.py \
--checkpoint checkpoints/pilot_rl_best.pt \
--map crossroads
无窗口评估(离屏车头前视,自动开自动驾驶,不弹 3D 窗口;与 PPO 同一套终止:撞人/超时,压草不结束)
~/.pyenv/versions/3.11.13/bin/python3 main.py \
--checkpoint checkpoints/pilot_rl_best.pt \
--map all \
--headless
~/.pyenv/versions/3.11.13/bin/python3 main.py \
--checkpoint checkpoints/pilot_rl_best.pt \
--map all \
--headless \
--episodes 3
~/.pyenv/versions/3.11.13/bin/python3 main.py
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.sim_expert # 全部地图
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.sim_expert l_bend # 单张地图并打印轨迹
~/.pyenv/versions/3.11.13/bin/python3 -m drive_agent.sim_expert train_maps
共 30 张地图(20 训练 + 10 测试),全部为轴对齐路网,规则专家均可到达旗子(python -m drive_agent.sim_expert all 可复核)
训练地图 (train_maps, 20 张): crossroads / l_bend / zigzag / t_junction / dual_bend / u_turn / l_bend_west / dual_bend_left / hook / serpentine / staircase_west / h_shape / ladder / comb / plus_left / square_loop / offset_junctions / long_straight / spur_west / two_blocks
测试地图 (test_maps, 10 张): ring / grid / chicane / spur / plaza / spiral / pinwheel / maze / l_bend_east / zigzag_west
路上有脚本行人(路口/路段斑马线过街,路边停一下再横穿;偶有未标线路段乱穿);小地图橙色点;撞到会提示
~/.pyenv/versions/3.11.13/bin/python3 main.py --map l_bend
~/.pyenv/versions/3.11.13/bin/python3 main.py --map chicane