UH-OH

It looks like you don’t have access to that feature yet

Contact sales to get upgraded to the full DevStudio experience.

UH-OH

It looks like you don't have access to that feature yet.

Introduction to the Chimera SDK
Chimera SDK Quick Start Guide
Chimera SDK Command Line Interface (CLI)
Tutorial: Using SDK as a Library
Tutorials & Model Demos
Model Demos
Model Demo: Llama-2 15M (Baby Llama-2)
Model Demo: QWEN3 8B End-to-End CGC and ISS Execution
Model Demo: QWEN3 Prefill All Decoders
Model Demo: DeepSeek-R1-Distill-Qwen-1.5B End-to-End CGC and ISS Execution
Model Demo: QWEN3 Single Decoder
Model Demo: Qwen2.5-0.5B INT8 Quantization Pipeline
Model Demo: ConvNeXt Detection
Model Demo: QWEN3 Prefill Decoder Validation
Model Demo: ConvNeXt Segmentation
Model Demo: Classifiers Zoo
Model Demo: Detectors Zoo - MMDetection
Model Demo: Segmentors Zoo - MMSegmentation
Model Demo: Pose Estimators Zoo - MMPose
Model Demo: Detectors3D Zoo - MMDetection3D
MODEL Demo: Optical Character Recognition (OCR) Zoo - MMOCR
Model Demo: YOLOv3 Object Detection
Model Demo: YOLOv4 Object Detection
Model Demo: YOLOv5 Detection
Model Demo: YOLOv5 Detection and Segmentation
Model Demo: YOLOR Detection
Model Demo: YOLOX End-to-End Detection
Model Demo: YOLOv7 Detection
Model Demo: YOLOv8 Detection
Model Demo: YOLOv8 Pose Estimation
Model Demo: YOLOP Detection and Segmentation
Model Demo: QAT Vision Transformer (ViT)
Model Demo: QAT Swin Transformer
Model Demo: Mediapipe Face Pipeline
Demo: DOOM Renderer on Chimera GPNPU
Model Demo: Mediapipe Hand Pipeline
Model Demo: Whisper Tiny (Encoder + Decoder)
Model Demo: L2CS Fine-Grained Gaze Estimation
Model Demo: ASVspoof2021 LA Anti-Spoofing (LFCC-LCNN-BiLSTM)
Model Demo: UNET Tumor Segmentation
Model Demo: DETR Encoder
Model Demo: FFNet Segmentation
Model Demo: Centernet Detection
Model Demo: RetinaNet End-to-End Detection
Model Demo: Blazepose Pose Estimation
Model Demo: Pose Resnet Human Pose Estimation
Model Demo: MaskRCNN Detection and Segmentation
Model Demo: Keypoint R-CNN
Model Demo: Faster R-CNN Detection
Model Demo: FCOS Detection
Model Demo: DDRNet Classificationls
Model Demo: PI0.5 End-to-End VLA Inference
Model Demo: BEVFormer End-to-End 3D Detection
Multicore Demo
Chimera LLVM C++ Compiler
Chimera SDK Licensing Policy Documentation
Glossary
Chimera Software User GuideTutorials & Model DemosModel DemosModel Demo: YOLOP Detection and Segmentation

Model Demo: YOLOP Detection and Segmentation


NOTE: The Jupyter Notebook below is included in the Chimera SDK and can be run interactively by running the following CLI command:

$ quadric sdk notebook

From the Jupyter Notebook window in your browser, select the notebook named /quadric/sdk-cli/examples/models/yolo/yolop/yolop.ipynb.


YOLOP: You Only Look Once for Panoptic Driving Perception

Abstract

A panoptic driving perception system is an essential part of autonomous driving. A high-precision and real-time perception system can assist the vehicle in making the reasonable decision while driving. This model presents a panoptic driving perception network (YOLOP) to perform traffic object detection, drivable area segmentation and lane detection simultaneously. It is composed of one encoder for feature extraction and three decoders to handle the specific tasks. The model performs well on the BDD100K dataset.

Further information can be found in the following YOLOP Paper.

Set-Up

import matplotlib.pyplot as plt
import numpy as np
import onnx
from onnxruntime import InferenceSession
import os
from pathlib import Path
from PIL import Image
import torch
from torch.utils.data import Subset
from torchvision.transforms import Compose, Normalize, ToTensor
from torchvision.utils import draw_segmentation_masks

from examples.models.zoo.zoo_utils import download_file, onnx_check_and_simplify
import tvm.contrib.epu.chimera_job.constants as sdk_constants
from tvm.contrib.epu.chimera_job.chimera_job import ChimeraJob
from tvm.contrib.epu.chimera_job.hw_config import DEFAULT_32_ARRAY_SIZE, HWConfig
from sdk_cli.lib.inference import InferenceEngine, batch_inference
from sdk_cli.lib.quantize import (
    QuantizedONNXModel,
    quantize_onnx_model,
)
from sdk_cli.node_builtins.outputs.bbox_label_visualizer import draw_bbox
from sdk_cli.node_builtins.classical.yolo_postprocessing import (
    get_postprocess_handle,
    boxes_detections,
)
from sdk_cli.node_builtins.classical.resize_masks import resize_masks
from sdk_cli.utils.datasets import QuadricCalibration
from sdk_cli.utils.models.yolo import YOLOModelVariant
from sdk_cli.utils.transforms import ResizePad
from tvm.contrib.epu.onnx_util import cut_onnx

Install Images

url_path = "https://raw.githubusercontent.com/hustvl/YOLOP/main/inference/images/%s"
image_files = [
    "0ace96c3-48481887.jpg",
    "3c0e7240-96e390d2.jpg",
    "8e1c1ab0-a8b92173.jpg",
]

os.makedirs("images", exist_ok=True)

