Skip to content

Convert and Quantize AI Models

Link Wiki Re Camera Seeed Studio - User Guide
Link contoh tutorial versi bahasa vietnam
image.png

📘 Set up the working environment

🧩 1. Install Docker (hanya sekali saja)

Jalankan di host (bukan di dalam container):
sudo apt update
sudo apt install docker.io

🔹 Jalankan & aktifkan Docker

sudo systemctl start docker
sudo systemctl enable docker

🔹 Setup permission user (biar tidak pakai sudo terus)

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
✅ Setelah ini, kamu bisa pakai docker tanpa sudo

🧩 2. Download Docker Image TPU-MLIR

docker pull sophgo/tpuc_dev:v3.1
📌 Ini akan download environment lengkap untuk TPU (termasuk toolchain CV181x)

🧩 3. Buat & Jalankan Container

Jalankan dari folder project kamu (penting karena akan di-mount ke container):
docker run --privileged \
--name MyName \
-v $PWD:/workspace \
-it sophgo/tpuc_dev:v3.1

🔹 Penjelasan:

--name MyName → ganti sesuai nama container (bebas)
-v $PWD:/workspace → folder project kamu jadi /workspace di container
--privileged → wajib untuk akses hardware/low-level
-it → interactive terminal

🧩 4. Masuk ke Workspace di Container

Setelah container jalan:
cd /workspace
📌 Semua file dari host otomatis ada di sini

🧩 5. Install TPU-MLIR (versi spesifik)

Di dalam container jalankan:
pip install tpu_mlir[all]==1.7

🧩 6. Verifikasi Instalasi

Cek apakah tool sudah tersedia:
which model_deploy
which run_calibration
which tpuc-opt
Kalau muncul path → ✅ berhasil

🧩 7. (Opsional) Jalankan Container Lagi

Kalau container sudah pernah dibuat:

🔹 Start ulang

docker start -ai MyName

🧩 8. (Opsional) Stop Container

docker stop MyName


📘 Konversi dari Model Training YoloV11n ke .MLIR

1. Training Model YOLOv11n

Model dilatih menggunakan framework Ultralytics YOLO dengan konfigurasi dataset sesuai kebutuhan.
image.png
image.png
image.png
megaphone

Opsi Jika menggunakan Training melalui Cloud Training pada Platform Ultralitic

Berbayar dengan top up awal 4.85 dollar
image.png
megaphone

Opsi Jika Local Training melalui Pycharm

kelemahan nya lama, tetap kondisi laptop atau PC terkoneksi internet
from ultralytics import YOLO
import os

# set API key (sama seperti export di CLI)
os.environ["ULTRALYTICS_API_KEY"] = "ul_9bbffea734098b752fd08a5679eb1ace8babb3b1"

# load model dari Ultralytics HUB (sesuai CLI)
model = YOLO("ul://ultralytics/yolo11/yolo11n")

# training (disesuaikan dengan CLI)
model.train(
data="ul://bima-setiawan/datasets/color-detection-v2v1-roboflow-instant-1-eval-yolov11" ,
epochs=100,
batch=16,
imgsz=640,
project="bima-setiawan/colordetection2"
)
image.png
Install dulu pip install ultralytics

2. Export Model ke ONNX

Setelah training selesai, model diexport ke format ONNX dengan konfigurasi berikut:
Image size: 640
Half precision: false
Dynamic shape: false
Simplify: true
NMS: false
Batch size: 1
Opset: 17
image.png
image.png
megaphone

Jika Lewat Pycharm dari hasil training local

from ultralytics import YOLO

model = YOLO("runs/detect/bima-setiawan/colordetection2/train/weights/best.pt")

model.export(
format="onnx",
imgsz=640,
simplify=True,
opset=17,
dynamic=False,
nms=False, # WAJIB
batch=1
)
//cara cek benar sudah ter export atau belum
import onnxruntime as ort

session = ort.InferenceSession("runs/detect/bima-setiawan/colordetection2/train/weights/best.onnx")
print("OK")

3. Copy Model ke Docker TPU-MLIR

