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
相关产品推荐
相关产品推荐