for image_file in image_files:
    if (Path("images") / image_file).exists():
        continue
    download_file(url_path % (image_file), f'{Path("images") / image_file}')
    print(f'Downloaded {Path("images") / image_file}.')
Downloaded images/0ace96c3-48481887.jpg.
Downloaded images/3c0e7240-96e390d2.jpg.
Downloaded images/8e1c1ab0-a8b92173.jpg.

Model Preparation

Load Model

MODEL_NAME = "yolop"

## load model
pytorch_model = torch.hub.load("hustvl/yolop", "yolop", pretrained=True, trust_repo=True)
Using cache found in /github/home/.cache/torch/hub/hustvl_yolop_main

Export ONNX

onnx_file = f"{MODEL_NAME}.onnx"
model_input_size = (640, 640)  # width x height

## Input
dummpy_input = torch.zeros(1, 3, *model_input_size[::-1], requires_grad=False)

input_edges = ["inputs0"]
output_edges = ["outputs0", "outputs1", "outputs2", "outputs3", "outputs4", "outputs5"]

torch.onnx.export(
    pytorch_model,  # model being run
    dummpy_input,  # model input (or a tuple for multiple inputs)
    onnx_file,  # where to save the model (can be a file or file-like object)
    export_params=True,  # store the trained parameter weights inside the model file
    do_constant_folding=True,  # whether to execute constant folding for optimization
    opset_version=sdk_constants.DEFAULT_ONNX_OPSET,
    input_names=input_edges,  # the model's input names
    output_names=output_edges,  # the model's output names
)

## Checks
print("\nStarting to simplify ONNX...")
onnx_model = onnx_check_and_simplify(onnx.load(onnx_file))

onnx.save(onnx_model, onnx_file)
print("ONNX export success, saved as %s" % onnx_file)
/usr/local/lib/python3.10/dist-packages/torch/functional.py:539: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /pytorch/aten/src/ATen/native/TensorShape.cpp:3637.)
  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]



Starting to simplify ONNX...
ONNX export success, saved as yolop.onnx

Extract Backbone and Head

## Cut the graph prior to the head(s)
intermediate_edges = [
    "/model.24/m.0/Conv_output_0",
    "/model.24/m.1/Conv_output_0",
    "/model.24/m.2/Conv_output_0",
    "/model.33/conv/Conv_output_0",
    "/model.42/conv/Conv_output_0",
]

backbone_onnx_model = cut_onnx(onnx_model, input_edges, intermediate_edges)
backbone_onnx_model = onnx_check_and_simplify(backbone_onnx_model)
backbone_onnx_file = Path(f"{MODEL_NAME}-backbone.onnx")
onnx.save(backbone_onnx_model, backbone_onnx_file)
print(f"Backbone ONNX is saved as {str(backbone_onnx_file)}")

head_onnx_model = cut_onnx(onnx_model, intermediate_edges, output_edges)
head_onnx_model = onnx_check_and_simplify(head_onnx_model)
head_onnx_file = Path(f"{MODEL_NAME}-head.onnx")
onnx.save(head_onnx_model, head_onnx_file)
print(f"Head ONNX is saved as {str(head_onnx_file)}")
Backbone ONNX is saved as yolop-backbone.onnx
Head ONNX is saved as yolop-head.onnx

Quantization

The model was trained on COCO Dataset with the image size (640, 640) and the image value range from 0.0 to 1.0.

dataset_mean, dataset_std = (0, 0, 0), (1, 1, 1)

transforms = Compose(
    [
        ResizePad(model_input_size),
        ToTensor(),
        Normalize(dataset_mean, dataset_std),
    ]
)

## Path to directory containing data to use for for numerical range calibration during quantization
## Data is used also used to compare accuracy of fp32 and int8 models
dataset = QuadricCalibration.Dataset(transform=transforms)

## NOTE: `coco-like` is the 0th index target for `QuadricCalibration.Dataset`
coco_like_data_indices = [index for index, target in enumerate(dataset.targets) if target == 0]
coco_like_subset_of_dataset = Subset(dataset, coco_like_data_indices)

