ort

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2026 License: MIT Imports: 10 Imported by: 0

README

onnxruntime (purego)

用 purego 直接调用 onnxruntime C API 的 Go 绑定:纯 Go、无 cgo、运行时动态加载 onnxruntime 动态库

无 CGO 交叉编译 · 单二进制适配 ORT 1.23 ~ 1.31 · CPU 全版本 · CUDA/TensorRT 条件启用 · Windows / Linux / macOS(x64 + arm64)

Go purego CI ORT

核心特性 · 应用截图 · 安装 · 快速开始 · 配置说明 · 开发指南 · 功能细节 · 性能基准

✨ 核心特性

🎯 运行时版本协商,一套代码跑 1.23 ~ 1.31

启动时读取 OrtGetApiBase()->GetVersionString() 解析真实版本,按 GetAPI(min(minor, 31)) 获取与运行时匹配的 OrtApi 函数表,只调用该版本实际存在的函数。索引边界表 apiLastIndex 由 scripts/gen_api_go.py 从 v1.23.2 ~ v1.31.1 九个官方头文件逐一解析生成并校验"只追加"不变量,杜绝越界野指针。

运行时版本 行为
< 1.23 拒绝启动
1.23 ~ 1.31 正常工作(CPU 推理全版本实测)
> 1.31(含 2.x) 默认警告后放行;WithStrictVersion(true) 拒绝启动

⚡ CPU 全版本,CUDA / TensorRT 条件启用

CPU EP 内置恒可用;GPU EP 走双重门控——IsProviderAvailable 判断库构建是否包含该 EP,EnableCUDA / EnableTensorRT 把 ORT 的 status 错误(缺 CUDA 运行库、驱动不匹配等)原样透出。

🖥️ 跨平台 x64 + arm64

Windows x64/arm64、Linux x64/aarch64、macOS arm64/x86_64 统一一套源码;动态库加载 Windows 用 syscall.LoadLibrary、Unix 用 purego.Dlopen,CI 在 4 种 runner × 9 个 ORT 版本矩阵上全量验证。

📦 纯 Go 无 CGO

只依赖 github.com/ebitengine/purego,交叉编译无需 C 工具链;onnxruntime 动态库在运行时才加载,可按需替换 CPU/GPU 构建而不重新编译业务程序。

📷 应用截图

输入图片 bus.jpg YOLO11 检测结果

YOLO11 目标检测示例(examples/yolo,ORT 1.31.1 CPU 推理):1 辆 bus(class 5, 0.90)+ 4 个 person(class 0, 0.52~0.87)

📦 安装

go get github.com/younland/onnxruntime

把 onnxruntime 官方动态库放到 lib/(CPU 版从 ORT Releases 下载;GPU 构建需自备 CUDA/TensorRT 依赖环境):

平台 库文件 推荐路径
Windows x64 / arm64 onnxruntime.dll ./lib/onnxruntime.dll
Linux x64 / aarch64 libonnxruntime.so ./lib/onnxruntime_<arch>.so
macOS arm64 / x86_64 libonnxruntime.dylib ./lib/onnxruntime_<arch>.dylib

DefaultLibraryPath() 按 GOOS/GOARCH 返回上述默认路径,也可用 WithLibraryPath 或 ORT_LIB_PATH 指定任意位置。

🚀 快速开始

package main

import (
	"fmt"

	ort "github.com/younland/onnxruntime"
)

