bev-project/EVALUATION_OPTIMIZATION_STR...

166 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`
```yaml
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样本的子集
```python
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: 修改配置使用新文件
```yaml
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个样本已满足评估需求
### 实施计划
```yaml
# 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 (推荐)
```bash
# 将自动修改配置文件
```
### 使用策略2 (可选)
```bash
# 运行创建3k子集的脚本
python tools/create_val_subset.py --samples 3000
```