github.com/sdcb/Paddle…
效果

项目

代码
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模型")
}
}
/// <summary>
/// paramsFile
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
}
/// <summary>
/// modelFile
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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下载