lazarus呼叫Onnxruntime

禁卫军發表於2024-06-23

一、下載Onnxruntime

GitHub - microsoft/onnxruntime: ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

注意win7執行時會出錯。

可以下載 https://pan.baidu.com/s/18gIMP7r3lZAmgUTj4H2ugA?pwd=6666 編譯好的可在win7下使用。還可以使用CUDA加速。加速方法後面說

二、下載ONNXRuntime AI and Machine Learning Library for Freepascal

GitHub - hshatti/TONNXRuntime: TOnnxRuntime is a Microsoft ONNXRuntime AI and Machine Learning Library for Freepascal / Delphi

裡面有例子。

三、注意事項

1、呼叫時在單元中要加{$mode delphi}{$H+},因為有些定義使用的是delphi的格式。

2、呼叫方法時有時會出錯。要檢視方法的實現,直接寫就可以。如

DefaultSessionOptions.SetGraphOptimizationLevel(ORT_ENABLE_BASIC); 這個會出錯

檢視SetGraphOptimizationLevel方法,寫成下面就不會出錯了。

ThrowOnError(GetApi().SetSessionGraphOptimizationLevel(DefaultSessionOptions.p_,ORT_ENABLE_ALL));

3、設定CPU執行緒數後,退出時要關閉,否則會出錯

DefaultSessionOptions.SetIntraOpNumThreads(UserCpu); //使用執行緒數,預設為全開

退出時要呼叫

session.release;
DefaultSessionOptions.release;

四、CUDA加速

1、在session := TORTSession.Create(ModFile); 建立物件前設定CUDA

OrtSessionOptionsAppendExecutionProvider_CUDA(DefaultSessionOptions.p_,0);

2、複製OnnxruntimeCUDA加速dll

onnxruntime_providers_shared.dll
onnxruntime_providers_cuda.dll

3、複製CUDA動態庫

根據執行時提示在Program Files\Nvidia\CUDADevlopment\bin找到相關檔案。

4、執行時第一次推理時比較慢,是正常的。

5、在IDE中推理比較慢,原因不明。但直接執行時比CPU推理快得多。

五、如何還要提速,可使用Opencl計算

比如Tbitmap轉blob等計算時可以用Opencl進行計算,可以提高整個推理速度。

用這個比用Opencv好,對Onnx支援更全。最新的yolov10也可以用的。

相關文章