Ultralytics YOLO27:

Ultralytics YOLO11 için Sony IMX500 dışa aktarımı#

Bu kılavuz, Ultralytics YOLO11 modellerinin Sony IMX500 sensörüne sahip Raspberry Pi AI Kameralara aktarılmasını ve dağıtılmasını kapsar.

Raspberry Pi AI Camera gibi hesaplama gücü sınırlı cihazlarda bilgisayarlı görü modellerini dağıtmak zor olabilir. Daha hızlı performans için optimize edilmiş bir model biçimi kullanmak büyük fark yaratır.

IMX500 model biçimi, sinir ağları için hızlı performans sunarken minimum güç kullanacak şekilde tasarlanmıştır. Ultralytics YOLO11 modellerini yüksek hızda ve düşük güçle çıkarım yapacak şekilde optimize etmeni sağlar. Bu kılavuzda, modellerinin Raspberry Pi AI Camera üzerinde iyi performans göstermesini kolaylaştırırken modellerini IMX500 biçimine nasıl aktaracağını ve dağıtacağını anlatacağız.

Raspberry Pi AI Camera with Sony IMX500 sensor

Neden IMX500'e dışa aktarma yapmalısın?#

Sony'nin IMX500 Intelligent Vision Sensor ürünü, uç AI işlemede devrim niteliğinde bir donanımdır. Çip üzerinde AI yeteneklerine sahip dünyanın ilk akıllı görüntü sensörüdür. Bu sensör; veri işleme darboğazları, gizlilik endişeleri ve performans sınırlamaları dahil olmak üzere uç AI alanındaki birçok zorluğun aşılmasına yardımcı olur. Diğer sensörler yalnızca görüntüleri ve kareleri iletirken IMX500 tüm hikâyeyi anlatır. Verileri doğrudan sensör üzerinde işleyerek cihazların gerçek zamanlı içgörüler üretmesini sağlar.

YOLO11 Modelleri için Sony IMX500 Dışa Aktarımı#

IMX500, verilerin işlenmek üzere buluta gönderilmesine gerek kalmadan doğrudan sensör üzerinde işlenme biçimini dönüştürmek için tasarlanmıştır.

IMX500, kuantize edilmiş modellerle çalışır. Kuantizasyon, fazla doğruluk kaybetmeden modelleri küçültür ve hızlandırır. Uç bilişimin sınırlı kaynakları için idealdir; gecikmeyi azaltarak ve buluta bağımlı olmadan verilerin yerel olarak hızlı işlenmesini sağlayarak uygulamaların hızlı yanıt vermesine olanak tanır. Yerel işleme, kullanıcı verileri uzak bir sunucuya gönderilmediği için verileri gizli ve güvenli tutar.

IMX500'ün Temel Özellikleri:

  • Meta veri çıkışı: IMX500, yalnızca görüntüleri iletmek yerine hem görüntü hem de meta veri (çıkarım sonucu) çıktısı verebilir; veri boyutunu, bant genişliği kullanımını ve maliyetleri azaltmak için yalnızca meta veri çıktısı da sağlayabilir.
  • Gizlilik endişelerini giderir: Verileri cihaz üzerinde işleyen IMX500, kişi sayma ve doluluk takibi gibi insan odaklı uygulamalar için ideal olarak gizlilik endişelerini giderir.
  • Gerçek zamanlı işleme: Hızlı, sensör üzeri işleme gerçek zamanlı kararları destekler ve otonom sistemler gibi uç AI uygulamaları için idealdir.

Başlamadan önce: En iyi sonuçlar için Model Eğitimi Kılavuzumuzu, Veri Hazırlama Kılavuzumuzu ve Hiperparametre Ayarlama Kılavuzumuzu izleyerek YOLO11 modelinin dışa aktarma için iyi hazırlanmış olduğundan emin ol.

Desteklenen Görevler#

IMX500 dışa aktarımı, yedi Ultralytics görevinin dördünü ve yalnızca YOLOv8n ile YOLO11n modellerini destekler: diğer model aileleri, ölçekleri ve mimarileri desteklenmez; ayrıca anlamsal segmentasyon, OBB veya derinlik tahmini modelini dışa aktarmak hata oluşturur.

GörevYOLOv8YOLO11YOLO26
Algılama
Segmentasyon
Semantik
Derinlik
Sınıflandırma
Poz
OBB

Kullanım Örnekleri#

Bir Ultralytics YOLO11 modelini IMX500 biçimine aktar ve dışa aktarılan modelle çıkarım yap.

IMX500 biçimi Dışa Aktarma, Tahmin ve Doğrulama modlarını destekler. Çıkarım ve doğrulama Raspberry Pi AI Camera (IMX500) üzerinde çalışır.

Not