quantized_onnx_model: QuantizedONNXModel = quantize_onnx_model(
    backbone_onnx_file, coco_like_subset_of_dataset, asymmetric_activation=True
)
print(
    f"quantized onnx: {quantized_onnx_model.model_path}, tranges file: {quantized_onnx_model.tensor_ranges_path}"
)
2026-07-18 12:18 - INFO - sdk - quantize - ONNX model shapes inferred.
2026-07-18 12:18 - DEBUG - sdk - quantize - Forcing node types: []
2026-07-18 12:18 - DEBUG - sdk - quantize - ONNX Node types excluded from quantization: ['Softmax', 'Sigmoid', 'QuadricCustomOp']
2026-07-18 12:18 - DEBUG - sdk - quantize - ONNX Node names excluded from quantization: ['', '/model.31/cv4/act/Add', '/model.13/cv4/act/Div', '/model.17/cv1/act/Add', '/model.4/cv4/act/Clip', '/model.9/cv1/act/Clip', '/model.9/m/m.0/cv2/act/Div', '/model.1/act/Mul', '/model.9/m/m.0/cv2/act/Add', '/model.20/m/m.0/cv1/act/Clip', '/model.23/cv1/act/Div', '/model.9/cv4/act/Mul', '/model.23/cv4/act/Mul', '/model.6/cv4/act/Mul', '/model.0/conv/act/Clip', '/model.17/cv1/act/Div', '/model.3/act/Add', '/model.4/m/m.1/cv1/act/Mul', '/model.4/m/m.2/cv1/act/Mul', '/model.6/m/m.1/cv2/act/Clip', '/model.23/cv4/act/Clip', '/model.6/cv1/act/Clip', '/model.3/act/Mul', '/model.17/m/m.0/cv2/act/Mul', '/model.9/m/m.0/cv1/act/Mul', '/model.28/act/Add', '/model.4/m/m.1/cv2/act/Mul', '/model.4/m/m.1/cv2/act/Clip', '/model.9/m/m.0/cv2/act/Clip', '/model.17/m/m.0/cv2/act/Add', '/model.6/m/m.1/cv2/act/Mul', '/model.28/act/Div', '/model.21/act/Div', '/model.27/m/m.0/cv1/act/Mul', '/model.40/m/m.0/cv1/act/Add', '/model.20/cv4/act/Add', '/model.20/cv4/act/Div', '/model.30/act/Clip', '/model.4/cv1/act/Div', '/model.36/m/m.0/cv2/act/Mul', '/model.14/act/Add', '/model.20/cv1/act/Add', '/model.13/m/m.0/cv2/act/Add', '/model.13/cv4/act/Mul', '/model.34/act/Div', '/model.20/m/m.0/cv1/act/Div', '/model.9/m/m.0/cv1/act/Div', '/model.31/cv1/act/Add', '/model.6/cv4/act/Clip', '/model.20/cv4/act/Clip', '/model.27/m/m.0/cv1/act/Clip', '/model.34/act/Add', '/model.7/act/Div', '/model.4/m/m.2/cv2/act/Clip', '/model.37/act/Add', '/model.5/act/Mul', '/model.27/cv1/act/Mul', '/model.6/m/m.2/cv2/act/Clip', '/model.20/cv1/act/Clip', '/model.17/m/m.0/cv2/act/Clip', '/model.0/conv/act/Add', '/model.3/act/Div', '/model.0/conv/act/Constant_1_output_0', '/model.6/m/m.1/cv1/act/Mul', '/model.4/m/m.1/cv1/act/Div', '/model.13/m/m.0/cv1/act/Div', '/model.28/act/Mul', '/model.6/m/m.1/cv1/act/Div', '/model.13/m/m.0/cv1/act/Add', '/model.40/m/m.0/cv1/act/Div', '/model.7/act/Clip', '/model.27/m/m.0/cv2/act/Clip', '/model.8/cv1/act/Div', '/model.27/m/m.0/cv2/act/Mul', '/model.31/cv4/act/Div', '/model.8/cv2/act/Add', '/model.20/m/m.0/cv2/act/Clip', '/model.23/m/m.0/cv1/act/Div', '/model.40/cv1/act/Clip', '/model.4/m/m.2/cv1/act/Clip', '/model.9/m/m.0/cv1/act/Clip', '/model.4/m/m.0/cv1/act/Add', '/model.6/m/m.0/cv1/act/Div', '/model.14/act/Div', '/model.36/cv1/act/Add', '/model.21/act/Clip', '/model.27/cv1/act/Div', '/model.40/m/m.0/cv2/act/Add', '/model.4/m/m.2/cv2/act/Mul', '/model.36/m/m.0/cv2/act/Div', '/model.2/m/m.0/cv2/act/Mul', '/model.2/cv1/act/Add', '/model.6/m/m.2/cv2/act/Mul', '/model.7/act/Add', '/model.4/m/m.0/cv2/act/Div', '/model.17/m/m.0/cv2/act/Div', '/model.4/m/m.0/cv1/act/Clip', '/model.6/m/m.0/cv2/act/Add', '/model.6/cv1/act/Add', '/model.17/m/m.0/cv1/act/Add', '/model.18/act/Clip', '/model.27/m/m.0/cv1/act/Add', '/model.31/m/m.0/cv1/act/Add', '/model.31/m/m.0/cv2/act/Mul', '/model.23/m/m.0/cv1/act/Mul', '/model.31/m/m.0/cv2/act/Div', '/model.2/cv4/act/Mul', '/model.4/m/m.1/cv1/act/Add', '/model.30/act/Mul', '/model.36/cv4/act/Add', '/model.27/cv4/act/Add', '/model.6/m/m.1/cv2/act/Div', '/model.20/m/m.0/cv2/act/Add', '/model.40/cv4/act/Clip', '/model.4/m/m.0/cv2/act/Clip', '/model.4/cv4/act/Div', '/model.8/cv1/act/Mul', '/model.6/m/m.2/cv2/act/Div', '/model.40/cv4/act/Add', '/model.30/act/Add', '/model.20/cv4/act/Mul', '/model.20/m/m.0/cv1/act/Mul', '/model.9/cv1/act/Div', '/model.13/cv4/act/Add', '/model.34/act/Clip', '/model.40/m/m.0/cv2/act/Clip', '/model.8/cv2/act/Mul', '/model.1/act/Add', '/model.13/m/m.0/cv1/act/Clip', '/model.4/m/m.2/cv2/act/Div', '/model.17/cv1/act/Mul', '/model.17/m/m.0/cv1/act/Clip', '/model.31/cv4/act/Clip', '/model.31/m/m.0/cv2/act/Add', '/model.4/cv1/act/Clip', '/model.27/cv4/act/Div', '/model.4/m/m.1/cv2/act/Add', '/model.23/m/m.0/cv2/act/Div', '/model.27/cv1/act/Clip', '/model.6/m/m.0/cv2/act/Clip', '/model.2/cv4/act/Add', '/model.6/m/m.0/cv2/act/Mul', '/model.27/m/m.0/cv2/act/Div', '/model.23/m/m.0/cv1/act/Clip', '/model.13/cv1/act/Div', '/model.8/cv2/act/Clip', '/model.31/cv1/act/Clip', '/model.6/cv4/act/Div', '/model.39/act/Add', '/model.14/act/Mul', '/model.40/m/m.0/cv1/act/Clip', '/model.9/cv4/act/Add', '/model.9/m/m.0/cv2/act/Mul', '/model.36/cv1/act/Clip', '/model.6/m/m.1/cv2/act/Add', '/model.13/m/m.0/cv1/act/Mul', '/model.17/cv4/act/Add', '/model.18/act/Mul', '/model.3/act/Clip', '/model.21/act/Add', '/model.9/cv1/act/Add', '/model.6/m/m.0/cv1/act/Mul', '/model.37/act/Clip', '/model.6/m/m.2/cv1/act/Mul', '/model.9/m/m.0/cv1/act/Add', '/model.23/m/m.0/cv2/act/Add', '/model.2/m/m.0/cv1/act/Clip', '/model.21/act/Mul', '/model.20/m/m.0/cv2/act/Div', '/model.31/cv4/act/Mul', '/model.9/cv1/act/Mul', '/model.13/m/m.0/cv2/act/Clip', '/model.2/cv4/act/Div', '/model.13/cv4/act/Clip', '/model.17/cv1/act/Clip', '/model.13/cv1/act/Clip', '/model.2/cv1/act/Mul', '/model.6/m/m.1/cv1/act/Clip', '/model.4/cv1/act/Add', '/model.27/cv4/act/Mul', '/model.4/m/m.0/cv1/act/Div', '/model.40/cv1/act/Div', '/model.1/act/Div', '/model.10/act/Div', '/model.13/m/m.0/cv2/act/Mul', '/model.36/m/m.0/cv1/act/Add', '/model.6/cv1/act/Div', '/model.9/cv4/act/Div', '/model.13/cv1/act/Mul', '/model.28/act/Clip', '/model.36/cv1/act/Div', '/model.27/m/m.0/cv1/act/Div', '/model.20/cv1/act/Div', '/model.0/Concat', '/model.40/cv4/act/Div', '/model.20/cv1/act/Mul', '/model.2/m/m.0/cv2/act/Clip', '/model.2/cv4/act/Clip', '/model.5/act/Div', '/model.37/act/Div', '/model.27/cv4/act/Clip', '/model.10/act/Mul', '/model.13/m/m.0/cv2/act/Div', '/model.25/act/Mul', '/model.36/m/m.0/cv1/act/Clip', '/model.6/m/m.2/cv2/act/Add', '/model.2/m/m.0/cv1/act/Div', '/model.23/cv1/act/Clip', '/model.23/cv4/act/Div', '/model.6/m/m.2/cv1/act/Clip', '/model.0/conv/act/Constant_2_output_0', '/model.40/m/m.0/cv1/act/Mul', '/model.2/cv1/act/Div', '/model.6/m/m.2/cv1/act/Add', '/model.8/cv2/act/Div', '/model.17/m/m.0/cv1/act/Div', '/model.31/m/m.0/cv2/act/Clip', '/model.37/act/Mul', '/model.10/act/Add', '/model.39/act/Clip', '/model.40/cv1/act/Add', '/model.14/act/Clip', '/model.27/cv1/act/Add', '/model.39/act/Mul', '/model.20/m/m.0/cv2/act/Mul', '/model.2/m/m.0/cv1/act/Mul', '/model.36/m/m.0/cv1/act/Div', '/model.23/m/m.0/cv2/act/Mul', '/model.27/m/m.0/cv2/act/Add', '/model.31/m/m.0/cv1/act/Div', '/model.4/m/m.2/cv2/act/Add', '/model.6/m/m.2/cv1/act/Div', '/model.36/m/m.0/cv2/act/Add', '/model.18/act/Div', '/model.23/cv1/act/Add', '/model.25/act/Add', '/model.31/cv1/act/Div', '/model.36/cv1/act/Mul', '/model.0/conv/act/Mul', '/model.8/cv1/act/Add', '/model.17/cv4/act/Clip', '/model.1/act/Clip', '/model.36/cv4/act/Div', '/model.2/cv1/act/Clip', '/model.20/m/m.0/cv1/act/Add', '/model.4/m/m.2/cv1/act/Add', '/model.17/cv4/act/Div', '/model.5/act/Clip', '/model.17/cv4/act/Mul', '/model.0/conv/act/Div', '/model.8/cv1/act/Clip', '/model.31/cv1/act/Mul', '/model.0/conv/act/Constant_output_0', '/model.6/m/m.1/cv1/act/Add', '/model.36/cv4/act/Mul', '/model.4/cv4/act/Add', '/model.10/act/Clip', '/model.6/m/m.0/cv1/act/Add', '/model.40/cv1/act/Mul', '/model.25/act/Clip', '/model.23/m/m.0/cv2/act/Clip', '/model.5/act/Add', '/model.40/m/m.0/cv2/act/Mul', '/model.40/cv4/act/Mul', '/model.4/cv1/act/Mul', '/model.4/m/m.2/cv1/act/Div', '/model.6/m/m.0/cv2/act/Div', '/model.4/m/m.0/cv1/act/Mul', '/model.4/m/m.1/cv1/act/Clip', '/model.2/m/m.0/cv2/act/Div', '/model.23/cv1/act/Mul', '/model.23/cv4/act/Add', '/model.31/m/m.0/cv1/act/Mul', '/model.25/act/Div', '/model.36/cv4/act/Clip', '/model.39/act/Div', '/model.4/m/m.1/cv2/act/Div', '/model.4/m/m.0/cv2/act/Mul', '/model.13/cv1/act/Add', '/model.9/cv4/act/Clip', '/model.23/m/m.0/cv1/act/Add', '/model.31/m/m.0/cv1/act/Clip', '/model.34/act/Mul', '/model.17/m/m.0/cv1/act/Mul', '/model.7/act/Mul', '/model.40/m/m.0/cv2/act/Div', '/model.2/m/m.0/cv2/act/Add', '/model.4/m/m.0/cv2/act/Add', '/model.30/act/Div', '/model.2/m/m.0/cv1/act/Add', '/model.18/act/Add', '/model.4/cv4/act/Mul', '/model.36/m/m.0/cv2/act/Clip', '/model.6/m/m.0/cv1/act/Clip', '/model.36/m/m.0/cv1/act/Mul', '/model.6/cv4/act/Add', '/model.6/cv1/act/Mul']
2026-07-18 12:18 - INFO - sdk - quantize - Starting quantization...
WARNING:root:Please use QuantFormat.QDQ for activation type QInt8 and weight type QInt8. Or it will lead to bad performance on x64.
2026-07-18 12:18 - INFO - sdk - quantize - Quantization completed! Quantized model saved to /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q.onnx
2026-07-18 12:18 - INFO - sdk - quantize - ONNX full precision model size: 30.38MB
2026-07-18 12:18 - INFO - sdk - quantize - ONNX quantized model size: 7.84MB
2026-07-18 12:18 - INFO - sdk - quantize - ONNX model shapes inferred.
2026-07-18 12:18 - INFO - sdk - quantize - ONNX Model with well-defined shapes has been saved at `/quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.onnx`.
2026-07-18 12:18 - DEBUG - sdk - quantize - Checking for FLOAT/FLOAT16 types...
2026-07-18 12:18 - INFO - sdk - quantize - Checking for remaining FLOAT/FLOAT16 types.
2026-07-18 12:18 - INFO - sdk - quantize - Model still has FLOAT/FLOAT16 types after quantization. Creating ranges for floating point tensors using calibration data...
2026-07-18 12:18 - INFO - sdk - quantize - Saved computed tensor ranges to /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.tranges.
2026-07-18 12:18 - INFO - sdk - quantize - 
╒══════════════════════════════════════════════════════════════════════════════════════════════════════╤═════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ Quantized ONNX Model                                                                                 │ Tensor Ranges File                                                                                      │
╞══════════════════════════════════════════════════════════════════════════════════════════════════════╪═════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.onnx │ /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.tranges │
╘══════════════════════════════════════════════════════════════════════════════════════════════════════╧═════════════════════════════════════════════════════════════════════════════════════════════════════════╛


quantized onnx: /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.onnx, tranges file: /quadric/sdk-cli/examples/models/yolo/yolop/yolop-backbone_OpSet16_optimized_asym_int8_q_shaped.tranges

Demo

The following objects are detected with this model.

  • Cars
  • Drivable areas
  • Drive lanes

Compile and Infer on Multicore

We are going to perform inference on multi-cores.

The number of cores can be selected from 1, 2, 4, and 8. We are going to use 2 cores in this demo.

N.B. ocm_size is the QC-U default ocm size (which is 16MB) divided with num_cores. It is to compare with the single-core performance later in this notebook.

num_cores = 2  # 2, 4, 8
multicore_ocm_size = f"{16 // num_cores}MB"

Compilation

## Compile the quantized model
hw_config_multicore = HWConfig(
    ocm_size=multicore_ocm_size,
    num_cores=num_cores,
)
cgc_job_multicore = ChimeraJob(
    model_p=str(quantized_onnx_model.model_path),
    trange_file=str(quantized_onnx_model.tensor_ranges_path),
    hw_config=hw_config_multicore,
)
cgc_job_multicore.compile()
2026-07-18 12:18 - INFO - epu - chimera_job - START==================================onnx_ingest
2026-07-18 12:18 - INFO - epu - chimera_job - Numerical ranges provided
2026-07-18 12:19 - INFO - epu - codegen - START===============================optimize_relay
2026-07-18 12:19 - INFO - epu - codegen - START====================quantize_to_cpu_runnable_fx
2026-07-18 12:19 - INFO - epu - fx - 

