Help us shape the future of Go! Take the 2026 Go Developer Survey

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