func main() {
	// 加载动态库:低于 1.23 拒绝启动;高于 1.31 默认警告放行,可 WithStrictVersion(true) 拒绝
	engine, err := ort.NewEngine(ort.WithLibraryPath(ort.DefaultLibraryPath()))
	if err != nil {
		panic(err)
	}
	defer engine.Destroy() // 最先 defer,最后执行;须晚于所有 Session/Value 的释放

	fmt.Println(engine.VersionString(), engine.APIVersion())

	opts, _ := engine.NewSessionOptions()
	defer opts.Destroy()
	opts.SetIntraOpNumThreads(4)

	// CUDA / TensorRT:按实际构建与依赖环境条件启用
	if engine.IsProviderAvailable(ort.ProviderCUDA) {
		if err := opts.EnableCUDA(nil); err != nil {
			fmt.Println("CUDA enable failed:", err) // 依赖缺失时错误原样透出
		}
	}

	sess, err := engine.NewSession("model.onnx", opts)
	if err != nil {
		panic(err)
	}
	defer sess.Destroy()

	input, _ := ort.NewTensor([]int64{1, 3, 224, 224}, make([]float32, 3*224*224))
	defer input.Destroy()

	outputs, err := sess.Run(map[string]*ort.Value{"input": input})
	if err != nil {
		panic(err)
	}
	for name, out := range outputs {
		defer out.Destroy()
		data, _ := ort.GetTensorData[float32](out)
		fmt.Println(name, len(data))
	}
}

资源释放顺序:Value / Session 由 Env 创建,必须先释放所有 Session 与 Value,再调用 Engine.Destroy()。与官方绑定一致,正常流程不卸载动态库本身(避免 ORT 静态析构崩溃)。

⚙️ 配置说明

环境变量 作用 生效位置
ORT_LIB_PATH 指定 onnxruntime 动态库完整路径;测试与示例优先读取,设置后跳过 lib/ 版本矩阵 测试、示例程序

🛠️ 开发指南

# 单元测试(版本策略矩阵、索引边界,无需动态库)
go test ./...

# 拉取 1.23 ~ 1.31 全部 9 个版本实库 + yolo 模型/图片(约 300MB)
powershell -ExecutionPolicy Bypass -File scripts/fetch_deps.ps1   # Windows
./scripts/fetch_deps.sh                                           # Linux / macOS / Git Bash

# 端到端:yolo 测试对 lib/ 下每个版本各跑一个子测试;benchmark 同理
go test -v ./examples/yolo/
go test -bench . -benchmem ./examples/yolo/

# 重新生成 / 校验 api.go(依据官方头文件,含 --check 模式)
python3 scripts/gen_api_go.py [--check]

目录结构:

api.go                  # gen_api_go.py 生成:OrtApi 结构体映射 + 版本索引边界表
engine.go               # 引擎加载、版本门禁、函数绑定
version.go              # 版本解析与最低/最高版本策略
funcs.go                # apiFuncs 函数表 + 索引可用性校验
session.go              # 会话与输入输出元信息
value.go                # Tensor 创建与读取
options.go              # 会话选项(线程、图优化、Arena、动态维度)
provider.go             # EP 探测与 CUDA/TensorRT 启用
internal/sys/           # windows: syscall.LoadLibrary / unix: purego.Dlopen
scripts/                # gen_api_go.py、fetch_deps.ps1|.sh
examples/yolo/          # YOLO11 检测示例(命令行 + 单元测试 + 基准测试)
docs/images/            # README 展示图片
.github/workflows/ci.yml

🧩 功能细节

Execution Provider

EP 名称常量 支持情况
CPU ProviderCPU 内置,始终可用,1.23 ~ 1.31 全版本实测
CUDA ProviderCUDA 条件启用:库构建包含且 CUDA 依赖环境齐备
TensorRT ProviderTensorRT 条件启用:同上,TensorRT 库需与 ORT 构建匹配

会话选项(SessionOptions)

方法 作用
SetIntraOpNumThreads / SetInterOpNumThreads 算子内 / 间并行线程数
SetGraphOptimizationLevel 图优化级别(None / Basic / Extended / All)
SetExecutionMode 顺序 / 并行执行模式
SetCpuMemArena CPU 内存池开关(关:Destroy 即还内存;开:复用更快)
AddFreeDimensionOverride[ByName] 按符号 / 维度名固化动态维度
EnableCUDA / EnableTensorRT 挂载 GPU EP,接受 map[string]string 键值配置或 nil 默认

CI

GitHub Actions(ci.yml,Go 1.27):

任务 内容
unit gen_api_go.py --check + 单元测试(无需动态库)
e2e 矩阵 4 runner(windows x64 / linux x64 / linux aarch64 / macOS arm64)× 9 个 ORT 版本,每组合跑完整 go test ./...,Linux/macOS 加 -race

📊 性能基准

环境:Windows 11 · Intel Core i5-14400(16 逻辑核)· Go 1.25 · yolo11n.onnx @ 640×640 · 输入 bus.jpg 810×1080 · ORT 官方 CPU 构建 · 每版本独立进程、预热后 10 次迭代均值。

端到端(预处理 + 推理 + NMS)与推理

ORT 版本 API 推理 (ms) 端到端 (ms) 进程CPU/次 (ms) CPU利用率 峰值RSS (MB)
1.23.2 23 30.1 29.6 298 ~1007% 149
1.24.4 24 28.4 28.7 295 ~1029% 153
1.25.1 25 25.8 25.5 264 ~1034% 160
1.26.0 26 24.8 25.3 252 ~993% 159
1.27.1 27 24.2 24.0 250 ~1040% 159
1.28.3 28 23.6 24.1 250 ~1037% 159
1.29.1 29 27.3 27.9 277 ~991% 161
1.30.1 30 24.3 24.3 244 ~1005% 161
1.31.1 31 22.6 23.9 233 ~974% 161

与 ORT 版本无关的纯 Go 阶段(1.31.1 上实测,各版本一致)

阶段 耗时/次 分配
预处理(最近邻缩放 + CHW 归一化,零分配快路径) ~2.6ms ~4.9MB / 14 次
后处理(输出解析 + NMS) ~5.3ms ~9KB / 13 次

[!NOTE] 1.25 起推理比 1.23/1.24 快约 15%,与 ORT 官方 1.25 的 CPU 性能改进一致;1.26~1.31 基本持平(±5% 噪声内)。绝对值随硬件与负载波动,跨版本对比关注相对趋势。

[!TIP] CPU 利用率 ~1000% 表示 ORT 线程池使用了约 10 个核;追求单请求低延迟可设 opts.SetIntraOpNumThreads(1)。单进程跑全版本矩阵时 RSS 为累计值,上表 RSS 为独立进程隔离测量。预处理已按解码类型(JPEG→YCbCr、PNG→RGBA/NRGBA)走零分配快路径,若输入是其它格式可先解码成这两类以获得同等性能。

🔗 参考

Documentation

Index

Constants

View Source
const (
	ProviderCPU      = "CPUExecutionProvider"
	ProviderCUDA     = "CUDAExecutionProvider"
	ProviderTensorRT = "TensorrtExecutionProvider"
)

常用 Execution Provider 名称常量。

View Source
const (
	DeviceAllocator AllocatorType = 0
	ArenaAllocator  AllocatorType = 1

	DefaultMemType MemType = 0
)
View Source
const DefaultEnvName = "younland/onnxruntime"

DefaultEnvName 是 CreateEnv 的默认 logid。

Variables

This section is empty.

Functions

func DefaultLibraryPath

func DefaultLibraryPath() string

DefaultLibraryPath 默认动态库路径,例如:

Windows: ./lib/onnxruntime.dll
Linux amd64: ./lib/onnxruntime_amd64.so
Linux arm64: ./lib/onnxruntime_arm64.so
Mac amd64: ./lib/onnxruntime_amd64.dylib
Mac arm64: ./lib/onnxruntime_arm64.dylib

func GetTensorData

func GetTensorData[T Number](v *Value) ([]T, error)

GetTensorData 获取 Tensor 数据,T 需与实际元素类型匹配。

Types

type AllocatorHandle

type AllocatorHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type AllocatorType

type AllocatorType int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type CUDAProviderOptionsV2Handle

type CUDAProviderOptionsV2Handle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine 推理引擎上下文。一套二进制可加载 1.23 ~ 1.31 任意版本的 onnxruntime 动态库。

func NewEngine