Source name                                    Op                          Output 0 Range                               Output 0 Frac Bits
---------------------------------------------  --------------------------  -----------------------------------------  --------------------
/model.0/Concat                                contrib.epu.patch_merge     [0f, 1f]                                                     30
/model.2/Concat_output_0_DequantizeLinear      contrib.epu.dequantize      [-26.9262f, 32.265f]                                         25
                                               multiply                    (-17.697263130509782, 21.20620446596604)                     26
/model.2/bn/BatchNormalization                 add                         [-9.27867f, 10.5267f]                                        26
/model.4/Concat_output_0_DequantizeLinear      contrib.epu.dequantize      [-25.9905f, 25.9905f]                                        26
                                               multiply                    (-14.893646547790922, 14.893646547790922)                    27
/model.4/bn/BatchNormalization                 add                         [-6.49635f, 8.80451f]                                        26
/model.6/Concat_output_0_DequantizeLinear      contrib.epu.dequantize      [-38.3678f, 40.5874f]                                        25
                                               multiply                    (-12.1214835838, 12.822726366034658)                         27
/model.6/bn/BatchNormalization                 add                         [-6.52361f, 8.27487f]                                        27
/model.9/Concat_output_0_DequantizeLinear      contrib.epu.dequantize      [-23.8803f, 25.4335f]                                        26
                                               multiply                    (-9.870509032244286, 10.512493391592272)                     27
/model.9/bn/BatchNormalization                 add                         [-6.74272f, 4.38071f]                                        27
/model.13/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-26.9749f, 27.6223f]                                        26
                                               multiply                    (-16.21467173624262, 16.603824078042635)                     26
/model.13/bn/BatchNormalization                add                         [-7.26465f, 7.61858f]                                        26
/model.17/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-20.9327f, 22.8532f]                                        26
                                               multiply                    (-29.742447646459368, 32.471110579109336)                    25