Burada yalnızca modelin beklendiği gibi çalıştığından emin olmak için çıkarım yapıyoruz. Ancak Raspberry Pi AI Camera üzerinde dağıtım ve çıkarım için lütfen Dağıtımda IMX500 Dışa Aktarımını Kullanma bölümüne geç.

Nesne Algılama
from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

# Export the model
model.export(format="imx", data="coco8.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
Poz Tahmini
from ultralytics import YOLO

# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")

# Export the model
model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
Sınıflandırma
from ultralytics import YOLO

# Load a YOLO11n-cls PyTorch model
model = YOLO("yolo11n-cls.pt")

# Export the model
model.export(format="imx", data="imagenet10")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-cls_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
Örnek Segmentasyonu
from ultralytics import YOLO

# Load a YOLO11n-seg PyTorch model
model = YOLO("yolo11n-seg.pt")

# Export the model
model.export(format="imx", data="coco8-seg.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-seg_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
Doğrula
from ultralytics import YOLO

# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")
Uyarı

Ultralytics paketi, çalışma zamanında dışa aktarma için ek bağımlılıkları yükler. Dışa aktarma komutunu ilk kez çalıştırdığında, doğru şekilde çalıştığından emin olmak için konsolunu yeniden başlatman gerekebilir.

Dışa Aktarma Bağımsız Değişkenleri#

Bağımsız değişkenTürVarsayılanAçıklama
formatstr'imx'Dışa aktarılan model için hedef formatı belirtir ve çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar.
imgszint veya tuple640Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı veya belirli boyutlar için (height, width) tuple'ı olabilir.
quantizeint veya str8/autoKuantizasyon hassasiyeti. 8 (INT8/PTQ), IMX500 için otomatik olarak etkinleştirilir; "w8a16", FP16 etkinlikleriyle INT8 ağırlıklarını dışa aktarır. Yalnızca FP32 ve FP16 dışa aktarımı desteklenmez. Kullanımdan kaldırılan half/int8 bayraklarının yerini alır.
datastrNoneKuantizasyon için gerekli olan veri kümesi YAML dosyasının yolu; sınıflandırma için bunun yerine bir veri kümesi dizini veya yerleşik veri kümesi adı kullanılır. quantize=8 veya 'w8a16' ile birlikte belirtilmezse Ultralytics, model görevi için varsayılan kalibrasyon veri kümesini seçer.
fractionfloat, int veya list1.0Oran, görüntü sayısı veya [train, val, test] oranları/sayıları olarak kalibrasyon alt kümesi. İki öğeli listelerde test tam bırakılırken 0 atlanır.
nmsbool, isteğe bağlıNoneHam çıktıyı (None, varsayılan), gömülü NMS'yi (True) veya NMS içermeyen başlığı (False) seç. IMX, nesne tespiti, segmentasyon ve poz tahmini için nms=True gerektirir ve bunu otomatik olarak seçer.
devicestrNoneDışa aktarma için cihazı belirtir: GPU (device=0), CPU (device=cpu).
İpucu

CUDA destekli bir GPU üzerinde dışa aktarma yapıyorsan daha hızlı dışa aktarma için device=0 bağımsız değişkenini ilet.

Dışa aktarma süreci hakkında daha fazla ayrıntı için Ultralytics'in dışa aktarma dokümantasyonu sayfasını ziyaret et.

Dışa aktarma işlemi, kuantizasyon doğrulaması için bir ONNX modeli ve <model-name>_imx_model adlı bir dizin oluşturur. Bu dizin, modelin IMX500 donanımında dağıtım için paketlenmesi açısından gerekli olan packerOut.zip dosyasını içerir. Ayrıca <model-name>_imx_model klasörü, modelle ilişkili tüm etiketleri listeleyen bir metin dosyası (labels.txt) içerir.

Klasör Yapısı
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Dağıtımda IMX500 Dışa Aktarımını Kullanma#

Ultralytics YOLO11n modelini IMX500 biçimine aktardıktan sonra çıkarım için Raspberry Pi AI Camera'ya dağıtabilirsin.

Donanım Ön Koşulları#

Aşağıdaki donanıma sahip olduğundan emin ol:

  1. Raspberry Pi 5 veya Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Raspberry Pi AI kamerayı Raspberry Pi üzerindeki 15 pimli MIPI CSI konektörüne bağla ve Raspberry Pi'yi aç.

Yazılım Ön Koşulları#

Not

Bu kılavuz, Raspberry Pi 5 üzerinde çalışan Raspberry Pi OS Bookworm ile test edilmiştir.

adım: Bir terminal penceresi aç ve Raspberry Pi yazılımını en son sürüme güncellemek için aşağıdaki komutları çalıştır.

sudo apt update && sudo apt full-upgrade

adım: IMX500 sensörünü çalıştırmak için gerekli olan IMX500 üretici yazılımını yükle.

sudo apt install imx500-all

adım: Değişikliklerin geçerli olması için Raspberry Pi'yi yeniden başlat.

sudo reboot

adım: Aitrios Raspberry Pi uygulama modülü kitaplığını yükle.

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

adım: aitrios-rpi-application-module-library örneklerinde bulunan aşağıdaki betikleri kullanarak YOLO11 nesne tespiti, poz tahmini, sınıflandırma ve segmentasyonu çalıştır.

Not

Bu betikleri çalıştırmadan önce model_file ve labels.txt dizinlerini ortamına göre değiştirdiğinden emin ol.

Python Betikleri
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

Karşılaştırmalı Testler#

Aşağıdaki YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls ve YOLO11n-cls kıyaslamaları, hız ve doğruluk ölçülerek Ultralytics ekibi tarafından Raspberry Pi AI Camera üzerinde imx model biçimiyle çalıştırılmıştır.

ModelBiçimBoyut (piksel)packerOut.zip boyutu (MB)mAP50-95(B)Çıkarım süresi (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModelBiçimBoyut (piksel)packerOut.zip boyutu (MB)acc (top1)acc (top5)Çıkarım süresi (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Not

Yukarıdaki kıyaslamalar için doğrulama, nesne tespiti modelleri için COCO128 veri seti, poz tahmin modelleri için COCO8-Pose veri seti ve sınıflandırma modelleri için ImageNet10 kullanılarak yapılmıştır.

Perde Arkasında Neler Oluyor?#

Sony IMX500 YOLO model deployment workflow

Sony Model Sıkıştırma Araç Seti (MCT)#

Sony'nin Model Sıkıştırma Araç Seti (MCT), kuantizasyon ve budama yoluyla derin öğrenme modellerini optimize etmek için güçlü bir araçtır. Çeşitli kuantizasyon yöntemlerini destekler ve doğruluktan önemli ölçüde ödün vermeden model boyutunu ve hesaplama karmaşıklığını azaltmak için gelişmiş algoritmalar sunar. MCT, kaynakları kısıtlı cihazlarda model dağıtımı için özellikle yararlıdır; verimli çıkarım ve azaltılmış gecikme sağlar.

MCT'nin Desteklenen Özellikleri#

Sony'nin MCT'si, sinir ağı modellerini optimize etmek için tasarlanmış çeşitli özellikler sunar:

  1. Grafik optimizasyonları: Toplu normalleştirme gibi katmanları kendilerinden önceki katmanlara katlayarak modelleri daha verimli sürümlere dönüştürür.
  2. Kuantizasyon parametresi araması: Ortalama Kare Hatası, Kırpmasızlık ve Ortalama Mutlak Hata gibi metrikleri kullanarak kuantizasyon gürültüsünü en aza indirir.
  3. Gelişmiş kuantizasyon algoritmaları:
    • Negatif kaydırma düzeltmesi: Simetrik etkinlik kuantizasyonundan kaynaklanan performans sorunlarını giderir.
    • Aykırı değer filtreleme: Aykırı değerleri tespit etmek ve kaldırmak için z-skorunu kullanır.
    • Kümeleme: Dağılım eşleştirmesini iyileştirmek için düzgün olmayan kuantizasyon ızgaralarından yararlanır.
    • Karma hassasiyet araması: Duyarlılığa göre her katmana farklı kuantizasyon bit genişlikleri atar.
  4. Görselleştirme: Model performansına ilişkin içgörüleri, kuantizasyon aşamalarını ve bit genişliği yapılandırmalarını gözlemlemek için TensorBoard'u kullanır.

Kuantizasyon#

MCT, model boyutunu azaltmak ve çıkarım hızını artırmak için çeşitli kuantizasyon yöntemlerini destekler:

  1. Eğitim Sonrası Kuantizasyon (PTQ):
    • Keras ve PyTorch API'leri aracılığıyla kullanılabilir.
    • Karmaşıklık: Düşük
    • Hesaplama maliyeti: Düşük (CPU dakikaları)
  2. Gradyan tabanlı Eğitim Sonrası Kuantizasyon (GPTQ):
    • Keras ve PyTorch API'leri aracılığıyla kullanılabilir.
    • Karmaşıklık: Orta
    • Hesaplama maliyeti: Orta (2-3 GPU saati)
  3. Kuantizasyon Farkındalıklı Eğitim (QAT):
    • Karmaşıklık: Yüksek
    • Hesaplama maliyeti: Yüksek (12-36 GPU saati)

MCT ayrıca ağırlıklar ve etkinlikler için çeşitli kuantizasyon şemalarını destekler:

  1. İkinin kuvvetleri (donanım dostu)
  2. Simetrik
  3. Düzgün

Yapılandırılmış Budama#

MCT, belirli donanım mimarileri için tasarlanmış, yapılandırılmış ve donanım farkındalıklı model budamayı kullanıma sunar. Bu teknik, SIMD gruplarını budayarak hedef platformun Tek Komut, Çoklu Veri (SIMD) yeteneklerinden yararlanır. Ağırlık belleği ayak izinin hedeflenen kaynak kullanımı için SIMD mimarisiyle uyumlu şekilde kanal kullanımını optimize ederken model boyutunu ve karmaşıklığını azaltır. Keras ve PyTorch API'leri aracılığıyla kullanılabilir.

IMX500 Dönüştürücü Aracı (Derleyici)#

IMX500 Dönüştürücü Aracı, IMX500 araç setinin ayrılmaz bir parçasıdır ve modellerin Sony'nin IMX500 sensöründe (örneğin Raspberry Pi AI Kameralarda) dağıtım için derlenmesini sağlar. Bu araç, Ultralytics yazılımı aracılığıyla işlenen Ultralytics YOLO11 modellerinin belirtilen donanımla uyumlu olmasını ve verimli çalışmasını sağlayarak geçişi kolaylaştırır. Model kuantizasyonunu izleyen dışa aktarma yordamı, temel verileri ve cihaza özgü yapılandırmaları içeren ikili dosyalar oluşturur ve Raspberry Pi AI Camera üzerindeki dağıtım sürecini kolaylaştırır.

Gerçek Dünya Kullanım Örnekleri#

IMX500 biçimine dışa aktarma, çeşitli sektörlerde geniş bir uygulama alanına sahiptir. İşte bazı örnekler:

  • Uç AI ve IoT: Gerçek zamanlı işlemenin düşük güç tüketimli cihazlarda gerekli olduğu dronlarda veya güvenlik kameralarında nesne tespitini etkinleştir.
  • Giyilebilir cihazlar: Sağlık izleme amaçlı giyilebilir cihazlarda küçük ölçekli AI işleme için optimize edilmiş modelleri dağıt.
  • Akıllı şehirler: Daha hızlı işleme ve minimum gecikmeyle trafik izleme ve güvenlik analizi için IMX500'e aktarılmış YOLO11 modellerini kullan.
  • Perakende analitiği: Optimize edilmiş modelleri satış noktası sistemlerinde veya akıllı raflarda dağıtarak mağaza içi izlemeyi geliştir.

Sonuç#

Ultralytics YOLO11 modellerini Sony'nin IMX500 biçimine aktarmak, modellerini IMX500 tabanlı kameralarda verimli çıkarım için dağıtmanı sağlar. Gelişmiş kuantizasyon tekniklerinden yararlanarak doğruluktan önemli ölçüde ödün vermeden model boyutunu azaltabilir ve çıkarım hızını artırabilirsin.

Daha fazla bilgi ve ayrıntılı yönergeler için Sony'nin IMX500 web sitesine başvur.

SSS#

  • Bir YOLO11 modelini IMX500 biçimine aktarmak için Python API'sini veya CLI komutunu kullan:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # Exports with PTQ quantization by default

    Dışa aktarma işlemi, packerOut.zip da dahil olmak üzere dağıtım için gerekli dosyaları içeren bir dizin oluşturur.

  • IMX500 biçimi, uç dağıtım için birkaç önemli avantaj sunar:

    • Çip üzeri AI işleme, gecikmeyi ve güç tüketimini azaltır
    • Yalnızca görüntüler yerine hem görüntü hem de meta veri (çıkarım sonucu) çıktısı verir
    • Verileri buluta bağımlı olmadan yerel olarak işleyerek gelişmiş gizlilik sağlar
    • Zamana duyarlı uygulamalar için ideal gerçek zamanlı işleme yetenekleri
    • Kaynakları kısıtlı cihazlarda verimli model dağıtımı için optimize edilmiş kuantizasyon
  • IMX500 modellerini dağıtmak için şunlara ihtiyacın olacak:

    Donanım:

    • Raspberry Pi 5 veya Raspberry Pi 4 Model B
    • IMX500 sensörlü Raspberry Pi AI Camera

    Yazılım:

    • Raspberry Pi OS Bookworm
    • IMX500 ürün yazılımı ve araçları (sudo apt install imx500-all)
  • Raspberry Pi AI Camera üzerindeki Ultralytics karşılaştırmalarına göre:

    • YOLO11n, görüntü başına 58.82 ms çıkarım süresine ulaşır
    • COCO128 veri kümesinde 0.517 mAP50-95
    • Niceleme sonrasında yalnızca 2.2 MB model boyutu

    Bu, IMX500 formatının uç AI uygulamaları için iyi doğruluğu korurken verimli gerçek zamanlı çıkarım sağladığını gösterir.

Yorumlar