4.0 KiB
4.0 KiB
Evaluation优化策略 - 减少测评样本到3000张
当前状态
- 验证集总样本: 6,019个
- 目标样本: 3,000个
- 减少比例: ~50%
策略1: 使用load_interval参数 (推荐 ✅)
原理
load_interval参数会对数据集进行均匀采样:
load_interval=1: 使用全部样本 (6,019个)load_interval=2: 每隔1个采样,得到3,010个样本load_interval=3: 每隔2个采样,得到2,007个样本
实现方式
在配置文件的data.val中添加load_interval: 2
data:
val:
type: ${dataset_type}
dataset_root: ${dataset_root}
ann_file: ${dataset_root + "nuscenes_infos_val.pkl"}
load_interval: 2 # ⬅️ 添加这一行,采样50%
pipeline: ${test_pipeline}
object_classes: ${object_classes}
map_classes: ${map_classes}
modality: ${input_modality}
test_mode: false
box_type_3d: LiDAR
优点
- ✅ 简单快速,修改1行配置
- ✅ 均匀采样,覆盖全部场景
- ✅ 不需要创建新文件
- ✅ 可灵活调整 (interval=2/3/4)
缺点
- ⚠️ 采样比例固定 (只能是1/2, 1/3, 1/4...)
- ⚠️ 无法精确控制为3000个
预期效果
- 样本数: 6,019 ÷ 2 = 3,010个 ✅
- .eval_hook大小: 75GB ÷ 2 = ~37.5GB
- 评估时间: 减少50%
策略2: 创建子集PKL文件 (精确控制)
原理
从原始validation pkl中提取前3000个样本,创建新的索引文件
实现步骤
Step 1: 创建3000样本的子集
import pickle
# 读取原始validation索引
with open('data/nuscenes/nuscenes_infos_val.pkl', 'rb') as f:
val_infos = pickle.load(f)
# 提取前3000个样本
val_infos_3k = {
'infos': val_infos['infos'][:3000],
'metadata': val_infos['metadata']
}
# 保存新索引
with open('data/nuscenes/nuscenes_infos_val_3k.pkl', 'wb') as f:
pickle.dump(val_infos_3k, f)
Step 2: 修改配置使用新文件
data:
val:
type: ${dataset_type}
dataset_root: ${dataset_root}
ann_file: ${dataset_root + "nuscenes_infos_val_3k.pkl"} # ⬅️ 使用3k子集
pipeline: ${test_pipeline}
object_classes: ${object_classes}
map_classes: ${map_classes}
modality: ${input_modality}
test_mode: false
box_type_3d: LiDAR
优点
- ✅ 精确控制样本数 (恰好3000个)
- ✅ 可以选择特定场景 (如白天/夜晚)
- ✅ 可重复使用
缺点
- ⚠️ 需要创建新文件 (~128MB)
- ⚠️ 仅采样前3000个,可能不够均匀
- ⚠️ 多一个维护的文件
预期效果
- 样本数: 恰好3,000个 ✅
- .eval_hook大小: ~37GB
- 评估时间: 减少50%
推荐方案: 策略1 + load_interval=2
原因
- 简单: 仅修改1行配置
- 均匀: 覆盖全部6019个样本的分布
- 灵活: 可随时调整interval值
- 效果: 3010个样本已满足评估需求
实施计划
# multitask_BEV2X_phase4a_stage1.yaml
# 覆盖default.yaml的data.val配置
data:
val:
load_interval: 2 # 减少50%样本
evaluation:
interval: 10 # 从5改为10,进一步减少评估频率
组合效果:
- 原方案: 20 epochs × 4次评估(interval=5) × 6019样本 = 24,076次样本评估
- 新方案: 20 epochs × 2次评估(interval=10) × 3010样本 = 6,020次样本评估
- 减少75%的评估开销 ✅
对比表
| 指标 | 原始配置 | 策略1 (load_interval=2) | 策略2 (3k pkl) |
|---|---|---|---|
| 样本数 | 6,019 | 3,010 | 3,000 |
| 采样方式 | 全部 | 均匀采样 | 连续前3000 |
| 修改复杂度 | - | 1行配置 | 创建文件+修改配置 |
| .eval_hook大小 | 75GB | 37.5GB | 37GB |
| 评估时间 | 100% | 50% | 50% |
| 灵活性 | - | 高 (可调interval) | 低 |
| 推荐度 | - | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
实施代码
使用策略1 (推荐)
# 将自动修改配置文件
使用策略2 (可选)
# 运行创建3k子集的脚本
python tools/create_val_subset.py --samples 3000