func NewEngine(options ...Option) (*Engine, error)

NewEngine 加载 onnxruntime 动态库并完成初始化。

版本门禁:低于 1.23 拒绝启动;1.23 ~ 1.31 直接工作;高于 1.31 默认打印警告后放行, WithStrictVersion(true) 时拒绝。函数表按运行时实际版本协商,同一套代码可跨版本运行。

func (*Engine) APIVersion

func (e *Engine) APIVersion() uint32

APIVersion 返回与运行时协商出的 OrtApi 表版本(23 ~ 27)。

func (*Engine) Destroy

func (e *Engine) Destroy()

Destroy 释放资源。

调用顺序:session 由 env 创建并引用 env,必须先释放所有 Session(及由它们产出的 Value),再调用本方法。Destroy 之后包级 NewTensor 会返回 "engine not initialized"。

注意:与官方 C# / Python 绑定一致,这里不卸载动态库本身,避免 ORT 静态析构崩溃。

func (*Engine) GetAvailableProviders

func (e *Engine) GetAvailableProviders() []string

GetAvailableProviders 返回当前 onnxruntime 构建支持的 Execution Provider 名称列表。

具体返回范围取决于编译时启用的 EP:CPU 始终存在;CUDA / TensorRT 仅存在于 GPU 构建中。查询失败时返回 nil。

func (*Engine) IsProviderAvailable

func (e *Engine) IsProviderAvailable(name string) bool

IsProviderAvailable 判断当前 onnxruntime 构建是否包含指定 Execution Provider。

if engine.IsProviderAvailable(ort.ProviderCUDA) {
    opts.EnableCUDA(nil)
}

func (*Engine) NewSession

func (e *Engine) NewSession(modelPath string, opts *SessionOptions) (*Session, error)

NewSession 从模型文件创建会话。

func (*Engine) NewSessionFromBytes

func (e *Engine) NewSessionFromBytes(data []byte, opts *SessionOptions) (*Session, error)

NewSessionFromBytes 从内存中的模型字节创建会话,适用于 go:embed 等无文件场景。

func (*Engine) NewSessionOptions

func (e *Engine) NewSessionOptions() (*SessionOptions, error)

NewSessionOptions 创建会话配置。

func (*Engine) NewTensor

func (e *Engine) NewTensor(shape []int64, data any) (*Value, error)

NewTensor 在指定引擎上初始化 Tensor。

func (*Engine) Version

func (e *Engine) Version() Version

Version 返回加载的运行时版本,例如 "1.23.2"。

func (*Engine) VersionString

func (e *Engine) VersionString() string

VersionString 返回加载的运行时版本字符串,例如 "1.23.2"。

type EnvHandle

type EnvHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type ErrorCode

type ErrorCode int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

const (
	ErrOK                             ErrorCode = 0
	ErrFail                           ErrorCode = 1
	ErrInvalidArgument                ErrorCode = 2
	ErrNoSuchFile                     ErrorCode = 3
	ErrNoModelLoaded                  ErrorCode = 4
	ErrEngineError                    ErrorCode = 5
	ErrRuntimeException               ErrorCode = 6
	ErrInvalidProtobuf                ErrorCode = 7
	ErrModelLoaded                    ErrorCode = 8
	ErrNotImplemented                 ErrorCode = 9
	ErrInvalidFileFormat              ErrorCode = 10
	ErrFileExists                     ErrorCode = 11
	ErrPermissionDenied               ErrorCode = 12
	ErrRuntimeOptimizationUnavailable ErrorCode = 13
	ErrExternalDataNotAccessible      ErrorCode = 15
)

ErrorCode OrtStatus 错误码。

type ExecutionMode

type ExecutionMode int32

ExecutionMode 会话执行模式(SessionOptions.SetExecutionMode)。

const (
	ExecutionModeSequential ExecutionMode = 0
	ExecutionModeParallel   ExecutionMode = 1
)

type GraphOptimizationLevel

type GraphOptimizationLevel int32

