Ubuntu 24.04 (Noble) membawa Python 3.12, namun untuk stabilitas riset IoT, kita wajib menggunakan Python 3.10 agar kompatibel dengan library AI.
Cek Driver GPU: Pastikan RTX 3060 terbaca dengan perintah nvidia-smi.
Instal Python 3.10 (via Deadsnakes PPA):
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10 python3.10-venv python3.10-dev -y
/home/han/Documents/proyekTujuannya untuk melatih model kebakaran dan ekspor ONNX menggunakan akselerasi CUDA.
python3.10 -m venv venv-trainer
source venv-trainer/bin/activate
pip install --upgrade pip
pip install ultralytics onnx onnxslim onnxruntime-gpu --no-cache-dir
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
python -c "import torch; print(torch.cuda.is_available())" wajib menghasilkan True.Tujuannya untuk mengubah model ke format TFLite. Kita menggunakan CPU Only untuk menjamin stabilitas dan "mirroring" target Raspberry Pi.
python3.10 -m venv venv-converter
source venv-converter/bin/activate
pip install --upgrade pip
pip install tensorflow-cpu "tf_keras<=2.19.0" ultralytics --no-cache-dir
pip install onnx2tf sng4onnx onnx_graphsurgeon --extra-index-url https://pypi.ngc.nvidia.com
pip install ai-edge-litert --extra-index-url https://google-ai-edge.github.io/ai-edge-litert-pip/
pip install tflite-runtime "numpy<2"
pip install onnx2tf sng4onnx onnx_graphsurgeon --extra-index-url https://pypi.ngc.nvidia.com
pip install ai-edge-litert --extra-index-url https://google-ai-edge.github.io/ai-edge-litert-pip/
pip install tflite-runtime "numpy<2"
Gunakan satu skrip mass_exporter_v2.py yang bisa mendeteksi environment aktif secara otomatis.
from ultralytics import YOLO
import os
import sys
import torch
# =====================================================
# 1. KONFIGURASI PATH
# =====================================================
BASE_DIR = "/home/han/Documents/proyek-tesis/artemis-pc"
MODEL_PATH = os.path.join(BASE_DIR, "00_models/yolov8n_best.pt")
DATA_YAML = os.path.join(BASE_DIR, "01_raw_dataset/data.yaml")
assert os.path.exists(MODEL_PATH), "Model path tidak ditemukan"
assert os.path.exists(DATA_YAML), "data.yaml tidak ditemukan"
# =====================================================
# 2. DETEKSI ENVIRONMENT
# =====================================================
def get_env_mode():
prefix = sys.prefix
if "venv-trainer" in prefix:
return "TRAINER"
elif "venv-converter" in prefix:
return "CONVERTER"
return "UNKNOWN"
env_mode = get_env_mode()
print(f"Environment aktif: {env_mode}")
model = YOLO(MODEL_PATH)
# =====================================================
# 3. LOGIKA EKSPOR
# =====================================================
if env_mode == "TRAINER":
print("Export ONNX FP32")
model.export(
format="onnx",
imgsz=640,
opset=13,
simplify=True,
device=0 if torch.cuda.is_available() else "cpu"
)
print("Export ONNX FP16")
if torch.cuda.is_available():
model.model.half()
model.model.to("cuda")
device = 0
else:
print("CUDA tidak tersedia, FP16 dilewati")
device = "cpu"
model.export(
format="onnx",
imgsz=640,
half=True,
opset=13,
simplify=True,
device=device
)
print("Tahap TRAINER selesai. Pindah ke venv-converter.")
elif env_mode == "CONVERTER":
print("Export TFLite FP16")
model.export(
format="tflite",
imgsz=640,
half=True
)
print("Export TFLite INT8 (calibration)")
model.export(
format="tflite",
imgsz=640,
int8=True,
data=DATA_YAML
)
print("Tahap CONVERTER selesai. Model siap deploy.")
else:
raise RuntimeError(
"Environment tidak dikenali. Aktifkan venv-trainer atau venv-converter."
)
Urutan Eksekusi:
venv-trainer: Ekspor ONNX FP32 & FP16 (Sangat cepat dengan GPU).venv-converter: Ekspor TFLite FP16 & INT8 (Stabil dengan CPU).Catatan Kuantisasi INT8: Proses ini memakan waktu lama (±40 menit) karena melakukan kalibrasi matematis menggunakan file data.yaml. Model akan diperkecil menjadi sekitar 3.2 MB.
Persamaan yang digunakan adalah: