Skip to main content

Pipeline Builder Quickstart

Preview

Core operators (detection, classification, pose, segmentation, tracking) are stable. Cascade (op.foreach, op.croproi) and streaming APIs are still in development.

The Voyager SDK Pythonic API lets you build high-performance ML pipelines that run on the Axelera Metis AIPU. There are two main steps: compile your model to a .axm file, then build a pipeline around it.

Ultralytics already supports int8 export and inference -- the advantage of the Voyager SDK is end-to-end pipeline optimization. Pre- and postprocessing run as optimized C/C++ operators alongside model inference, and the runtime dispatches across the Metis AIPU and host accelerators as heterogeneous compute. The Pythonic API exposes all of this without requiring you to manage hardware dispatch manually.

Quick Example

# --- Step 1: Compile (one-time) ---
# Easiest path: Ultralytics export
from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="axelera")
# Output: yolo11n_axelera_model/yolo11n.axm

# --- Step 2: Run (your application) ---
from axelera.runtime import op
import cv2

pipeline = op.seq(
op.letterbox(640, 640),
op.totensor(),
op.load("yolo11n_axelera_model/yolo11n.axm"),
op.decode_detections(algo="yolov8", num_classes=80),
op.nms(),
op.to_image_space(),
op.axdetection(class_id_type=op.CocoClasses),
)

image = cv2.imread("photo.jpg")
detections = pipeline(image)

for det in detections:
print(f"{det.class_name}: {det.score:.2f} at {det.bbox}")

Where to Go Next

I already have a .axm file -- jump to the Pipeline Overview for full examples covering detection, classification, pose estimation, segmentation, tracking, and cascades.

I need to compile my model first -- see Model Compilation for the Ultralytics path, the generic ONNX/PyTorch path, and how to validate accuracy before deploying.

What is .axm?

An .axm (Axelera Model) file is a compiled int8 neural network for the Metis AIPU. It is the output of the compiler (either via model.export(format="axelera") or the compiler.compile() API). When loaded with op.load(), it runs the model and returns raw numpy output tensors. You build the surrounding pipeline (preprocessing, decoding, NMS, etc.) yourself.

What is .axe?

An .axe (Axelera Executable) file is a bundled pipeline: a ZIP archive containing a model (.axm) plus its preprocessing and postprocessing configuration. When loaded with op.load(), you get a ready-to-run pipeline -- no need to add operators around it:

# .axe -- everything is bundled
detector = op.load("yolov8n-coco.axe")
detections = detector(image)