材转码 2024-03-25 18:26 采纳率: 14.3%
浏览 2

深度学习修改.mnn文件

用阿里巴巴的 MNN 模型转为 cpp,然后有几个文件是.mnn文件,怎么打开这种类型的文件呀 谢谢 我是想修改一下里面的内容,不知道能不能修改

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-25 18:26
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题解答: 要打开.mnn文件,可以使用MNN中自带的解析器,将.mnn文件解析成MNN的模型结构,然后进行修改。接着,将修改后的MNN模型转化为cpp代码格式。 以下是一个可能的解决方法:
    1. 使用MNN自带的解析器将.mnn文件解析成MNN的模型结构。 示例代码:
    #include <MNN/Interpreter.hpp>
    #include <MNN/Tensor.hpp>
    using namespace MNN;
    int main(int argc, char const *argv[])
    {
      // Load MNN model
      std::shared_ptr<Interpreter> interpreter(Interpreter::createFromFile("/path/to/your/mnn/file"));
      // Get input/output tensor names
      std::vector<std::string> input_names = interpreter->getInputTensorNames();
      std::vector<std::string> output_names = interpreter->getOutputTensorNames();
      // Create session
      Session* session = interpreter->createSession();
      // Create input tensor
      Tensor* input_tensor = interpreter->getSessionInput(session, input_names[0].c_str());
      input_tensor->resize({1, 3, 224, 224}); // Set data shape
      // Create output tensor
      Tensor* output_tensor = interpreter->getSessionOutput(session, output_names[0].c_str());
      // Feed input data
      float* input_data = input_tensor->host<float>();
      // You can modify input_data here
      // Run inference
      interpreter->runSession(session);
      // Get output data
      float* output_data = output_tensor->host<float>();
      // You can modify output_data here
      // Release resources
      interpreter->releaseModel();
      delete session;
      return 0;
    }
    
    1. 对MNN的模型结构进行修改。 由于每个模型结构都是不同的,对于如何修改模型结构,需要根据具体的情况进行调整。
    2. 使用MNN将修改后的模型转化为cpp格式。 示例代码:
    #include <MNN/Interpreter.hpp>
    #include <MNN/MNNDefine.h>
    #include <MNN/expr/ExprCreator.hpp>
    #include <MNN/expr/NN.hpp>
    #include <MNN/expr/Onnx.hpp>
    #include <MNN/expr/OnnxHelper.hpp>
    #include <MNN/expr/Training.hpp>
    using namespace MNN;
    using namespace MNN::express;
    int main(int argc, const char *argv[]) {
      // Create ExprBuilder
      std::unique_ptr<OpT> conv(new OpT);
      conv->type = OpType_Convolution;
      ...
      std::unique_ptr<OpT> activation(new OpT);
      activation->type = OpType_ReLU;
      ...
      std::unique_ptr<OpT> pooling(new OpT);
      pooling->type = OpType_Pooling;
      ...
      auto builder = Expr::createBuilder();
      std::vector<int> inputShape = {1, 3, 224, 224}; // Input tensor shape
      auto input = builder->input("input", inputShape, NHWC);
      auto conv_output = builder->convolution(input, conv.get());
      auto activation_output = builder->relu(conv_output);
      auto pooling_output = builder->pooling(activation_output, pooling.get());
      auto last_output = pooling_output;
      // Create Expr
      auto output = builder->output(last_output);
      auto expr = Expr::create(output, {input});
      // Create module
      std::unique_ptr<Module> module(new Module);
      auto default_backend = MNN_FORWARD_CPU;
      module->create(expr.get(), default_backend);
      // Save as Cpp
      module->save("/path/to/save/as/cpp/file");
      return 0;
    }
    

    需要注意的是,对于某些模型,可能需要进行额外的处理,例如修改对应的OP等。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月25日

悬赏问题

  • ¥15 求一个C# sm4 加密解密的代码
  • ¥15 想做个网络加速器,怎么实现
  • ¥20 centos7下载mysql提示DNS解析异常
  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)