/model.17/bn/BatchNormalization                add                         [-14.095f, 12.3731f]                                         25
/model.24/m.0/Conv_output_0_DequantizeLinear   contrib.epu.qlinear_conv2d  [-27.8507f, 5.96802f]                                        25
/model.20/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-27.7251f, 66.4356f]                                        24
                                               multiply                    (-20.156336308937966, 48.29914300948849)                     25
/model.20/bn/BatchNormalization                add                         [-16.7375f, 10.0152f]                                        25
/model.24/m.1/Conv_output_0_DequantizeLinear   contrib.epu.qlinear_conv2d  [-23.7962f, 7.50619f]                                        25
/model.23/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-68.6047f, 96.2514f]                                        23
                                               multiply                    (-51.34553142380173, 72.03701508862287)                      24
/model.23/bn/BatchNormalization                add                         [-16.7323f, 11.8998f]                                        24
/model.24/m.2/Conv_output_0_DequantizeLinear   contrib.epu.qlinear_conv2d  [-25.3997f, 8.22807f]                                        25
/model.27/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-12.9998f, 14.1719f]                                        27
                                               multiply                    (-18.131489267926213, 19.766295295732448)                    26
/model.27/bn/BatchNormalization                add                         [-7.19545f, 7.70243f]                                        26
/model.31/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-5.2029f, 6.25261f]                                         28
                                               multiply                    (-12.087476826648981, 14.526178097324191)                    27
/model.31/bn/BatchNormalization                add                         [-6.97805f, 2.9395f]                                         27
/model.33/conv/Conv_output_0_DequantizeLinear  contrib.epu.qlinear_conv2d  [-3.54181f, 58.6928f]                                        25
/model.36/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-13.0945f, 11.7162f]                                        27
                                               multiply                    (-15.59132905001752, 13.95013621961698)                      27
/model.36/bn/BatchNormalization                add                         [-8.88f, 7.06179f]                                           26
/model.40/Concat_output_0_DequantizeLinear     contrib.epu.dequantize      [-8.44524f, 12.3809f]                                        27
                                               multiply                    (-10.105254464938525, 14.814499452475161)                    27
/model.40/bn/BatchNormalization                add                         [-5.54414f, 5.99058f]                                        26
/model.42/conv/Conv_output_0_DequantizeLinear  contrib.epu.qlinear_conv2d  [-2.02027f, 32.3242f]                                        25

2026-07-18 12:19 - INFO - epu - codegen - START====================build_cpu_runnable_fx_relay
2026-07-18 12:19 - INFO - epu - codegen - START=======================quantize_to_chimera_fx
2026-07-18 12:19 - INFO - epu - codegen - START=================================relay_to_tir
2026-07-18 12:19 - INFO - epu - codegen - START===========================relay_to_epu_relay
2026-07-18 12:19 - INFO - epu - codegen - START==============================adapt_and_order
2026-07-18 12:19 - INFO - epu - mac_counter - 
2026-07-18 12:19 - INFO - epu - mac_counter - ============================================================
2026-07-18 12:19 - INFO - epu - mac_counter - MAC Operation Count Summary
2026-07-18 12:19 - INFO - epu - mac_counter - ============================================================
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 707,788,800 ops (353,894,400 MACs) - /model.0/conv/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.2/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.2/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.2/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.2/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.2/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.2/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.3/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.4/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.4/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.4/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.4/m/m.1/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.4/m/m.1/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.4/m/m.2/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.4/m/m.2/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.4/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.4/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.4/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.5/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.6/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.6/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.6/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.6/m/m.1/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.6/m/m.1/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.6/m/m.2/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.6/m/m.2/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.6/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.6/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.6/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.7/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.8/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 419,430,400 ops (209,715,200 MACs) - /model.8/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.9/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.9/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.9/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.9/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.9/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.9/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.10/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.13/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.13/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.13/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.13/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.13/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.13/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.14/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.17/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.17/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.17/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.17/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.17/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.17/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 29,491,200 ops (14,745,600 MACs) - /model.24/m.0/Conv_output_0_DequantizeLinear
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.18/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.20/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.20/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.20/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.20/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.20/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.20/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 14,745,600 ops (7,372,800 MACs) - /model.24/m.1/Conv_output_0_DequantizeLinear
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.21/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.23/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.23/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.23/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.23/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 104,857,600 ops (52,428,800 MACs) - /model.23/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.23/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 7,372,800 ops (3,686,400 MACs) - /model.24/m.2/Conv_output_0_DequantizeLinear
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,774,873,600 ops (1,887,436,800 MACs) - /model.25/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.27/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.27/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.27/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.27/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.27/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.27/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.28/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.30/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.31/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,276,800 ops (1,638,400 MACs) - /model.31/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 29,491,200 ops (14,745,600 MACs) - /model.31/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,276,800 ops (1,638,400 MACs) - /model.31/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.31/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.31/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 117,964,800 ops (58,982,400 MACs) - /model.33/conv/Conv_output_0_DequantizeLinear
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,774,873,600 ops (1,887,436,800 MACs) - /model.34/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.36/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.36/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 471,859,200 ops (235,929,600 MACs) - /model.36/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 52,428,800 ops (26,214,400 MACs) - /model.36/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.36/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 209,715,200 ops (104,857,600 MACs) - /model.36/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.37/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 943,718,400 ops (471,859,200 MACs) - /model.39/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.40/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,276,800 ops (1,638,400 MACs) - /model.40/m/m.0/cv1/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 29,491,200 ops (14,745,600 MACs) - /model.40/m/m.0/cv2/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 3,276,800 ops (1,638,400 MACs) - /model.40/cv3/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.40/cv2/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 13,107,200 ops (6,553,600 MACs) - /model.40/cv4/conv/Conv_quant
2026-07-18 12:19 - INFO - epu - mac_counter -   conv2d: 117,964,800 ops (58,982,400 MACs) - /model.42/conv/Conv_output_0_DequantizeLinear
2026-07-18 12:19 - INFO - epu - mac_counter - ------------------------------------------------------------
2026-07-18 12:19 - INFO - epu - mac_counter - Total: 30,820,761,600 ops (15,410,380,800 MACs)
2026-07-18 12:19 - INFO - epu - mac_counter - ============================================================
2026-07-18 12:19 - INFO - epu - mac_counter - 
2026-07-18 12:19 - INFO - epu - codegen - START==============================amend_ctrl_flow
2026-07-18 12:19 - INFO - epu - codegen - START=============================plan_lrm_virtual
2026-07-18 12:20 - INFO - epu - codegen - START==============================amend_ctrl_flow
2026-07-18 12:20 - INFO - epu - codegen - START===============================lrm_alloc_loop
2026-07-18 12:20 - INFO - epu - codegen - START==============================amend_ctrl_flow
2026-07-18 12:21 - INFO - epu - codegen - START================================lrm_splitting
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 320, 640), core_split=(2, 1)) with rois/core: (10, 20)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 10, 20), core_split=(2, 1)) with rois/core: (1, 1)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 20, 40), core_split=(2, 1)) with rois/core: (1, 2)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 320, 640), core_split=(2, 1)) with rois/core: (10, 20)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 40, 80), core_split=(2, 1)) with rois/core: (2, 3)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 80, 160), core_split=(2, 1)) with rois/core: (3, 5)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 160, 320), core_split=(2, 1)) with rois/core: (5, 10)
2026-07-18 12:22 - INFO - epu - multi_core_split - Picking MultiCoreSplitInfo(roi_shape=(1, -1, 320, 640), core_split=(2, 1)) with rois/core: (10, 20)
2026-07-18 12:22 - INFO - epu - codegen - START==============================ext_split_relay
2026-07-18 12:23 - INFO - epu - codegen - START====================================build_tir
2026-07-18 12:24 - INFO - epu - chimera_job - Compilation of yolop_backbone_OpSet16_optimized_asym_int8_q_shaped_QC_U_1d7_8MB_4kB_128GBps_128GBps_16_OFF_x1_x2 successful

Inference

def yolop_inference(cgc_job, all_image_paths, head_onnx_model):
    """Run inference."""
    all_images = []
    for image_path in all_image_paths:
        image = Image.open(image_path)
        transformed_image = transforms(image)
        all_images.append(np.expand_dims(transformed_image.numpy(), axis=0).astype(np.float32))

    engines = {
        InferenceEngine.CHIMERA_ORT_INT8: cgc_job,
        InferenceEngine.CHIMERA_ISS_INT8: cgc_job,
    }

    head_session = InferenceSession(head_onnx_model.SerializeToString())

    outputs_per_engine = {}

    for inference_engine, engine in engines.items():
        outputs_per_engine[inference_engine] = batch_inference(
            inference_engine,
            engine,
            all_images,
            head_session=head_session,
            threads=min(len(all_image_paths), 6),
        )
    return outputs_per_engine
## Set up image paths
all_image_paths = [str(Path("images") / image_file) for image_file in image_files]

## Run inference
outputs_per_engine = yolop_inference(cgc_job_multicore, all_image_paths, head_onnx_model)
2026-07-18 12:24 - WARNING - epu - chimera_job - ORT is not threadsafe -- forcing single threaded batch execution
100%|████████████████████████████████████████████| 3/3 [00:01<00:00,  2.16it/s]
Processing: 100%|████████████████████████████████| 3/3 [02:13<00:00, 44.39s/it]

Postprocessing

def yolop_postprocessing(outputs_per_engine, all_image_paths, model_input_size):
    postprocess_handle = get_postprocess_handle(YOLOModelVariant.YOLOP)

    results_per_engine = {}
    results_per_engine["detections"] = {}
    results_per_engine["drivable_area"] = {}
    results_per_engine["drive_lane"] = {}

    for inference_engine, all_outputs in outputs_per_engine.items():
        results_per_engine["detections"][inference_engine] = []
        results_per_engine["drivable_area"][inference_engine] = []
        results_per_engine["drive_lane"][inference_engine] = []

        for outputs, image in zip(all_outputs, all_image_paths):
            original_image = Image.open(image)
            results_per_engine["detections"][inference_engine].append(
                boxes_detections(
                    postprocess_handle,  # Handles for postprocess
                    np.array(original_image),  # numpy image
                    outputs,  # Outputs of the inference engine
                    model_input_size,  # Model image size
                )[0]
            )
            drivable_area = outputs[4][0][1] > 0.5
            drive_lane = outputs[5][0][1] > 0.5
            results_per_engine["drivable_area"][inference_engine].append(
                resize_masks(original_image.size, drivable_area)
            )
            results_per_engine["drive_lane"][inference_engine].append(
                resize_masks(original_image.size, drive_lane)
            )
    return results_per_engine
results_per_engine = yolop_postprocessing(outputs_per_engine, all_image_paths, model_input_size)

Display Multicore Inference Results

def yolop_display_results(results_per_engine, all_image_paths, model_name):
    pic_len = len(results_per_engine["detections"]) + 1

    for i in range(len(all_image_paths)):
        ax, idx = {}, 1
        fig = plt.figure(figsize=(4 * pic_len, 4), tight_layout=True)

        ax[idx] = fig.add_subplot(int("1%s%s" % (pic_len, idx)))
        ax[idx].imshow(Image.open(all_image_paths[i]))
        ax[idx].set_title("Original Image")
        ax[idx].axis("off")

        for inference_engine, detections in results_per_engine["detections"].items():
            frame = torch.from_numpy(np.array(Image.open(all_image_paths[i])).transpose(2, 0, 1))
            drivable_area = results_per_engine["drivable_area"][inference_engine][i]
            drive_lane = results_per_engine["drive_lane"][inference_engine][i]

            frame = draw_segmentation_masks(
                frame,
                masks=torch.tensor(drivable_area),
                alpha=0.5,
                colors=(0, 255, 0),
            )
            frame = draw_segmentation_masks(
                frame,
                masks=torch.tensor(drive_lane),
                alpha=0.7,
                colors=(255, 0, 255),
            )
            frame = frame.numpy().transpose(1, 2, 0)
            frame = draw_bbox(frame, detections[i], show_class=False)

            idx += 1
            ax[idx] = fig.add_subplot(int("1%s%s" % (pic_len, idx)))
            ax[idx].imshow(frame)
            ax[idx].set_title(f"{model_name}: {str(inference_engine).upper()}")
            ax[idx].axis("off")
yolop_display_results(results_per_engine, all_image_paths, MODEL_NAME)

(OPTION) Inference on Singlecore

Perform Inference on Singlecore and Display Results

The following cell performs inference on singlecore when run_option is True.

cgc_job_singlecore is instantiated from ChimeraJob with QC-U default hw config (OCM_SIZE="16MB").

run_option = False

if run_option:
    hw_config_singlecore = DEFAULT_32_ARRAY_SIZE
    cgc_job_singlecore = ChimeraJob(
        model_p=str(quantized_onnx_model.model_path),
        trange_file=str(quantized_onnx_model.tensor_ranges_path),
        hw_config=hw_config_singlecore,
    )
    # Compile
    cgc_job_singlecore.compile(quiet=True)

    # Inference
    outputs_per_engine = yolop_inference(cgc_job_singlecore, all_image_paths, head_onnx_model)

    # Show Inference Statistics
    print(cgc_job_singlecore)
    cgc_job_singlecore.plot_run_statistics()

    # Postprocessing
    results_per_engine = yolop_postprocessing(outputs_per_engine, all_image_paths, model_input_size)

    # Display Inference Results
    yolop_display_results(results_per_engine, all_image_paths, MODEL_NAME)

Compare Performance between Multicore and Singlecore

Please run the following cell after running all the above cells.

if run_option:
    from examples.multicore.multicore_helpers import print_conclusion

    print_conclusion(cgc_job_singlecore, cgc_job_multicore)

Citation

@article{wu2022yolop,
  title={Yolop: You only look once for panoptic driving perception},
  author={Wu, Dong and Liao, Man-Wen and Zhang, Wei-Tian and Wang, Xing-Gang and Bai, Xiang and Cheng, Wen-Qing and Liu, Wen-Yu},
  journal={Machine Intelligence Research},
  pages={1--13},
  year={2022},
  publisher={Springer}
}
Table of Contents
Introduction to the Chimera SDK
Chimera SDK Quick Start Guide
Chimera SDK Command Line Interface (CLI)
Tutorial: Using SDK as a Library
Tutorials & Model Demos
Model Demos
Model Demo: Llama-2 15M (Baby Llama-2)
Model Demo: QWEN3 8B End-to-End CGC and ISS Execution
Model Demo: QWEN3 Prefill All Decoders
Model Demo: DeepSeek-R1-Distill-Qwen-1.5B End-to-End CGC and ISS Execution
Model Demo: QWEN3 Single Decoder
Model Demo: Qwen2.5-0.5B INT8 Quantization Pipeline
Model Demo: ConvNeXt Detection
Model Demo: QWEN3 Prefill Decoder Validation
Model Demo: ConvNeXt Segmentation
Model Demo: Classifiers Zoo
Model Demo: Detectors Zoo - MMDetection
Model Demo: Segmentors Zoo - MMSegmentation
Model Demo: Pose Estimators Zoo - MMPose
Model Demo: Detectors3D Zoo - MMDetection3D
MODEL Demo: Optical Character Recognition (OCR) Zoo - MMOCR
Model Demo: YOLOv3 Object Detection
Model Demo: YOLOv4 Object Detection
Model Demo: YOLOv5 Detection
Model Demo: YOLOv5 Detection and Segmentation
Model Demo: YOLOR Detection
Model Demo: YOLOX End-to-End Detection
Model Demo: YOLOv7 Detection
Model Demo: YOLOv8 Detection
Model Demo: YOLOv8 Pose Estimation
Model Demo: YOLOP Detection and Segmentation
Model Demo: QAT Vision Transformer (ViT)
Model Demo: QAT Swin Transformer
Model Demo: Mediapipe Face Pipeline
Demo: DOOM Renderer on Chimera GPNPU
Model Demo: Mediapipe Hand Pipeline
Model Demo: Whisper Tiny (Encoder + Decoder)
Model Demo: L2CS Fine-Grained Gaze Estimation
Model Demo: ASVspoof2021 LA Anti-Spoofing (LFCC-LCNN-BiLSTM)
Model Demo: UNET Tumor Segmentation
Model Demo: DETR Encoder
Model Demo: FFNet Segmentation
Model Demo: Centernet Detection
Model Demo: RetinaNet End-to-End Detection
Model Demo: Blazepose Pose Estimation
Model Demo: Pose Resnet Human Pose Estimation
Model Demo: MaskRCNN Detection and Segmentation
Model Demo: Keypoint R-CNN
Model Demo: Faster R-CNN Detection
Model Demo: FCOS Detection
Model Demo: DDRNet Classificationls
Model Demo: PI0.5 End-to-End VLA Inference
Model Demo: BEVFormer End-to-End 3D Detection
Multicore Demo
Chimera LLVM C++ Compiler
Chimera SDK Licensing Policy Documentation
Glossary

Sign in to your account

Don't have an account? Create an Account
By signing in, you are agreeing to our Terms of Use and Privacy Policy.

Develop.

Simulate.

Profile.

Collaborate.