如何处理使用MindSpore Lite的converter_lite工具转换模型失败的问题

本文介绍了在使用MindSporeLite的converter_lite工具转换模型时遇到的常见问题及其解决方法。当转换过程中遇到CONVERTRESULTFAIL错误,可能是模型文件无效或存在不支持的算子。针对这些问题,可以通过检查模型文件、识别不支持的算子并尝试自定义parser或向社区求助来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何处理使用MindSpore Lite的converter_lite工具转换模型失败的问题

现象描述

使用MindSpore进行模型部署时需要首先使用MindSpore Lite的converter_lite工具进行模型转换,将*.mindir模型转换为*.ms模型。模型转换失败,日志包含CONVERT RESULT FAIL错误。

1.converter_lite工具包括linux和windows两个版本,使用完全一致,问题案例分析中不做区分。 2.因不同版本中日志行号可能存在差异,下述示例日志报错信息中的行号信息均用”*”表示; 3.示例日志中只列出了通用信息,其他涉及具体场景的信息均用“***”表示。

原因分析

模型转换失败的问题需要借助日志报错信息来分析,出现该问题的可能原因及对应日志信息如下:

  • 读取原模型文件失败,日志报错信息:

    WARNING: Logging before InitGoogleLogging() is written to STDERR
    [WARNING] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.071 [mindspore/lite/tools/common/protobuf_utils.cc: **] ReadProtoFromBinaryFile] Parse ***.onnx failed.
    [ERROR] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.122 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc: **] InitOriginModel] Read onnx model file failed, model path: ***.onnx
    [ERROR] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.131 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc: **] Parse] init origin model failed.
    [ERROR] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.137 [mindspore/lite/tools/converter/converter.cc: **] BuildFuncGraph] Get funcGraph failed for fmk: ONNX
    [ERROR] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.143 [mindspore/lite/tools/converter/converter.cc: **] Convert] Parser/Import model return nullptr
    [ERROR] LITE(11979,7fbdc90a8ec0,converter_lite):2021-12-13-16:20:49.506.162 [mindspore/lite/tools/converter/converter.cc: **] RunConverter] CONVERT RESULT FAILED:-1 Common error code.
    CONVERT RESULT FAILED:-1 Common error code.
  • 存在不支持的算子,日志报错信息:

    [mindspore/lite/tools/converter/converter.cc:**] BuildFuncGraph] Get funcGraph failed for fmk: ****
    [mindspore/lite/tools/converter/converter.cc:**] Converter] Parser/Import model return nullptr
    [mindspore/lite/tools/converter/converter_context.h:**] PrintOps] ===========================================
    [mindspore/lite/tools/converter/converter_context.h:**] PrintOps] UNSUPPORTED OP LIST:
    [mindspore/lite/tools/converter/converter_context.h:**] PrintOps] FMKTYPE: ****, OP TYPE: ****
    [mindspore/lite/tools/converter/converter_context.h:**] PrintOps] ===========================================
    [mindspore/lite/tools/converter/converter.cc:**] RunConverter] CONVERT RESULT FAILED:-300 Failed to find operator.
  • 存在不支持的算子,日志报错信息包含:

    [mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.cc:**] ConvertLayers] parse node **** failed.

解决办法

检查报错日志,查找是否包含上述场景中所展示的错误信息。

步骤1:检查模型文件是否有效。

  1. 如检查发现读取原模型文件失败,则为模型路径无效或模型文件损坏。
  2. 检查模型路径无误后,若确认模型文件损坏,可以重新下载或导出原模型文件。

步骤2:检查是否存在不支持的算子。

  1. 如检查发现Failed to find operator,则为存在不支持的算子,可以依据UNSUPPORTED OP LIST所展示内容查看具体的算子类型。
  2. 对于转换工具不支持的算子,可以尝试通过继承API接口NodeParser 自行添加parser并通过NodeParserRegistry 进行Parser注册;或者在社区提ISSUE 给MindSpore Lite开发人员处理。

步骤3:检查是否存在算子解析与转换失败。

  1. 如检查发现parse node **** failed,则为转换工具支持该算子转换,但是不支持该算子的某种特殊属性或参数导致模型转换失败。
  2. 可以尝试通过继承API接口NodeParser 添加自定义算子parser并通过NodeParserRegistry 进行Parser注册;或者在社区提ISSUE 给MindSpore Lite开发人员处理。
### 使用 MindSpore 实现 AI 垃圾分类模型 #### 数据准备 要构建一个有效的AI垃圾分类应用,首先需要收集和整理用于训练的数据集。数据集应包含不同类型的垃圾图片,并标注其所属类别(如可回收物、干垃圾、有害垃圾和湿垃圾)。可以利用公开的垃圾分类数据集来加速开发过程[^1]。 #### 模型选择与迁移学习 对于图像分类任务,可以选择已经过大规模数据训练过的预训练模型作为起点,通过迁移学习的方式调整最后一层以适应新的分类需求。MindSpore提供了多种预训练网络结构供开发者选用,在此案例中推荐使用ResNet系列或其他适合移动设备推理速度较快的小型化卷积神经网络架构。完成初步配置之后,可以在本地PC环境中加载这些预训练权重文件并对新加入的最后一层执行随机初始化操作。 ```python import mindspore.nn as nn from mindspore import load_checkpoint, load_param_into_net class ResidualBlockBase(nn.Cell): expansion = 1 def __init__(self, in_channel, out_channel, stride=1): super(ResidualBlockBase, self).__init__() # Define layers here... def create_model(num_classes): net = ResidualBlockBase(in_channel=3, out_channel=num_classes) param_dict = load_checkpoint("path_to_pretrained_weights") load_param_into_net(net, param_dict) return net ``` #### 训练流程设置 定义好损失函数以及优化器后即可开始正式训练阶段的工作了。考虑到实际应用场景下的性能考量因素,建议采用较小的学习率配合AdamW等自适应梯度下降方法来进行参数更新迭代。此外还需注意定期保存checkpoint以便后续恢复继续训练或是直接部署至移动端环境当中去。 ```python from mindspore.nn import AdamWeightDecay, SoftmaxCrossEntropyWithLogits loss_fn = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') optimizer = AdamWeightDecay(params=model.trainable_params(), learning_rate=0.001) model.compile(optimizer=optimizer, loss_fn=loss_fn) history = model.fit(train_dataset, epochs=EPOCHS, callbacks=[callback_list]) ``` #### 部署到手机端 当完成了上述所有准备工作以后就可以考虑如何把训练出来的模型转换成能够在智能手机上运行的形式了。这一步骤主要依赖于MindSpore Lite工具链的支持,它允许用户轻松地将自己的模型导出为轻量级版本并集成进Android/iOS应用程序内部。具体来说就是先调用`export()`接口生成对应的`.ms`格式文件再借助官方提供的SDK文档指导完成最终打包发布工作。 ```bash # Export the trained model to .ms format using command line or API call within Python script. mindspore_lite_converter --fmk=MINDIR --output_file=./garbage_classification.ms ./your_trained_model.mindir ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值