GraphOptimizationLevel 图优化级别(SessionOptions.SetGraphOptimizationLevel)。

const (
	GraphOptimizationLevelNone      GraphOptimizationLevel = 0
	GraphOptimizationLevelBasic     GraphOptimizationLevel = 1
	GraphOptimizationLevelExtended  GraphOptimizationLevel = 2
	GraphOptimizationLevelAll       GraphOptimizationLevel = 99
	GraphOptimizationLevelEnableAll GraphOptimizationLevel = 99
)

type LoggingLevel

type LoggingLevel int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

const (
	LogVerbose LoggingLevel = 0
	LogInfo    LoggingLevel = 1
	LogWarning LoggingLevel = 2
	LogError   LoggingLevel = 3
	LogFatal   LoggingLevel = 4
)

LoggingLevel 日志级别。

type MemType

type MemType int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type MemoryInfoHandle

type MemoryInfoHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type Number

type Number interface {
	~int8 | ~int16 | ~int32 | ~int64 |
		~uint8 | ~uint16 | ~uint32 | ~uint64 |
		~float32 | ~float64
}

Number 是 GetTensorData 支持的数值类型集合。

type OnnxType

type OnnxType int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

const (
	OnnxTypeUnknown      OnnxType = 0
	OnnxTypeTensor       OnnxType = 1
	OnnxTypeSequence     OnnxType = 2
	OnnxTypeMap          OnnxType = 3
	OnnxTypeOpaque       OnnxType = 4
	OnnxTypeSparseTensor OnnxType = 5
	OnnxTypeOptional     OnnxType = 6
)

OnnxType Value 的类别。

type Option

type Option func(*engineConfig)

Option 引擎配置选项。

func WithEnvName

func WithEnvName(name string) Option

WithEnvName 指定 CreateEnv 的 logid,默认 DefaultEnvName。

func WithLibraryPath

func WithLibraryPath(path string) Option

WithLibraryPath 指定 onnxruntime 动态库路径,默认 DefaultLibraryPath()。

func WithStrictVersion

func WithStrictVersion(strict bool) Option

WithStrictVersion 开启严格版本模式:加载高于已验证上限(1.31)的 onnxruntime 时 拒绝启动而不是仅警告。默认关闭。

type RunOptionsHandle

type RunOptionsHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type Session

type Session struct {
	Inputs  []TensorInfo
	Outputs []TensorInfo
	// contains filtered or unexported fields
}

Session 推理会话。

func (*Session) Destroy

func (s *Session) Destroy()

Destroy 释放会话。必须先于 Engine.Destroy 调用。

func (*Session) Run

func (s *Session) Run(inputs map[string]*Value) (map[string]*Value, error)

Run 执行推理。inputs 的 key 为输入名(见 Session.Inputs),返回的 Value 由调用方负责 Destroy。

type SessionHandle

type SessionHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type SessionOptions

type SessionOptions struct {
	// contains filtered or unexported fields
}

SessionOptions 会话配置。

func (*SessionOptions) AddConfigEntry

func (o *SessionOptions) AddConfigEntry(key, value string) error

AddConfigEntry 添加会话配置项,等价于 C API 的 OrtSessionOptionsAddSessionConfigEntry。

可设置任意 session.* 键值,例如消除空闲时的自旋占用:

opts.AddConfigEntry("session.intra_op.allow_spinning", "0")

常用键见 onnxruntime 文档(inter_op / intra_op / cpu.* 等命名空间)。 需要在创建 Session 之前调用。

func (*SessionOptions) AddFreeDimensionOverride

func (o *SessionOptions) AddFreeDimensionOverride(denotation string, dim int64) error

AddFreeDimensionOverride 按维度符号(denotation)固化动态维度。

func (*SessionOptions) AddFreeDimensionOverrideByName

func (o *SessionOptions) AddFreeDimensionOverrideByName(name string, dim int64) error

AddFreeDimensionOverrideByName 按维度名固化模型的动态维度。

