首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用协同工具将Detectron2 torchscript模型转换为CoreML时出错

使用协同工具将Detectron2 torchscript模型转换为CoreML时出错
EN

Stack Overflow用户
提问于 2022-11-28 23:38:27
回答 1查看 17关注 0票数 0

我有一个Detectron2模型,用于识别后端服务器上的特定项。我想让这个模型在iOS设备上可用,并使用corelToolsv6.1将其转换成一个CoreML模型。我使用Facebook提供的export_model.py脚本创建了一个torchscript模型,但是当我试图将它转换为coreml时,我得到了一个KeyError。

代码语言:javascript
运行
复制
def save_core_ml_package(scripted_model):
    # Using image_input in the inputs parameter:
    # Convert to Core ML neural network using the Unified Conversion API.
    h = 224
    w = 224
    ctmodel = ct.convert(scripted_model,
                         inputs=[ct.ImageType(shape=(1, 3, h, w),
                                              color_layout=ct.colorlayout.RGB)]
                         )
    # Save the converted model.
    ctmodel.save("newmodel.mlmodel")

我得到以下错误

代码语言:javascript
运行
复制
Support for converting Torch Script Models is experimental. If possible you should use a traced model for conversion.
Traceback (most recent call last):
  File "/usr/repo/URCV/src/Python/pytorch_to_torchscript.py", line 101, in <module>
    save_trace_to_core_ml_package(test_model, outdir=outdir)
  File "/usr/repo/URCV/src/Python/pytorch_to_torchscript.py", line 46, in save_trace_to_core_ml_package
    ctmodel = ct.convert(
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/_converters_entry.py", line 444, in convert
    mlmodel = mil_convert(
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 190, in mil_convert
    return _mil_convert(model, convert_from, convert_to, ConverterRegistry, MLModel, compute_units, **kwargs)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 217, in _mil_convert
    proto, mil_program = mil_convert_to_proto(
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 282, in mil_convert_to_proto
    prog = frontend_converter(model, **kwargs)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 112, in __call__
    return load(*args, **kwargs)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 56, in load
    converter = TorchConverter(torchscript, inputs, outputs, cut_at_symbols, specification_version)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 160, in __init__
    raw_graph, params_dict = self._expand_and_optimize_ir(self.torchscript)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 486, in _expand_and_optimize_ir
    graph, params_dict = TorchConverter._jit_pass_lower_graph(graph, torchscript)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 431, in _jit_pass_lower_graph
    _lower_graph_block(graph)
  File "/opt/python-venv/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 410, in _lower_graph_block
    module = getattr(node_to_module_map[_input], attr_name)
KeyError: images.2 defined in (%images.2 : __torch__.detectron2.structures.image_list.ImageList = prim::CreateObject()
)
EN

回答 1

Stack Overflow用户

发布于 2022-11-29 11:14:02

从错误消息看,您使用的是火炬脚本模型:

对火炬脚本模型转换的支持是实验性的。如果可能的话,您应该使用跟踪模型进行转换。

如果可能的话,尝试使用跟踪模型,例如:

代码语言:javascript
运行
复制
dummy_input = torch.randn(batch, channels, width, height)
traceable_model = torch.jit.trace(model, dummy_input)

后面跟着您的原始代码:

代码语言:javascript
运行
复制
ct.convert(traceable_model,...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74607629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档