Simple-BEV训练参数全清单:OneCycleLR、梯度累积与25000步复现47.6 mIoU

Simple-BEV训练参数全清单:OneCycleLR、梯度累积与25000步复现47.6 mIoU Simple-BEV训练参数全清单OneCycleLR、梯度累积与25000步复现47.6 mIoU【免费下载链接】simple_bevA Simple Baseline for BEV Perception项目地址: https://gitcode.com/gh_mirrors/si/simple_bevSimple-BEV 是一个经典的 BEV鸟瞰图感知基线项目用 6 路相机图像把 3D 场景拉到统一的俯视网格上完成语义分割。本文把 train_nuscenes.py 中的训练参数逐一整理成清单重点拆解 OneCycleLR 学习率调度、梯度累积有效 batch 40等 3 个关键技巧帮助你用 25000 步在 nuScenes 上复现47.6 mIoU。 项目是什么极简但有效的 BEV 感知Simple-BEV 的思路非常直接输入环视 6 路相机图像可选融合 5 帧雷达输出100m × 100m 范围内、200×8×200体素分辨率的 BEV 占用网格损失分割交叉熵 中心点回归 偏移回归三部分用可学习的不确定性权重自动平衡核心代码集中在几个文件文件作用train_nuscenes.py训练主脚本本文主角参数定义见main()函数L245–L286eval_nuscenes.py评估脚本复现 47.6 mIoU 用它nuscenesdataset.py数据加载与增强compile_data()在 L1241nets/segnet.py模型定义编码器 Lift-Splat 投影头saverloader.py检查点保存/加载 复现 47.6 mIoU 的一条命令纯相机模型RGB-only的官方复现命令如下训练结束后在 trainval 上评估应得到47.6 mIoU比论文中的 47.4 略高python train_nuscenes.py \ --exp_namergb_mine \ --max_iters25000 \ --log_freq1000 \ --dsettrainval \ --batch_size8 \ --grad_acc5 \ --use_schedulerTrue \ --data_dir../nuscenes \ --log_dirlogs_nuscenes \ --ckpt_dircheckpoints \ --res_scale2 \ --ncams6 \ --encoder_typeres101 \ --do_rgbcompressTrue \ --device_ids[0,1,2,3] 想先验证环境是否跑通把--dsetmini、--batch_size1、--res_scale1、--device_ids[0]即可仓库自带的 train.sh 就是这种冒烟测试配置。 训练参数全清单以下参数均来自train_nuscenes.py中main()的默认值L245–L286复现值列对应 47.6 mIoU 命令实际使用的取值。1️⃣ 训练与优化参数默认值复现值说明max_iters10000025000总训练步数复现官方模型用 25000 步batch_size88每 GPU 可见的总 batch需能被 GPU 数整除grad_acc55梯度累积步数有效 batch 8×5 40lr3e-43e-4基础学习率官方预训练检查点命名含5e-4说明其训练时用了 5e-4use_schedulerTrueTrue启用 OneCycleLR 调度见下文详解weight_decay1e-71e-7AdamW 权重衰减nworkers1212数据加载线程数shuffleTrueTrue训练集打乱顺序do_valTrueTrue训练中是否做验证val_freq100100每 100 步验证一次save_freq10001000每 1000 步保存一次检查点keep_latest11每个检查点目录只保留最近 N 个版本log_freq10001000TensorBoard 日志频率标量频率为其一半init_dir-从已有检查点继续训练load_step/load_optimizerFalse-是否恢复训练步数 / 优化器状态ignore_loadNone-加载检查点时忽略的模块前缀2️⃣ 数据参数默认值复现值说明data_dir../nuscenes/../nuscenesnuScenes 数据根目录需含full_v1.0/dsettrainvaltrainval数据集版本可用mini快速调试res_scale22图像分辨率缩放224×400 × res_scale即 2 时为448×800ncams66相机数量6 路环视nsweeps35雷达版雷达帧数纯相机模型不用雷达融合版用 5rand_flipTrueTrue随机水平翻转增强rand_crop_and_resizeTrueTrue随机缩放0.8–1.2 倍 中心裁剪do_shuffle_camsTrueTrue每样本随机打乱相机顺序3️⃣ 模型参数默认值复现值说明encoder_typeres101res101图像编码器ResNet-101use_radarFalseFalse是否融合雷达点云use_metaradarFalseFalse雷达版 True是否使用雷达元特征速度、强度等use_radar_filtersFalseFalse雷达滤波use_lidarFalseFalse是否用激光雷达与雷达二选一do_rgbcompressTrueTrue压缩 RGB 特征通道降低显存device_ids[0,1,2,3][0,1,2,3]使用的 GPU 列表DataParallel 多卡⚠️ BEV 网格尺寸200×8×200和感知范围X/Z 方向 ±50m、Y 方向 ±5m是train_nuscenes.py顶部的常量L36–L41不在命令行参数里评估时保持一致即可。 三个关键训练技巧详解技巧一OneCycleLR 学习率调度use_schedulerTrue时优化器和调度器在fetch_optimizer()L47–L54中创建优化器AdamWlr3e-4weight_decay1e-7eps1e-8调度器OneCycleLR总步数为max_iters 100pct_start0.05前 5% 步升温学习率anneal_strategylinear余弦后段线性退火且关闭动量循环cycle_momentumFalse也就是说25000 步训练里只有前 1250 步处于升温期之后学习率单调下降——这是复现稳定收敛的前提。关闭调度器use_schedulerFalse则退化为普通 Adam 恒定学习率仅作对照实验使用。技巧二梯度累积有效 batch 40单个 448×800 的 6 路相机样本显存开销不小。Simple-BEV 用batch_size8×grad_acc5的组合每个 optimizer 步内连做 5 次前向 反向训练循环 L411–L439梯度累加后才更新有效 batch 8 × 5 40脚本启动时会打印effective batch size: 40更新前做clip_grad_norm_(parameters, 5.0)梯度裁剪L442防止累积梯度爆炸检查点目录名也会自动带上这个组合例如8x5_5e-4_rgb12_...8 batch × 5 累积、学习率 5e-4方便区分实验。技巧三三分损失 不确定性加权总损失由三部分构成run_model()L186–L208分割交叉熵BCEWithLogitsLoss正样本权重pos_weight2.13沿用 Lift-Splat 的经验值缓解占用网格正负样本失衡中心点回归正负样本平衡的 MSE 损失偏移回归L1 损失只在正样本上计算三部分各带一个可学习权重ce_weight/center_weight/offset_weight通过不确定性加权公式loss / (2·exp(w)) 0.5·w自动平衡训练中无需手动调损失系数。 日志、验证与检查点TensorBoard训练t与验证v各一个日志目录位于log_dir/model_name/下标量每log_freq/2步记录一次还会保存 BEV 分割结果的可视化 GIF方便肉眼观察收敛终端输出每步打印当前步数、读数据耗时、单步耗时、损失以及训练/验证两套池化 mIoU检查点每save_freq1000步保存到ckpt_dir/model_name/keep_latest1控制保留份数✅ 验证复现评估参数训练完成后用 eval_nuscenes.py 评估eval.sh 有样例命令python eval_nuscenes.py \ --batch_size16 \ --data_dir../nuscenes \ --log_dirlogs_eval_nuscenes_bevseg \ --init_dircheckpoints/8x5_5e-4_rgb12_22:43:46 \ --res_scale2 \ --device_ids[0,1,2,3]关键点评估的res_scale必须与训练一致2最终 trainval 平均 IoU 应约为47.6。雷达融合版use_radarTrueuse_metaradarTruensweeps5则为55.8。 复现小贴士先跑 mini--dsetmini 单卡 res_scale1几分钟确认数据、显存、日志都正常步数即报告点官方建议直接报告max_iters25000的最终值而不是挑选中途最好的检查点多次训练结果约有 ±0.1 mIoU 的正常波动随机种子脚本固定random/numpy种子为 125但 GPU 训练仍存在一定随机性数据布局data_dir下应同时有full_v1.0/正式训练和mini调试目录结构见 README.md继续训练中断后用--init_dir检查点目录 --load_stepTrue --load_optimizerTrue恢复完整状态掌握这份参数清单后你可以轻松在 4 张 GPU 上跑通 Simple-BEV 的标准训练流程并复现与官方预训练模型一致的 47.6 mIoU 结果。【免费下载链接】simple_bevA Simple Baseline for BEV Perception项目地址: https://gitcode.com/gh_mirrors/si/simple_bev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考