动态模型(如 YOLO)的输入维度常以 -1 出现,在创建 Session 前按维度名覆盖即可消除动态维:

opts, _ := engine.NewSessionOptions()
opts.AddFreeDimensionOverrideByName("batch", 1)
session, _ := engine.NewSession("yolo11n.onnx", opts)

func (*SessionOptions) Destroy

func (o *SessionOptions) Destroy()

Destroy 释放会话配置。

func (*SessionOptions) EnableCUDA

func (o *SessionOptions) EnableCUDA(options map[string]string) error

EnableCUDA 启用 CUDA,options 为 CUDA Provider 的键值配置,可为 nil。

启用前可用 IsProviderAvailable(ProviderCUDA) 判断当前库是否包含 CUDA EP; 依赖环境(CUDA 运行库、驱动)不满足时,错误信息原样透出。

常用键:

device_id                    = "0"                指定显卡,默认 0
cudnn_conv_algo_search       = "HEURISTIC"        卷积算法搜索,默认 EXHAUSTIVE
cudnn_conv_use_max_workspace = "1"                卷积使用最大 workspace,默认 1
enable_cuda_graph            = "1"                输入 shape 固定时启用 CUDA Graph,默认 0
gpu_mem_limit                = "4294967296"       显存上限(字节),默认不限制
arena_extend_strategy        = "kSameAsRequested" 显存池扩展策略,默认 kNextPowerOfTwo

func (*SessionOptions) EnableTensorRT

func (o *SessionOptions) EnableTensorRT(options map[string]string) error

EnableTensorRT 启用 TensorRT,options 为 TensorRT Provider 的键值配置,可为 nil。

与 CUDA 一样用 device_id 指定显卡,从 0 开始计数,默认 0:

opts.EnableTensorRT(map[string]string{"device_id": "1"})

常用键:

trt_fp16_enable         = "1"     启用 FP16,CV 推理加速明显
trt_int8_enable         = "1"     启用 INT8
trt_engine_cache_enable = "1"     缓存引擎,避免每次构建耗时
trt_engine_cache_path   = "./trt" 引擎缓存目录

Execution Provider 按挂载顺序优先生效,需同时使用 CUDA 兜底时先调用本方法, 且两者的 device_id 应指向同一张卡:

opts.EnableTensorRT(map[string]string{"device_id": "1", "trt_fp16_enable": "1"})
opts.EnableCUDA(map[string]string{"device_id": "1"})

func (*SessionOptions) SetCpuMemArena

func (o *SessionOptions) SetCpuMemArena(useArena bool) error

SetCpuMemArena 设置 CPU 内存池策略:

false: 禁用内存池,推理速度稍慢,但 Destroy 后立即归还内存给 OS
true:  启用内存池,推理速度最快,但 Destroy 后内存会被缓存以供复用(默认)

func (*SessionOptions) SetExecutionMode

func (o *SessionOptions) SetExecutionMode(mode ExecutionMode) error

SetExecutionMode 设置执行模式(顺序 / 并行)。

func (*SessionOptions) SetGraphOptimizationLevel

func (o *SessionOptions) SetGraphOptimizationLevel(level GraphOptimizationLevel) error

SetGraphOptimizationLevel 设置图优化级别。

func (*SessionOptions) SetInterOpNumThreads

func (o *SessionOptions) SetInterOpNumThreads(num int32) error

SetInterOpNumThreads 设置算子间并行线程数。

func (*SessionOptions) SetIntraOpNumThreads

func (o *SessionOptions) SetIntraOpNumThreads(num int32) error

SetIntraOpNumThreads 设置算子内并行线程数。

func (*SessionOptions) SetLogSeverityLevel

func (o *SessionOptions) SetLogSeverityLevel(level LoggingLevel) error

SetLogSeverityLevel 设置会话日志级别。

type SessionOptionsHandle

type SessionOptionsHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type StatusHandle

type StatusHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type TensorElementDataType

type TensorElementDataType int32

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

