1、引言:空间模型与参数优化的重要性
做空间模型训练,说白了就是教算法理解三维世界。点云、网格、体素,这几年在自动驾驶、机器人、AR/VR 遍地开花。但模型不是扔进去就能跑的。
参数优化,才是真正区分“跑起来”和“跑得好”的分水岭。我入行那会儿,接过一个室内场景分割项目,一个 batch 可以跑,loss 就是下不去。当时我盯着曲线看了三天,试了十几种学习率,最后发现 optim `eps` 设错了——这类问题,不做参数优化你根本找不到根因。
为什么参数优化这么重要?
答案很直白:空间模型比图像模型更“敏感”。
- 数据稀疏性——点云通常几万到几十万点,无效点、离群点、遮挡点都会扰动梯度方向。
- 内存压力——3D 运算动辄数 G GPU 显存,batch size 调大一点就可能 OOM。
- 收敛曲线诡异——我见过不少 PointNet++ 变体,训练 loss 正常但验证 mIoU 迟迟不涨。后来发现是学习率预热没做,一上来步子太大,直接踩到局部洼地。
所以参数优化不是锦上添花。它是让模型从“能用”变成“好用”的核心杠杆。
你想想看,我们其实在调控什么?
每一个超参数背后,都在平衡“学习速度”和“泛化能力”。调得太激进,loss 爆炸;调得太保守,收敛比便秘还慢。我记得有一次用 PointGroup 做实例分割,默认参数在 S3DIS 上 mAP 有 45,换到自己的扫描数据直接掉到 23。折腾一周后,把 learning rate 从 1e-3 降到 5e-4,batch size 从 4 改成 8,再加 cosine annealing——mAP 回到 41。你敢信?就是几个数字的事。
参数优化到底优化哪些东西?
咱们理一理,常见的参数维度至少包含下面这些。表格里是我个人常用的参考区间——注意:每套数据、每个模型都得重新试。
| 参数类别 | 典型参数 | 影响范围 | 我常踩的坑 |
|---|---|---|---|
| 学习率与调度 | lr, warmup steps, cosine decay | 收敛速度、最终精度 | lr 给太大,loss 直接就 NaN |
| 批量大小 | batch size | 梯度方差、内存 | 点云 batch > 8 经常 OOM |
| 优化器超参 | β₁, β₂, weight decay | 稳定性、泛化 | weight decay 设太大,准确率掉 3%~5% |
| 正则化 | dropout, label smooth | 过拟合 | PointNet 加 dropout 反而更差 |
| 模型结构参数 | KNN 邻居数、体素分辨率 | 感受野、计算量 | 邻居太多显存爆炸 |
一个经验法则:先固定其他参数,只调学习率。等 loss 能稳定下降后,再动 batch size 和优化器。我试过同时调三个参数,完全分不清谁在起作用。
避坑指南
- 千万不要照搬论文里的超参数。数据集不同,最优参数可能差一个数量级。
- 我曾经以为 cosine annealing 一定比 step decay 好。后来发现对于小模型(比如 PointNet 轻量版),step decay 收敛更快。具体问题具体分析。
- 监控梯度范数。空间模型梯度容易爆炸,我习惯在训练脚本里输出 grad norm。如果超过 10,说明学习率或 batch size 有问题。
一个小技巧:先跑 5~10 个 epoch,看 loss 下降趋势。如果 loss 震荡很大,先降学习率;如果 loss 降得很慢,考虑换优化器或增预热阶段。我一般用 AdamW + cosine + 5% 的预热。
写在前面
本书不会告诉你“万能参数”——那不存在。但我会把多年实战总结的调优框架、调试套路、常见模型的参数规律掰开揉碎讲清楚。读完第一章,你至少要知道:
- 参数优化是空间模型训练的“下半场”。
- 每个参数都有 trade-off,没有银弹。
- 监控 + 系统调优,远比盲目试参数高效。
好,后面我们一章章展开。先从最基础的学习率开始。