ONNX-Runtime-Tensor-Modul
Dieses Modul ist in Versionen nach 20260402 verfügbar
Diese Seite beschreibt die wichtigsten Tensor-Funktionen und Objektmethoden des Moduls onnxruntime.
Erstellung und Konvertierung
onnxruntime.tensor(type, shape[, data])
tensor, err = onnxruntime.tensor("float32", {1, 3}, {1, 2, 3})
Erstellt einen gewöhnlichen ORT-Tensor.
typeist der Name des Elementtyps.shapeist das Shape-Array.datakann entfallen; ohnedatawird ein leerer Tensor erstellt.- Für numerische Tensoren kann ein Skalar übergeben werden, der den gesamten Tensor füllt.
- Für
string-Tensoren kann eine einzelne Zeichenkette übergeben werden, die den gesamten Tensor füllt.
onnxruntime.tensor_from_bytes(type, shape, bytes)
tensor, err = onnxruntime.tensor_from_bytes("float32", {1, 3}, raw_bytes)
Erstellt einen Tensor aus zusammenhängenden Rohbytes.
- Unterstützt nur numerische und
bool-Typen. - Die Byte-Länge muss exakt zu
shapeundtypepassen.
onnxruntime.tensor_from_cv_mat(mat[, opts])
tensor, err = onnxruntime.tensor_from_cv_mat(mat, {
layout = "hwc",
channel_order = "rgb",
type = "uint8",
})
Wandelt cv.mat in einen Tensor um.
Hinweise:
- Zuerst
require("image.cv")ausführen. opts.typeist der Elementtyp des Ziel-Tensors.
onnxruntime.tensor_from_quad(mat, quad[, opts])
tensor, err = onnxruntime.tensor_from_quad(mat, {
{x = 0, y = 0},
{x = 100, y = 0},
{x = 100, y = 32},
{x = 0, y = 32},
}, {
width = 100,
height = 32,
layout = "hwc",
channel_order = "rgb",
type = "uint8",
})
Schneidet aus cv.mat perspektivisch einen viereckigen Bereich aus und gibt direkt einen ORT-Tensor zurück.
- Zuerst
require("image.cv")ausführen. quadkann direkt vier Punkte oder eine Tabelle mit dem Feldpointserhalten.- Die üblichen
optsentsprechen im Wesentlichentensor_from_image(); zusätzliche häufige Felder sindcontent_width,content_heightundborder_type. - Geeignet zum Begradigen und Tensorisieren einzelner Boxen vor der OCR-Erkennung.
onnxruntime.tensor_from_quads(mat, quads[, opts])
batch_tensor, err = onnxruntime.tensor_from_quads(mat, {
{
points = quad1,
content_width = 96,
content_height = 32,
},
{
points = quad2,
content_width = 80,
content_height = 32,
},
}, {
width = 96,
height = 32,
resize_mode = "top_left_letterbox",
border_type = "replicate",
})
Schneidet mehrere Vierecke als Batch aus und fügt sie automatisch zu einem Batch-Tensor zusammen.
- Zuerst
require("image.cv")ausführen. quadsmuss ein nicht leeres Array sein; jedes Element kannpointsenthalten.content_widthundcontent_heighteines Elements überschreiben die gleichnamigen globalen Felder inopts.- Der Rückgabewert wird je nach Ergebnis-Rang automatisch mit
stack()oderconcat()zu einem Batch zusammengesetzt und eignet sich für OCR mit mehreren Boxen.
onnxruntime.tensor_from_image(image[, opts])
tensor, preprocess_info = onnxruntime.tensor_from_image(image, {
width = 224,
height = 224,
layout = "nchw",
channel_order = "rgb",
data_type = "float32",
scale = 1 / 255,
mean = {0.485, 0.456, 0.406},
std = {0.229, 0.224, 0.225},
resize_mode = "letterbox",
})
Wandelt ein Bildobjekt direkt in einen von ONNX Runtime verwendbaren Eingabetensor um.
Häufige Konfigurationsfelder:
width/heightlayout:"nchw"、"nhwc"、"chw"、"hwc"channel_order:"rgb"、"bgr"、"gray"、"grey"、"grayscale"data_typescalemeanstdresize_mode:"stretch"、"letterbox"、"center_crop"letterbox_mode: Unterstützt"top_left"; alle anderen Werte verwenden zentriertes Padding.pad_colorinterpolation:"bilinear"、"nearest"alpha_mode:"ignore"、"white"、"black"、"premultiply"crop = {x, y, width, height}add_batch
Bei Erfolg ist der zweite Rückgabewert eine Tabelle mit Vorverarbeitungsinformationen, darunter:
src_width/src_heightcrop_x/crop_y/crop_width/crop_heightdst_width/dst_heightresized_width/resized_heightlayoutchannel_orderresize_modescale_x/scale_y/ratiooffset_x/offset_ypad_left/pad_top/pad_right/pad_bottom
onnxruntime.tensor_from_images(images[, opts])
batch_tensor, batch_metadata = onnxruntime.tensor_from_images({img1, img2}, {
width = 640,
height = 640,
layout = "nchw",
})
Wandelt eine Gruppe von Bildern als Batch in Tensoren um.
- Die Originalbilder dürfen unterschiedliche Abmessungen haben.
- Solange Shape und
data_typeder analysierten Ausgabe jedes Bildes übereinstimmen, können sie zu einem Batch verbunden werden. - Der zweite Rückgabewert ist ein Metadatenarray in Eingabereihenfolge.
onnxruntime.image_from_tensor(tensor[, opts])
image, err = onnxruntime.image_from_tensor(tensor, {
layout = "nchw",
channel_order = "rgb",
batch_index = 1,
scale = 1 / 255,
mean = {0.485, 0.456, 0.406},
std = {0.229, 0.224, 0.225},
value_range = "0_1",
})
Wandelt einen 2D-/3D-/4D-Tensor zurück in ein Bildobjekt, was zum Debuggen von Modell-Ein- und -Ausgaben geeignet ist.
Häufige Konfigurationsfelder:
layoutchannel_orderbatch_index: 1-basiert, standardmäßig der erste Batch (1).scalemeanstdclampvalue_range:"0_255"oder"0_1".
Hinweise:
- Unterstützt nur 2D-/3D-/4D-Tensoren.
- Unterstützt nur
1oder3Kanäle.
Tensor-Objektmethoden
Grundlegende Informationen
tensor:shape()tensor:rank()tensor:size()tensor:type()tensor:to_table()tensor:bytes()
Hinweise:
to_table()expandiert den Inhalt in eine Lua-Tabelle.bytes()unterstützt nur numerische undbool-Tensoren.
Lesen, Schreiben und Kopieren
tensor:get(index1[, index2, ...])tensor:set(index1[, index2, ...], value)tensor:fill(value_or_table)tensor:clone()tensor:copy_from_bytes(raw_bytes)tensor:to(type)
Hinweise:
fill()füllt bei einem Skalar den gesamten Tensor; bei einer Tabelle muss die Elementanzahl exakt übereinstimmen.copy_from_bytes()unterstützt nur numerische undbool-Tensoren; die Byte-Länge muss exakt passen.- Die Indizes von
get()/set()sind 1-basiert. tensor:to("string")unterstützt derzeit nurstring -> string.
Shape und Indizes
tensor:reshape(shape)tensor:transpose([axes])tensor:flatten([start_dim[, end_dim]])tensor:squeeze([dim])tensor:unsqueeze(dim)tensor:slice(dim, start, stop[, step])tensor:select(dim, index)tensor:gather(dim, indices)
Hinweise:
startundstopvonslice()sind 1-basiert und schließen die Endposition ein.stepvonslice()muss eine positive Ganzzahl sein.select()entfernt die ausgewählte Dimension.indicesvongather()kann ein Lua-Array oder ein Tensor mit Shape[N]sein; auch hier sind die Indizes 1-basiert.- Diese Methoden geben jeweils neue Tensorobjekte zurück.
Numerische Operationen
tensor:add(other)tensor:sub(other)tensor:mul(other)tensor:div(other)tensor:clamp(min, max)tensor:sigmoid()tensor:exp()tensor:matmul(other)tensor:dot(other)
Hinweise:
otherkann ein Skalar oder ein Tensor mit passendem Shape sein.matmul()unterstützt derzeit Kombinationen aus Rank-1- und Rank-2-Tensoren.- Die Rückgabewerte von
sigmoid()/exp()/matmul()werden auf einen Gleitkomma-Ergebnistyp angehoben. - Keine der obigen Operationen unterstützt
string-Tensoren.
Reduktion, Sortierung und Wahrscheinlichkeiten
tensor:argmax([axis])tensor:sum([axis])tensor:mean([axis])tensor:max([axis])tensor:min([axis])tensor:softmax([axis])tensor:normalize([axis])tensor:sort([axis[, descending]])tensor:topk(k[, axis])
Hinweise:
- Ohne Achse gibt
argmax()einen einzelnen 1-basierten Index zurück. argmax(axis)gibt einenint64-Tensor zurück; auch seine Indizes sind 1-basiert.sort()gibt{ values = tensor, indices = tensor }zurück.topk()gibt{ values = tensor, indices = tensor }zurück.- Die von
sort()/topk()zurückgegebenen Indizes sind 1-basiert.
OpenCV-Bridge
tensor:to_cv_mat([opts])
mat, err = tensor:to_cv_mat({
layout = "hwc",
channel_order = "rgb",
coreml_data_type = "uint8",
})
Hinweise:
- Zuerst
require("image.cv")ausführen. - Einige Tensor-Typen lassen sich nicht direkt auf
cv.matabbilden; in diesem Fall musscoreml_data_typeexplizit angegeben werden.
Tensor-Hilfen auf Modulebene
Grundlegende numerische Hilfen
onnxruntime.clamp(tensor, min, max)onnxruntime.sigmoid(tensor)onnxruntime.exp(tensor)onnxruntime.where(condition, x, y)onnxruntime.matmul(lhs, rhs)onnxruntime.concat(tensors[, axis])onnxruntime.stack(tensors[, axis])
Hinweise:
clamp(),sigmoid(),exp()undmatmul()verwenden dieselbe Implementierung wie die entsprechendentensor:-Methoden.where()unterstützt die Mischung aus Skalaren, Booleans und Tensoren und berechnet das Ergebnis nach den Broadcast-Regeln.
Weitere Nachverarbeitungshilfen
onnxruntime.mask_iou(lhs_mask, rhs_mask)onnxruntime.db_postprocess(score_map[, opts])
Hinweise:
mask_iou()berechnet direkt die Intersection-over-Union zweier Masken.mask_iou()unterstützt außerdem das dritte Argumentopts, entweder mitcompare_size = trueoder explizit mitwidth/heightals ausgerichteten Vergleichsabmessungen.db_postprocess()eignet sich für Texterkennungs-Nachverarbeitung wie DB / DBNet; Eingaben mit[H, W],[C, H, W]oder[N, C, H, W]werden unterstützt.db_postprocess()gibt ein Detection-Array zurück, dessen Elementescore,pointsundboxenthalten;meta/image_metakann direkt aus der Bildtensorisierung wiederverwendet werden.
onnxruntime.nms(boxes, scores[, opts])
NMS für gewöhnliche Rechteckboxen.
Häufige Optionen:
iou_thresholdscore_thresholdtop_kclass_awareclass_ids
Der Rückgabewert ist ein int64-Tensor mit 1-basierten Indizes.
onnxruntime.box_points(rotated_boxes)
Wandelt die Rotationsbox [cx, cy, w, h, theta] in die Koordinaten ihrer vier Eckpunkte um.
- Die Eingabe kann ein Tensor mit Shape
[5],[1, 5]oder[N, 5]sein. - Für eine einzelne Box wird eine Lua-Punkttabelle, für mehrere Boxen ein Array von Punkttabellen zurückgegeben.
onnxruntime.xywh_to_xyxy(boxes)
Wandelt Rechteckboxen von [cx, cy, w, h] in [x1, y1, x2, y2] um.
onnxruntime.xyxy_to_xywh(boxes)
Wandelt Rechteckboxen von [x1, y1, x2, y2] in [cx, cy, w, h] um.
onnxruntime.rotated_iou(box1, box2)
Berechnet die IoU zweier Rotationsboxen.
onnxruntime.rotated_nms(boxes, scores[, opts])
NMS für Rotationsboxen. Der Rückgabewert ist ebenfalls ein int64-Tensor mit 1-basierten Indizes.
boxesmuss ein Rotationsbox-Tensor mit Shape[N, 5]sein.scoreskann ein Lua-Array oder ein Tensor mit Shape[N]/[N, 1]sein.
onnxruntime.create_decoder(schema)
Erstellt ein wiederverwendbares Decoderobjekt.
- Das Decoderobjekt unterstützt
:decode(output[, opts]),:task()und:schema(). - Geeignet, um das Schema von Detection-/OBB-/Klassifikationsausgaben festzulegen und wiederzuverwenden.
onnxruntime.decode_yolo(output[, opts])
Dekodiert direkt nach der integrierten YOLO-Detection-Logik und gibt eine Liste von Detection-Records zurück.
onnxruntime.decode_yolo_obb(output[, opts])
Dekodiert direkt nach der integrierten YOLO-OBB-Logik und gibt eine Liste von Detection-Records für Rotationsboxen zurück.
onnxruntime.decode_matrix_candidates(output, schema[, opts])
Teilt eine Matrixausgabe nach dem Schema in eine Tabelle von Kandidatentensoren auf. Übliche Rückgabefelder sind:
boxesscoresclass_idskeep_indicesselected_rowsangles(nur für OBB und verwandte Schemas)
onnxruntime.decode_dense_detection(output, opts)
Dekodiert die Ausgabe eines dichten Detection-Heads zu:
boxesscoreslabels
Dabei sind boxes / scores / labels Tensoren.
- Unterstützte Eingabe-Shapes sind
[R, C]und[N, R, C]. opts.stridesist erforderlich und muss ein nicht leeres Array positiver Ganzzahlen sein.decode_widthunddecode_heightsind ebenfalls erforderlich.- Derzeit wird nur
box_encoding = "grid_center_log_wh"unterstützt. - Weitere häufige Felder sind
box_offset,score_offset,class_offset,num_classesundscore_threshold. - Bei einer gebatchten Ausgabe ist der Rückgabewert ein nach Batch organisiertes Lua-Array.
onnxruntime.records_from_boxes(boxes, scores, class_ids[, keep_indices])
Bereitet Tensoren mit [N, 4]-Boxen, Scores und Klassen als Lua-Recordliste auf; jedes Element enthält typischerweise:
boxscoreclass_idrow_indexx1/y1/x2/y2width/heightcx/cy
onnxruntime.obb_records_from_rows(rows, scores, class_ids[, angles[, keep_indices[, opts]]])
Bereitet OBB-Zeilendaten als Lua-Recordliste auf.
optsunterstütztx_index,y_index,width_indexundheight_index.
onnxruntime.points_to_records(points[, opts])
Bereitet Punkt-/Keypoint-Tensoren mit [N, P, D] oder [N, P*D] als Lua-Tabelle auf.
optsunterstütztpoint_count/keypoint_count.optsunterstütztpoint_dim/keypoint_dim.
Maskenhilfen
onnxruntime.threshold_masks(masks, threshold)
Wandelt einen kontinuierlichen Maskentensor anhand eines Schwellenwerts in eine Liste von Lua-Maskentabellen um. Jede Maske enthält:
widthheightbitspixel_countbounds
onnxruntime.crop_masks_by_boxes(masks, boxes)
Schneidet die thresholded Maskenliste anhand von [N, 4]-Boxen aus.
onnxruntime.resize_masks(masks, width, height[, opts])
Skaliert die Maskenliste auf die angegebene Größe.
- Derzeit wird nur
opts.interpolation = "nearest"unterstützt.
onnxruntime.mask_to_polygon(mask[, opts])
Wandelt eine einzelne binäre Maske in eine Punktliste eines Polygons um.
opts.epsilon/opts.approx_epsilonkönnen zur approximativen Vereinfachung verwendet werden.
onnxruntime.proto_masks(proto, coeffs, boxes, image_width, image_height[, opts])
Projiziert Prototypmasken, Maskenkoeffizienten und Detection-Boxen auf die Zielbildgröße zurück.
project_masks()ist ein Alias dafür.- Der Rückgabewert ist eine Liste von Lua-Maskentabellen, kein Tensor.
Keypoint- und Geometriehilfen
onnxruntime.reshape_keypoints(points[, keypoint_count[, keypoint_dim|opts]])onnxruntime.scale_boxes(boxes, transform)onnxruntime.clip_boxes(boxes, clip_width, clip_height)onnxruntime.scale_points(points, transform[, opts])onnxruntime.scale_keypoints(points, transform[, opts])onnxruntime.clip_keypoints(points, clip_width, clip_height[, opts])
Hinweise:
reshape_keypoints()unterstützt die Umformung zwischen[N, K*D]und[N, K, D].scale_points()interpretiert standardmäßig ein gewöhnliches Punktlayout;scale_keypoints()standardmäßig ein Keypoint-Layout.- Die zu
transformgehörige Tabelle entspricht den Metadatenfeldern der Bildvorverarbeitung; häufige Felder sindscale_x,scale_y,pad_leftundpad_top.
onnxruntime.tracker([opts])
Erstellt ein wiederverwendbares Trackerobjekt mit:
tracker:update(detections[, timestamp])tracker:reset()tracker:state()tracker:close()
Häufige Konfigurationsfelder:
iou_thresholdmax_agemin_hits
onnxruntime.ctc_greedy_decode(logits[, opts])
Gibt eine Struktur der Form zurück:
-
indices -
text -
confidence -
Unterstützte Eingabe-Shapes sind
[T, C]und[N, T, C]. -
Unterstützt
blank_index,merge_repeated,apply_softmax,return_probabilitiesundcharset. -
indiceswird immer zurückgegeben. -
textwird nur bei übergebenemcharsetzurückgegeben. -
confidencewird nur bei aktiviertemapply_softmaxoderreturn_probabilitieszurückgegeben. -
probabilitiesundprobability_confidencewerden nur bei aktiviertemreturn_probabilitieszusätzlich zurückgegeben. -
Bei einer Batch-Eingabe wird ein Batch-Ergebnisarray zurückgegeben.
onnxruntime.sample_logits(logits[, opts])
Unterstützt folgende Sampling-Parameter:
argmaxtemperaturetop_ktop_pmin_pseed
1D-Logits geben einen einzelnen Index zurück; mehrzeilige Logits geben einen int64-Tensor zurück, dessen Indizes 1-basiert sind.
Beispiel
local ort = require("onnxruntime")
local tensor = assert(ort.tensor("float32", {2, 3}, {
1, 9, 3,
8, 2, 7,
}))
local sliced = assert(tensor:slice(2, 2, 3))
print(sliced:to_table()[1]) -- 9
local topk = assert(tensor:topk(2, 2))
print(topk.values:to_table()[1]) -- 9
print(topk.indices:to_table()[1]) -- 2