C# Sdcb.Paddle2Onnx Paddle模型通过C#转换为ONNX模型

https://github.com/sdcb/PaddleSharp/blob/feature/2.5/docs/paddle2onnx.md

效果

C# Sdcb.Paddle2Onnx Paddle模型通过C#转换为ONNX模型_第1张图片

项目

C# Sdcb.Paddle2Onnx Paddle模型通过C#转换为ONNX模型_第2张图片

 代码

using Sdcb.Paddle2Onnx;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Paddle模型转ONNX模型
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string pdiparamsfileFilter = "*.pdiparams|*.pdiparams";
        string pdmodelfileFilter = "*.pdmodel|*.pdmodel";

        string paramsFile;
        string modelFile;

        StringBuilder sb = new StringBuilder();

        DateTime dt1 = DateTime.Now;
        DateTime dt2 = DateTime.Now;

        private void button1_Click(object sender, EventArgs e)
        {
            sb.Clear();
            textBox3.Text = "";

            if (string.IsNullOrEmpty(modelFile) || string.IsNullOrEmpty(paramsFile))
            {
                return;
            }
            dt1 = DateTime.Now;
            bool can = Paddle2OnnxConverter.CanConvert(modelFile, paramsFile);
            Console.WriteLine(can);
            if (can)
            {
                byte[] modelBuffer = File.ReadAllBytes(modelFile);
                PaddleModelInfo modelInfo = Paddle2OnnxConverter.DescribePaddleModel(modelBuffer);
                sb.AppendLine($"PaddleModel Input: {string.Join(", ", modelInfo.InputNames)}");
                sb.AppendLine($"PaddleModel Output: {string.Join(", ", modelInfo.OutputNames)}");
                sb.AppendLine("");
                byte[] paramsBuffer = File.ReadAllBytes(paramsFile);
                byte[] onnxModel = Paddle2OnnxConverter.ConvertToOnnx(modelBuffer, paramsBuffer);
                OnnxModelInfo onnxInfo = Paddle2OnnxConverter.DescribeOnnxModel(onnxModel);
                sb.AppendLine("OnnxModel Input:");
                sb.AppendLine(string.Join("\r\n", onnxInfo.Inputs.Select(x => x.ToString())));
                sb.AppendLine("OnnxModel Output:");
                sb.AppendLine(string.Join("\r\n", onnxInfo.Outputs.Select(x => x.ToString())));
                //输出onnx模型 
                using (FileStream fs = new FileStream("model.onnx", FileMode.OpenOrCreate, FileAccess.Write))
                {
                    fs.Write(onnxModel, 0, onnxModel.Length);
                }
                dt2 = DateTime.Now;
                sb.AppendLine("----------------------------------------------------------------------");
                sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                sb.AppendLine("耗时:" + (dt2 - dt1).TotalMilliseconds + "ms\n");
                textBox3.Text = sb.ToString();
                //MessageBox.Show("ok");
            }
            else
            {
                MessageBox.Show("该Paddle模型不能转成ONNX模型");
            }

        }

        /// 
        /// paramsFile
        /// 
        /// 
        /// 
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = pdiparamsfileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;
            paramsFile = ofd.FileName;
            textBox1.Text = paramsFile;
        }

        /// 
        /// modelFile
        /// 
        /// 
        /// 
        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = pdmodelfileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;
            modelFile = ofd.FileName;
            textBox2.Text = modelFile;
        }
    }
}

Demo下载

你可能感兴趣的:(AI,C#,Paddle模型C#转ONNX)