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

Detectron2 Mask R-CNN转TorchScript报错求助及简便方案咨询

错误排查与解决方案

1. 错误原因

报错AttributeError: inference是因为你传入TracingAdapter的是DefaultPredictor实例,而**DefaultPredictor没有inference方法**。inference是Detectron2核心模型(由build_model创建的nn.Module子类)的方法,DefaultPredictor是封装了模型、预处理、后处理的工具类,并非模型本身。

2. 修正后的转换代码

需要直接构建模型并加载权重,而非使用DefaultPredictor,修正后的代码如下:

import cv2
import numpy as np
import torch
from detectron2 import model_zoo
from detectron2.config import get_cfg
from detectron2.modeling import build_model
from detectron2.export.flatten import TracingAdapter
import os

ModelPath='/home/jayasanka/working_files/create_torchsript/model.pt'
with open('savepic.npy', 'rb') as f:
    image = np.load(f)

# 配置模型
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1  # 你的类别数+1
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, ModelPath)
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.60

# 直接构建模型并加载权重
model = build_model(cfg)
model.load_state_dict(torch.load(ModelPath)["model"])
model.eval()  # 切换到评估模式

# 预处理输入:转为模型期望的CHW格式+float32+归一化
im = torch.tensor(image).permute(2, 0, 1).float()
im = im / 255.0  # 匹配Detectron2的预处理规则,可根据训练配置调整

def inference_func(model, image):
    inputs = [{"image": image}]
    return model.inference(inputs, do_postprocess=False)[0]

wrapper = TracingAdapter(model, im, inference_func)
traced_script_module = torch.jit.trace(wrapper, (im,))
traced_script_module.save("torchscript.pt")

3. 更简便的Detectron2转TorchScript方法

Detectron2官方提供了无需手动编写适配代码的导出方式:

方法一:命令行工具导出

直接运行官方脚本,一键完成导出:

python -m detectron2.export.export_torchscript \
    --config-file COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \
    --output torchscript.pt \
    --opts MODEL.WEIGHTS /home/jayasanka/working_files/create_torchsript/model.pt \
    MODEL.ROI_HEADS.NUM_CLASSES 1

方法二:代码内集成导出逻辑

使用官方封装的TorchScriptExport类,简化代码:

from detectron2.export import TorchScriptExport

# 复用之前的cfg配置
export_handler = TorchScriptExport(cfg)
traced_model = export_handler.export()
traced_model.save("torchscript.pt")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:15:34