buat dulu susunan file
C:\Users\ChronosBimaLenovo\yolo_conversion
image.png
Di dalam folder calibration_image terdapat 100 file image (.jpg) sebagai file kalibrasi jika menggunakan INT8 nantinya
Didalam mode_yolo8n
image.png
Didalam COCO2017 adalah file dari calibration_image cuma ini sudah di rename dengan command:
root@da0d53ec991b:/workspace/yolo_conversion/model_yolo8n/COCO2017 ls for file in *.jpg *.png *.jpeg; do if [ -f "$file" ]; then mv "$file" "Calibration${count}.jpg"; ((count++)); if [ $count -gt 100 ]; then break; fi; fi; done
image.png
Di dalam folder image, ada file .png sebagai file testing
image.png
Di dalam folde workspace (C:\Users\ChronosBimaLenovo\yolo_conversion\model_yolo8n\Workspace) terdapat file hasil konversi .onnx
image.png
Copy folder model ke dalam container:
buka cmd
Copy folder model ke dalam container:
docker cp model_yolo8n tpu_converter:/workspace/tpu-mlir/model_yolo8n_new
Masuk ke container:
docker exec -it tpu_converter bash

4. Konversi ONNX → MLIR

Masuk ke directory kerja:
cd /workspace/tpu-mlir/model_yolo8n_new/Workspace

Command konversi:

model_transform \
--model_name yolo_custom \
--model_def train.onnx \
--input_shapes "[[1,3,640,640]]" \
--mean "0.0,0.0,0.0" \
--scale "0.0039216,0.0039216,0.0039216" \
--keep_aspect_ratio \
--pixel_format rgb \
--output_names "/model.23/cv2.0/cv2.0.2/Conv_output_0,/model.23/cv3.0/cv3.0.2/Conv_output_0,/model.23/cv2.1/cv2.1.2/Conv_output_0,/model.23/cv3.1/cv3.1.2/Conv_output_0,/model.23/cv2.2/cv2.2.2/Conv_output_0,/model.23/cv3.2/cv3.2.2/Conv_output_0" \
--test_input ../image/heart.png \
--test_result yolo_top_outputs.npz \
--mlir yolo.mlir

Catatan:

output_names bisa didapat dari:
Netron
atau bantuan analisis ONNX
YOLOv11 memiliki multi-scale output (3 layer detection)

5. Konfigurasi Preprocessing

Dari log:
(x - mean) * scale
Parameter:
mean = [0.0, 0.0, 0.0]
scale = [0.0039216, 0.0039216, 0.0039216] (≈ 1/255)
format = RGB
layout = NCHW
resize = 640x640
mode = letterbox

6. Hasil Konversi

File yang dihasilkan:
yolo.mlir
Proses internal:
ONNX optimization (onnxsim)
Constant folding
Shape inference
MLIR optimization (tpuc-opt)

7. Validasi Hasil Konversi

Dilakukan perbandingan antara:
Output ONNX (reference)
Output MLIR
Command otomatis:
npz_tool.py compare yolo_top_outputs.npz yolo_custom_ref_outputs.npz --tolerance 0.99,0.99

8. Hasil Validasi

Ringkasan:
229 compared
229 passed
0 failed
Detail:
Similar: 219
Close: 10
Failed: 0
Minimum similarity:
cosine_similarity ≈ 0.9999997
euclidean_similarity ≈ 0.9999987
Status: VALID (Model MLIR sesuai dengan ONNX)

📘 Dokumentasi Konversi MLIR ke CVIMODEL

🧩 1. Persiapan Dataset Kalibrasi

Pastikan dataset gambar untuk kalibrasi sudah ada (misalnya folder COCO2017).

🔹 Hapus file lama (opsional)

rm calibration.txt

🔹 Generate file list kalibrasi

find $(pwd)/COCO2017 -name "*.jpg" > calibration.txt

🔹 Cek isi file

head calibration.txt

🔹 Validasi path gambar pertama

ls $(head -n 1 calibration.txt)

🧩 2. Jalankan Kalibrasi (INT8)

Masuk ke folder workspace:
cd Workspace

🔹 Command kalibrasi

run_calibration \
yolo.mlir \
--data_list ../calibration.txt \
--input_num 100 \
--calibration_table yolo_cali_table

🔹 Output penting:

Menghasilkan: yolo_cali_table
Log menunjukkan:
preprocess config ✔️
100 gambar dipakai ✔️
tuning selesai ✔️

🧩 3. Konversi ke INT8 .cvimodel

🔹 Command convert

model_deploy \
--mlir yolo.mlir \
--quantize INT8 \
--quant_input \
--processor cv181x \
--calibration_table yolo_cali_table \
--test_input ../image/heart.png \
--test_reference yolo_top_outputs.npz \
--customization_format RGB_PACKED \
--fuse_preprocess \
--aligned_input \
--model yolo_int8_cv181x.cvimodel

🧩 4. Proses Internal (Otomatis oleh tool)

Berikut tahapan yang terjadi (tidak perlu manual):

🔹 4.1 Import calibration

Load yolo_cali_table
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.