Модуль ONNX Runtime (onnxruntime)
Модуль доступен в версиях после 20260402.
Поддерживаются только системы iOS 13 и новее.
Модуль onnxruntime напрямую загружает и запускает ONNX-модели на устройстве; он подходит для текста, эмбеддингов, классификации, обнаружения и других задач инференса с тензорами.
Загрузка модуля
local ort = require("onnxruntime")
Это модуль, загружаемый по требованию, а не встроенный глобальный модуль, как coreml.
После успешного выполнения require("onnxruntime") во встроенный модуль coreml также добавляются два мостовых интерфейса:
coreml.multi_array_from_ort_tensor(tensor[, data_type])multi_array:to_ort_tensor([data_type])
Обе конвертации выполняют прямое копирование на уровне native, не проходя через Lua table.
Функции уровня модуля
Среда выполнения и основные сведения
onnxruntime.version()onnxruntime.providers()onnxruntime.configure(opts)
Описание:
providers()возвращает список Execution Provider, фактически доступных в текущей среде выполнения ORT.configure()задаёт глобальные значения по умолчанию; его необходимо вызвать до создания любой session.
Вспомогательные функции для тензоров, изображений и чисел
onnxruntime.tensor(type, shape[, data])onnxruntime.tensor_from_bytes(type, shape, bytes)onnxruntime.tensor_from_cv_mat(mat[, opts])onnxruntime.tensor_from_quad(mat, quad[, opts])onnxruntime.tensor_from_quads(mat, quads[, opts])onnxruntime.tensor_from_image(image[, opts])onnxruntime.tensor_from_images(images[, opts])onnxruntime.image_from_tensor(tensor[, opts])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])
Описание:
clamp(),sigmoid(),exp()иmatmul()эквивалентны одноимённым методамtensor:, но принимают tensor первым аргументом.where()поддерживает совместное использование скаляров, логических значений и tensor и формирует результат по правилам broadcasting.- Подробности предварительной обработки изображений, моста OpenCV и
image_from_tensor()см. в модуле тензоров.
Вспомогательные функции обнаружения, декодирования и постобработки
onnxruntime.nms(boxes, scores[, opts])onnxruntime.box_points(rotated_boxes)onnxruntime.xywh_to_xyxy(boxes)onnxruntime.xyxy_to_xywh(boxes)onnxruntime.rotated_iou(lhs_box, rhs_box)onnxruntime.rotated_nms(boxes, scores[, opts])onnxruntime.create_decoder(schema)onnxruntime.decode_yolo(output[, opts])onnxruntime.decode_yolo_obb(output[, opts])onnxruntime.decode_matrix_candidates(output, schema[, opts])onnxruntime.decode_dense_detection(output, opts)onnxruntime.records_from_boxes(boxes, scores, class_ids[, keep_indices])onnxruntime.obb_records_from_rows(rows, scores, class_ids[, angles[, keep_indices[, opts]]])onnxruntime.points_to_records(points[, opts])onnxruntime.threshold_masks(masks, threshold)onnxruntime.crop_masks_by_boxes(masks, boxes)onnxruntime.resize_masks(masks, width, height[, opts])onnxruntime.mask_iou(lhs_mask, rhs_mask)onnxruntime.mask_to_polygon(mask[, opts])onnxruntime.proto_masks(proto, coeffs, boxes, image_width, image_height[, opts])onnxruntime.project_masks(proto, coeffs, boxes, image_width, image_height[, opts])onnxruntime.db_postprocess(score_map[, opts])onnxruntime.tracker([opts])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])onnxruntime.ctc_greedy_decode(logits[, opts])onnxruntime.sample_logits(logits[, opts])
Описание:
- Для
tensor_from_quad()/tensor_from_quads()сначала требуетсяrequire("image.cv"); функции удобны для непосредственного создания тензоров после обрезки четырёхугольника для OCR. box_points()принимает tensor повёрнутой рамки формы[5],[1, 5]или[N, 5], а не пять отдельных скалярных параметров.create_decoder()возвращает объект decoder с поддержкой:decode(),:task()и:schema().tracker()возвращает объект tracker с поддержкой:update(),:reset(),:state()и:close().records_from_boxes(),obb_records_from_rows()иpoints_to_records()преобразуют результаты tensor в record table, более удобную для использования на стороне Lua.proto_masks()иproject_masks()сейчас используют одну реализацию; последний является лишь псевдонимом.mask_iou()напрямую вычисляет IoU двух mask. Функция также принимает третий аргументopts, которому можно передатьcompare_size = trueлибо явно задатьwidth/height.db_postprocess()подходит для постобработки обнаружения текста DB / DBNet; каждый возвращаемый элемент содержитscore,pointsиbox.decode_dense_detection()требует непустой массив положительных целых чиселopts.strides, а такжеdecode_widthиdecode_height; сейчас поддерживается толькоbox_encoding = "grid_center_log_wh".ctc_greedy_decode()поддерживаетblank_index,merge_repeated,apply_softmax,return_probabilitiesиcharset.ctc_greedy_decode()всегда возвращаетindices;textвозвращается только при передачеcharset;confidence— только при включенииapply_softmaxилиreturn_probabilities;probabilitiesиprobability_confidence— только при включенииreturn_probabilities.nms()/rotated_nms()возвращаютint64tensor с индексами 1-based.sample_logits()поддерживаетargmax,temperature,top_k,top_p,min_pиseed.- Для 1D logits
sample_logits()возвращает один индекс, а для batched logits —int64tensor.
Структурированные значения
onnxruntime.value(value)onnxruntime.optional(value, type_info)onnxruntime.sequence(items)onnxruntime.map(key_type, value_type, pairs)onnxruntime.sparse_tensor(type, dense_shape, indices, values)onnxruntime.sparse_tensor_from_dense(tensor)
Подходит для обработки входов и выходов, являющихся не только tensor, например optional, sequence, map и sparse tensor.
Текущее поведение можно обобщить так:
onnxruntime.value(x)Еслиxуже является ORT tensor / value / sequence / map / sparse tensor, он возвращается без изменений; Lua table обрабатывается какsequence, а скаляр оборачивается в tensor.onnxruntime.optional(value, type_info)Второй параметр обязателен;type_infoможет быть строкой или таблицей сведений о типе, возвращённойsession:input_info(...)/output_info(...); пустой optional обозначается какonnxruntime.optional(nil, type_info).onnxruntime.map(key_type, value_type, pairs)Сейчасkey_typeподдерживает только"string"и"int64".onnxruntime.sparse_tensor(type, dense_shape, indices, values)Сейчас поддерживаются только числовые /boolразреженные тензоры, создаваемые в формате COO;indicesможет быть плоским массивом или массивом координат.onnxruntime.sparse_tensor_from_dense(tensor)Сейчасstringtensor не поддерживается.
Распространённые методы объектов:
value:type()/value:has_value()/value:get()sequence:length()/sequence:get(i)/sequence:items()map:get(key)/map:set(key, value)/map:keys()/map:pairs()sparse_tensor:dense_shape()/sparse_tensor:values()/sparse_tensor:indices()/sparse_tensor:format()/sparse_tensor:to_dense()
Сеансы и инференс
onnxruntime.session(model_path[, opts])onnxruntime.session_from_bytes(model_bytes[, opts])onnxruntime.run_options([opts])onnxruntime.load_custom_op_library(path)
Объект session отвечает за загрузку модели, получение сведений о входах и выходах, выполнение инференса и IOBinding. См. модуль сеансов.
Поддерживаемые типы данных
Интерфейс тензоров поддерживает следующие названия типов элементов:
"float32"/"float""float16""bfloat16""uint8""uint16""uint32""uint64""int8""int16""int32""int64""double"/"float64""bool""string"
Описание:
tensor_from_bytes()иcopy_from_bytes()поддерживают только числовые типы иbool.bytes()не поддерживаетstringtensor.tensor:to("string")сейчас поддерживает толькоstring -> string.
Сведения о Provider
onnxruntime.providers() возвращает список provider, видимых среде выполнения, но параметры session сейчас нативно обрабатывают и поддерживают следующие строки provider:
"cpu""coreml"
Описание:
provider/providersтакже принимают псевдонимыCPUExecutionProviderиCoreMLExecutionProvider; внутри они нормализуются к"cpu"и"coreml".- Если provider явно не задан или список provider пуст, на этапе создания session автоматически добавляется CPU provider.
- Если список provider содержит
"coreml"иfallback_to_cpu = true, реализация также может добавить CPU как путь отката. - Передача
providers = {"coreml", "cpu"}означает сначала попробовать CoreML, затем CPU.
Интеграция с CoreML
Для повторного использования токенизатора coreml или процесса предварительной обработки MLMultiArray рекомендуется такая комбинация:
local ort = require("onnxruntime")
local tokenizer = assert(coreml.new_text_tokenizer({
type = "wordpiece",
vocab_path = XXT_HOME_PATH.."/models/demo/vocab.txt",
context_length = 52,
}))
local input_ids = assert(tokenizer:encode("hello", {
output = "ort_tensor",
}))
Либо существующий MLMultiArray можно напрямую преобразовать в ORT tensor:
local ort = require("onnxruntime")
local tensor = assert(multi_array:to_ort_tensor("int64"))