csharp通过onnx使用sklearn的模型

Posted lonelyrains

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp通过onnx使用sklearn的模型相关的知识,希望对你有一定的参考价值。

  • 问题背景:

    我们需要使用干净清爽的C#接口,来实现对Python的Scikit-Learn模型的调用,不对主机的安装包做任何修改。兼具易用性的同时,保持比较高性能的调用速度。
    ONNX(Open Nerual Network Exchange)是一种跨不同语言和模型框架的通用工具。Tensorflow、Keras、Pytorch等等都有对应的onnx工具模块,Scikit-Learn也不例外。
    用Scikit-Learn的原因,是对传统统计机器学习的模型调用非常方便,更适合针对纯数据的预测和分类。包括线性回归、随机森林、决策树、KNN等等。

  • 最快使用:

    基于搭建的示例工程,适配模型字段列表,直接引入onnx模型文件,进行调用。

  • 环境搭建:

    初始环境win10-x64/python3.7/pytorch1.1/sklearn
github下载sklearn-dotnet
pip install skl2onnx
下载模型数据,修改并运行sklearn-dotnet-master\\training\\train.py,生成onnx文件
Visual Studio新建c# console的工程,nuget添加Microsoft.ML / Microsoft.ML.OnnxRuntime的引用
添加vc2019 runtime库
使用文本编辑打开csproj文件
添加netstandard/System.Memory/System.Runtime.InteropServices.RuntimeInformation的引用,并把引用所对应的dll拷贝到exe路径。

  • 常见错误:

    cannot import name 'get_all_providers' from 'onnxruntime.capi._pybind_state'
    datasets.fetch_california_housing 异常
    ….
    各种常见错误的原因,基本就是库没引用到位或者没放在exe目录下
    如果不能正常安装库,可能是网络限制,需要配置pip、conda的镜像、nuget等等

 

  • 参考链接:

https://github.com/gnovack/sklearn-dotnet
https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/5976036/cal_housing.tgz 
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
http://onnx.ai/sklearn-onnx/index.html
https://github.com/onnx
https://github.com/onnx/sklearn-onnx
https://github.com/microsoft/onnxruntime
 

The End of the World

以上是关于csharp通过onnx使用sklearn的模型的主要内容,如果未能解决你的问题,请参考以下文章

UWP通过机器学习加载ONNX进行表情识别

PyTorch模型导出到ONNX文件示例(LeNet-5)

通过 ONNX 从 PyTorch 转换为 CoreML 时缺少权重向量

如何实现相互转换:ONNX和JSON之间

yolov5 pt 模型 导出 onnx

模型转换 PyTorch转ONNX 入门