bev-project/EVALUATION_OPTIMIZATION_STR...

4.0 KiB
Raw Permalink Blame History

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. 简单: 仅修改1行配置
  2. 均匀: 覆盖全部6019个样本的分布
  3. 灵活: 可随时调整interval值
  4. 效果: 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