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

Detectron2出现tuple index out of range报错及谷歌云盘模型导入问题咨询

问题解决方案

1. 解决tuple index out of range报错

引发报错的问题点如下:

  • 变量名大小写错误:评估阶段你定义的评估器变量是小写eva,但调用inference_on_dataset时传参写了大写Eva,拼写不一致是触发索引报错的核心原因
  • 数据集未正确注册:你评估时指定的数据集是test_dataset,如果该数据集没有提前在DatasetCatalog完成注册、或注册时的标注格式不符合COCO要求、或标注类别数和你设置的33不匹配,都会触发索引越界
  • 导入语句位置错误:你把build_detection_test_loader、COCOEvaluator的导入语句写在了可视化数据的for循环内部,属于错误的编码规范,容易引发未知运行错误

修复后的评估阶段代码如下:

# 所有导入统一放在代码顶部
import cv2
import os
import random
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import DatasetCatalog, MetadataCatalog, build_detection_test_loader
from detectron2.evaluation import COCOEvaluator, inference_on_dataset
from detectron2.engine import DefaultPredictor
from detectron2 import model_zoo

# 可视化训练数据代码
my_dataset_train_metadata = MetadataCatalog.get("my_dataset_train")
dataset_dicts = DatasetCatalog.get("my_dataset_train")
for d in random.sample(dataset_dicts, 3):
    img = cv2.imread(d["file_name"])
    visualizer = Visualizer(img[:, :, ::-1], metadata=my_dataset_train_metadata, scale=0.5)
    vis = visualizer.draw_dataset_dict(d)
    cv2_imshow(vis.get_image()[:, :, ::-1])

# 评估阶段代码
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.3

pred = DefaultPredictor(cfg) 
eva = COCOEvaluator("test_dataset", cfg, False, output_dir = "./output/")
val_loader = build_detection_test_loader(cfg, "test_dataset")
# 修正变量名大小写,重启Colab单独运行评估时,把trainer.model替换为pred.model即可
inference_on_dataset(pred.model, val_loader, eva)

注意:加载模型时的所有cfg配置必须和训练时的配置完全一致,否则会出现维度不匹配、索引报错的问题

2. 修改代码导入谷歌云端硬盘的模型文件

操作步骤:

  • 先运行挂载谷歌云盘的代码,按照弹出提示完成授权
  • 提前将Colab输出文件夹里的model_final.pth上传到谷歌云盘的指定目录,比如/content/drive/MyDrive/detectron2_weights/
  • 修改cfg.MODEL.WEIGHTS的路径为云盘中的模型路径即可

完整的挂载+导入代码如下:

# 挂载谷歌云盘
from google.colab import drive
drive.mount('/content/drive')

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_X_101_32x8d_FPN_3x.yaml"))
# 和训练时保持完全一致的配置
cfg.DATASETS.TRAIN = ("my_dataset_train",)
cfg.DATASETS.TEST = ("my_dataset_val",)
cfg.DATALOADER.NUM_WORKERS = 2
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.001
cfg.SOLVER.WARMUP_ITERS = 3
cfg.SOLVER.STEPS = []
cfg.SOLVER.GAMMA = 0.05
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128
# 类别数必须和训练时一致
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 33 
cfg.TEST.EVAL_PERIOD = 500

# 改为谷歌云盘的模型路径
cfg.MODEL.WEIGHTS = "/content/drive/MyDrive/detectron2_weights/model_final.pth"
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.3

# 后续评估、预测代码和上文修复后的版本一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:24:03