const (
	TensorElementDataTypeUndefined      TensorElementDataType = 0
	TensorElementDataTypeFloat          TensorElementDataType = 1
	TensorElementDataTypeUint8          TensorElementDataType = 2
	TensorElementDataTypeInt8           TensorElementDataType = 3
	TensorElementDataTypeUint16         TensorElementDataType = 4
	TensorElementDataTypeInt16          TensorElementDataType = 5
	TensorElementDataTypeInt32          TensorElementDataType = 6
	TensorElementDataTypeInt64          TensorElementDataType = 7
	TensorElementDataTypeString         TensorElementDataType = 8
	TensorElementDataTypeBool           TensorElementDataType = 9
	TensorElementDataTypeFloat16        TensorElementDataType = 10
	TensorElementDataTypeDouble         TensorElementDataType = 11
	TensorElementDataTypeUint32         TensorElementDataType = 12
	TensorElementDataTypeUint64         TensorElementDataType = 13
	TensorElementDataTypeComplex64      TensorElementDataType = 14
	TensorElementDataTypeComplex128     TensorElementDataType = 15
	TensorElementDataTypeBFloat16       TensorElementDataType = 16
	TensorElementDataTypeFloat8E4M3FN   TensorElementDataType = 17
	TensorElementDataTypeFloat8E4M3FNUZ TensorElementDataType = 18
	TensorElementDataTypeFloat8E5M2     TensorElementDataType = 19
	TensorElementDataTypeFloat8E5M2FNUZ TensorElementDataType = 20
	TensorElementDataTypeUint4          TensorElementDataType = 21
	TensorElementDataTypeInt4           TensorElementDataType = 22
	TensorElementDataTypeFloat4E2M1     TensorElementDataType = 23
)

TensorElementDataType ONNX Tensor 元素类型。

type TensorInfo

type TensorInfo struct {
	Name     string
	DataType TensorElementDataType
	Shape    []int64
}

TensorInfo 描述一个输入 / 输出张量的元信息。

func (TensorInfo) ElementCount

func (t TensorInfo) ElementCount() (int64, bool)

ElementCount 返回 Shape 各维度的乘积。含动态维度(-1)或溢出时第二个返回值为 false。

type TensorRTProviderOptionsV2Handle

type TensorRTProviderOptionsV2Handle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type TensorTypeAndShapeInfoHandle

type TensorTypeAndShapeInfoHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type TypeInfoHandle

type TypeInfoHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type Value

type Value struct {
	// contains filtered or unexported fields
}

Value 是 ONNX Runtime 的 OrtValue 包装,当前仅支持 Tensor。

func NewTensor

func NewTensor(shape []int64, data any) (*Value, error)

NewTensor 初始化 Tensor(使用 NewEngine 设置的默认引擎)。

Params:

shape: 形状
data: 数据,支持 []float32 / []float64 / []int64 / []int32 / []int16 / []int8 /
      []uint64 / []uint32 / []uint16 / []uint8 / []bool

onnxruntime 不会拷贝 data,只持有其指针,数据有效性由返回的 Value 托管。 调用 Value.Destroy() 后,由 GetTensorData 取到的切片随之失效。

func (*Value) Destroy

func (v *Value) Destroy()

Destroy 释放 Value。

func (*Value) GetElementCount

func (v *Value) GetElementCount() (int, error)

GetElementCount 获取 Tensor 中的元素总数。

func (*Value) GetShape

func (v *Value) GetShape() ([]int64, error)

GetShape 获取 Tensor 的维度信息。返回的是内部缓存切片本身,调用方不应修改其内容。

type ValueHandle

type ValueHandle uintptr

句柄与枚举类型定义,对应 onnxruntime C API 的 opaque 指针与 enum。

type Version

type Version struct {
	Major uint32
	Minor uint32
	Patch uint32
}

Version 表示解析后的 onnxruntime 版本。

func (Version) String

func (v Version) String() string

Directories

Path Synopsis
examples
yolo command
YOLO11 检测命令行示例。
YOLO11 检测命令行示例。
internal
sys

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL