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.
- Dong Wu, Manwen Liao, Weitian Zhang, Xinggang Wang, Xiang Bai, Wenqing Cheng, Wenyu Liu. YOLOP: You Only Look Once for Panoptic Driving Perception
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}
}