You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fine_grained训练Rotated RetinaNet时遇IndexError问题求助

问题解决:MMRotate细粒度训练HRSC2016时评估阶段IndexError错误

问题场景

  • 使用配置文件rotated_retinanet_obb_r50_fpn_6x_hrsc_rr_le90.py进行细粒度目标检测训练
  • 评估阶段触发IndexError: tuple index out of range错误,添加--no-validate参数跳过评估后训练可正常执行
  • 已确认配置中num_classes=33且classwise=True,需解决该问题以完成HRSC2016数据集上带fine_grained的基线模型评估

报错堆栈

Traceback (most recent call last):
  File "tools/train.py", line 192, in <module>
    main()
  File "tools/train.py", line 181, in main
    train_detector(
  File "/root/autodl-tmp/mmrotate/mmrotate/apis/train.py", line 141, in train_detector
    runner.run(data_loaders, cfg.workflow)
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run
    epoch_runner(data_loaders[i], **kwargs)
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train
    self.call_hook('after_train_epoch')
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook
    getattr(hook, fn_name)(self)
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch
    self._do_evaluate(runner)
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate
    key_score = self.evaluate(runner, results)
  File "/root/miniconda3/envs/mmrotate/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate
    eval_res = self.dataloader.dataset.evaluate(
  File "/root/autodl-tmp/mmrotate/mmrotate/datasets/hrsc.py", line 251, in evaluate
    mean_ap, _ = eval_rbbox_map(
  File "/root/autodl-tmp/mmrotate/mmrotate/core/evaluation/eval_map.py", line 243, in eval_rbbox_map
    print_map_summary(
  File "/root/autodl-tmp/mmrotate/mmrotate/core/evaluation/eval_map.py", line 305, in print_map_summary
    label_names[j], num_gts[i, j], results[j]['num_dets'],
IndexError: tuple index out of range

解决方案

1. 检查类别映射与数量一致性

  • 打开mmrotate/datasets/hrsc.py,确认细粒度训练对应的CLASSES列表长度是否为33,确保和配置中的num_classes完全匹配
  • 若使用自定义细粒度类别,需保证数据集标注中的类别名称/ID与代码中的类别列表一一对应

2. 修复评估函数的索引越界问题

定位到mmrotate/core/evaluation/eval_map.py第305行,修改索引逻辑以避免越界:

# 替换原出错行的代码片段
if j < len(label_names):
    current_label = label_names[j]
else:
    current_label = f"class_{j}"
print(f"{current_label:<20} {num_gts[i, j]:<6} {results[j]['num_dets']:<6} "
      f"{results[j]['recall']:<10.3f} {results[j]['ap']:<10.3f}")

3. 验证数据集标注的类别ID范围

  • 检查HRSC2016的标注文件(如XML或JSON),确保所有目标的类别ID都在0~32范围内(对应33类),无超出范围的ID导致统计维度不匹配

4. 确认评估参数传递正确性

  • 检查配置文件中evaluation模块的classwise=True是否正确生效,确保评估阶段按类别统计的逻辑正常运行

内容的提问来源于stack exchange,提问作者user20646910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:01:23