Hi,
I am working on deploying pose estimation models on a Genio 700 platform (MDLA 3.0), using NeuroPilot 8 (mtk_converter) targeting NP6 (npsdk_v6).
System
Ubuntu 22.04
Python 3.10.12
Workflow
The pipeline I am using is:
YOLO (Ultralytics) → ONNX → mtk_converter (INT8, npsdk_v6) → TFLite → ncc-tflite (MDLA)
ONNX export
The ONNX model is generated using Ultralytics with:
yolo export model=yolov8s-pose.pt format=onnx imgsz=640 opset=12 simplify=True dynamic=False nms=False batch=1
Conversion to TFLite
The ONNX model is converted to TFLite using the mtk_converter Python API with these parameters:
tflite_op_export_spec = npsdk_v6
converter.quantize = True
converter.precision_proportion = {‘8W8A’: 1.0}
converter.use_dynamic_quantization = False
converter.prepend_input_quantize_ops = False
converter.append_output_dequantize_ops = False
converter.use_per_output_channel_quantization = False
converter.decompose_silu_ops = True
converter.decompose_grouped_conv2d_ops = True
converter.decompose_log_softmax_ops = True
#And finally
converter.convert_to_tflite(...)
Execution:
python onnx_to_tflite_quantized.py yolov8s-pose.onnx yolov8s-pose-quant.tflite --quantize True
Compiling with ncc-tflite:
$ 20240108_Neuron_SDK_v1.2402.01_neuron-6-0-release/host/bin/ncc-tflite --arch=mdla3.0 yolov8s-pose-quant.tflite
OP[289]: CUSTOM: MTKEXT_LOGISTIC
├ MDLA: unsupported operation
├ EDMA: nir.GetVendorName().compare(“mtk”) == 0 Unsupported vendor name
├ EDMA: nir.GetTargetName().compare(“edma”) == 0 Unsupported target name
├ EDMA: nir.GetVendorName().compare(“mtk”) == 0 Unsupported vendor name
├ EDMA: nir.GetTargetName().compare(“edma”) == 0 Unsupported target name
OP[296]: CUSTOM: MTKEXT_LOGISTIC
├ MDLA: unsupported operation
├ EDMA: nir.GetVendorName().compare(“mtk”) == 0 Unsupported vendor name
├ EDMA: nir.GetTargetName().compare(“edma”) == 0 Unsupported target name
├ EDMA: nir.GetVendorName().compare(“mtk”) == 0 Unsupported vendor name
├ EDMA: nir.GetTargetName().compare(“edma”) == 0 Unsupported target name
ERROR: Cannot find an execution plan because of unsupported operations
ERROR: Fail to compile yolov8s-pose-quant.tflite
Observations
The original ONNX model only contains Sigmoid operations. However, after conversion Onnx to tflite:
Some Sigmoid operations are exported as standard TFLite LOGISTIC, these work correctly
However, some Sigmoid operations (at final of tflite file) are exported as: MTKEXT_LOGISTIC
This happens consistently across different models (YOLOv8 and YOLO11).
From Release v8.4.0 - New YOLO26 Models Release · ultralytics/assets · GitHub
I tried to use models: yolov8s-pose.pt and yolo11n-pose.pt but I’ve got the same error
Question
What conditions cause the converter to generate MTKEXT_LOGISTIC instead of standard LOGISTIC during INT8 conversion?
ls this related to quantization constraints?
Is there a way to generate tflite without MTKEXT_LOGISTIC or to force the converter to emit standard LOGISTIC instead of MTKEXT_LOGISTIC?
What is the recommended way to handle MTKEXT_* custom ops when targeting MDLA?
Thanks in advance.