YOLO Vision 2026:

Ultralytics YOLO11 için Sony IMX500 Dışa Aktarma#

Bu kılavuz, Ultralytics YOLO11 modellerini Sony IMX500 sensörüne sahip Raspberry Pi AI Camera cihazlarına aktarmayı ve dağıtmayı kapsar.

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

IMX500 model formatı, sinir ağları için hızlı performans sağlarken minimum güç tüketmek üzere tasarlanmıştır. Ultralytics YOLO11 modellerini yüksek hızlı ve düşük güçte çıkarım için optimize etmeni sağlar. Bu kılavuzda, modellerini IMX500 formatına dışarı aktararak dağıtmanı sağlarken Raspberry Pi AI Camera üzerinde iyi performans göstermelerini kolaylaştıracağız.

Raspberry Pi AI Camera with Sony IMX500 sensor

Neden IMX500 Formatına Aktarmalısın?#

Sony'nin IMX500 Intelligent Vision Sensor donanımı, uç yapay zeka (edge AI) işlemelerinde ezber bozan bir bileşendir. Çip üzerinde yapay zeka 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ç yapay zekadaki birçok zorluğun üstesinden gelmeye yardımcı olur. Diğer sensörler yalnızca görüntüleri ve kareleri aktarırken, IMX500 tam bir hikaye 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 Aktarma#

IMX500, cihazların verileri buluta göndermeye gerek kalmadan doğrudan sensör üzerinde işlemesini sağlayacak şekilde tasarlanmıştır.

IMX500, kuantize edilmiş modellerle çalışır. Kuantizasyon, doğruluktan çok fazla ödün vermeden modelleri daha küçük ve daha hızlı hale getirir. Uç bilişimin sınırlı kaynakları için idealdir; bulut bağımlılığı olmadan gecikmeyi azaltarak ve yerel olarak hızlı veri işlemeye olanak tanıyarak uygulamaların hızla yanıt vermesini sağlar. Yerel işleme, uzak bir sunucuya gönderilmediği için kullanıcı verilerini de gizli ve güvende tutar.

IMX500 Temel Özellikleri:

  • Meta Veri Çıktısı: IMX500, yalnızca görüntü iletmek yerine hem görüntü hem de meta veri (çıkarım sonucu) çıkışı verebilir; ayrıca veri boyutunu en aza indirmek, bant genişliğini azaltmak ve maliyetleri düşürmek için yalnızca meta veri çıktısı da sağlayabilir.
  • Gizlilik Endişelerini Giderir: Verileri cihaz üzerinde işleyerek IMX500, kişi sayma ve doluluk takibi gibi insan odaklı uygulamalar için ideal olan gizlilik endişelerini ortadan kaldırır.
  • Gerçek Zamanlı İşleme: Hızlı, sensör içi işleme, otonom sistemler gibi uç yapay zeka uygulamaları için mükemmel olan gerçek zamanlı kararları destekler.

Başlamadan Önce: En iyi sonuçlar için Model Eğitimi Kılavuzu, Veri Hazırlama Kılavuzu ve Hiperparametre Ayarlama Kılavuzu adımlarını takip ederek YOLO11 modelinin dışa aktarıma hazır olduğundan emin ol.

Desteklenen Görevler#

IMX500 dışa aktarımı, yedi Ultralytics görevinden dördünü ve yalnızca YOLOv8n ile YOLO11n modellerini destekler; diğer model aileleri, ölçekler ve mimariler desteklenmez ve bir anlamsal segmentasyon, OBB veya derinlik tahmini modelini dışa aktarmak bir hataya neden olur.

GörevYOLOv8YOLO11YOLO26
Algıla
Segmentlere Ayır
Anlamsal
Derinlik
Sınıflandır
Poz
OBB

Kullanım Örnekleri#

Bir Ultralytics YOLO11 modelini IMX500 formatına aktar ve dışa aktarılan model ile çıkarım çalıştır.

IMX500 formatı Dışarı Aktarma (Export), Tahmin (Predict) ve Doğrulama (Validate) modlarını destekler. Çıkarım ve doğrulama Raspberry Pi AI Camera (IMX500) üzerinde çalışır.

Not

Burada modelin beklendiği gibi çalışıp çalışmadığını kontrol etmek için çıkarım yapıyoruz. Bununla birlikte, Raspberry Pi AI Camera üzerinde dağıtım ve çıkarım için lütfen Using IMX500 Export in Deployment 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 ek dışa aktarma bağımlılıkları yükler. Dışa aktarma komutunu ilk çalıştırdığında, düzgün çalışmasını sağlamak için konsolunu yeniden başlatman gerekebilir.

Dışa Aktarma Argümanları#

ArgümanTipVarsayılanAçıklama
formatstr'imx'Çeşitli dağıtım ortamlarıyla uyumluluğu tanımlayan, dışa aktarılan model için hedef format.
imgszint veya tuple640Model girişi için istenen görüntü boyutu. Kare görüntüler için bir tamsayı veya belirli boyutlar için bir (height, width) demeti (tuple) olabilir.
quantizeint veya str8/autoKuantizasyon hassasiyeti. 8 (INT8/PTQ) IMX500 için otomatik olarak etkinleştirilir; "w8a16" ise FP16 aktivasyonlarına sahip INT8 ağırlıklarını dışarı aktarır. FP32 ve yalnızca FP16 dışa aktarımı desteklenmez. Kullanımdan kaldırılan half/int8 bayraklarının yerini alır.
datastrNoneKuantizasyon için temel olan veri kümesi YAML'sine giden yol; sınıflandırma ise bunun yerine bir veri kümesi dizini veya yerleşik bir veri kümesi adı alır. quantize=8 veya 'w8a16' ile atlanırsa, Ultralytics model görevi için varsayılan kalibrasyon veri kümesini seçer.
fractionfloat, int veya list1.0Kalibrasyon alt kümesi oran, görüntü sayısı veya [train, val] oranları/sayıları olarak; bir liste train veya val sınırlandırırken, test tam kalır.
nmsboolFalseDışarı aktarılan modele Non-Maximum Suppression (NMS) ekler. True, conf, iou ve agnostic_nms değerleri de kabul edilir.
devicestrNoneDışa aktarım için kullanılacak cihazı belirtir: GPU (device=0), CPU (device=cpu).
İpucu

CUDA desteğine sahip bir GPU üzerinde dışarı aktarıyorsan, daha hızlı dışarı aktarım için lütfen device=0 argümanını ilet.

Dışa aktarım süreci hakkında daha fazla ayrıntı için Ultralytics documentation page on exporting sayfasını ziyaret edin.

Dışa aktarma işlemi, kuantizasyon doğrulaması için bir ONNX modelinin yanı sıra <model-name>_imx_model adlı bir dizin oluşturacaktır. Bu dizin, modeli IMX500 donanımında dağıtım için paketlemek açısından esansiyel olan packerOut.zip dosyasını içerecektir. Ek olarak, <model-name>_imx_model klasörü modelle ilişkili tüm etiketleri listeleyen bir metin dosyası (labels.txt) barındıracaktır.

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 Aktarma Kullanımı#

Ultralytics YOLO11n modeli IMX500 formatına aktarıldıktan sonra, çıkarım için Raspberry Pi AI Camera cihazına dağıtılabilir.

Donanım Gereksinimleri#

Aşağıdaki donanımlara 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-pin MIPI CSI konektörüne bağla ve Raspberry Pi'yi aç.

Yazılım Gereksinimleri#

Not

Bu kılavuz, bir 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 ürün yazılımını yükle.

sudo apt install imx500-all

Adım: Değişikliklerin etkili olması için Raspberry Pi'yi yeniden başlat.

sudo reboot

Adım 4: Aitrios Raspberry Pi application module library kütüphanesini kur

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

Adım 5: aitrios-rpi-application-module-library examples içinde mevcut olan aşağıdaki betikleri kullanarak YOLO11 nesne tespiti, poz tahmini, sınıflandırma ve bölütleme işlemlerini çalıştır.

Not

Bu betikleri çalıştırmadan önce ortamına göre model_file ve labels.txt dizinlerini 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()

Kıyaslamalar#

Aşağıdaki YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls ve YOLO11n-cls kıyaslamaları (benchmarks), Ultralytics ekibi tarafından imx model formatı kullanılarak hız ve doğruluk ölçümleriyle Raspberry Pi AI Camera üzerinde çalıştırılmıştır.

ModelFormatBoyut (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
ModelFormatBoyut (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, algılama modellerinde COCO128 veri kümesi, poz kestirimi modellerinde COCO8-Pose veri kümesi ve sınıflandırma modellerinde ImageNet10 kullanılarak yapılmıştır.

Kaputun Altında Ne Var?#

Sony IMX500 YOLO model deployment workflow

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

Sony'nin Model Compression Toolkit (MCT) aracı, derin öğrenme modellerini kuantizasyon ve budama yoluyla 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 sağlar. MCT, kaynak kısıtlı cihazlarda modelleri dağıtmak, verimli çıkarım sağlamak ve gecikmeyi azaltmak için özellikle yararlıdır.

MCT'nin Desteklenen Özellikleri#

Sony'nin MCT'si, sinir ağı modellerini optimize etmek için tasarlanmış bir dizi özellik sunar:

  1. Grafik Optimizasyonları: Toplu normalleştirme (batch normalization) gibi katmanları önceki katmanlara katlayarak modelleri daha verimli sürümlere dönüştürür.
  2. Kuantizasyon Parametre Arama: Ortalama Kare Hatası (Mean-Square-Error), Kırpmama (No-Clipping) ve Ortalama Mutlak Hata (Mean-Average-Error) gibi metrikleri kullanarak kuantizasyon gürültüsünü en aza indirir.
  3. Gelişmiş Kuantizasyon Algoritmaları:
    • Negatif Kaydırma Düzeltmesi: Simetrik aktivasyon kuantizasyonundan kaynaklanan performans sorunlarını ele alır.
    • Aykırı Değer Filtreleme: Aykırı değerleri tespit etmek ve kaldırmak için z-skoru kullanır.
    • Kümeleme: Daha iyi dağılım eşleşmesi için düzensiz kuantizasyon ızgaraları kullanır.
    • Karma Hassasiyetli Arama: Hassasiyete bağlı olarak katman başına farklı kuantizasyon bit genişlikleri atar.
  4. Görselleştirme: Model performansı içgörülerini, kuantizasyon aşamalarını ve bit genişliği yapılandırmalarını gözlemlemek için TensorBoard'u kullan.

Kuantizasyon#

MCT, model boyutunu küçültmek ve çıkarım hızını artırmak için birkaç kuantizasyon yöntemini 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 aktivasyonlar için çeşitli kuantizasyon şemalarını da destekler:

  1. İkinin Kuvveti (donanım dostu)
  2. Simetrik
  3. Tekdüze

Yapısal Budama#

MCT, belirli donanım mimarileri için tasarlanmış yapısal, donanım duyarlı model budamayı sunar. Bu teknik, SIMD gruplarını budayarak hedef platformun Tek Komut, Çoklu Veri (SIMD) yeteneklerinden yararlanır. Bu yöntem, ağırlık belleği kullanımı için hedefli kaynak kullanımı amacıyla SIMD mimarisiyle uyumlu olarak 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ı, modellerin Sony'nin IMX500 sensörü (örneğin, Raspberry Pi AI Camera) üzerinde dağıtımı için derlenmesine olanak tanıyan IMX500 araç setinin ayrılmaz bir parçasıdır. Bu araç, Ultralytics yazılımı aracılığıyla işlenen Ultralytics YOLO11 modellerinin geçişini kolaylaştırarak, belirtilen donanımla uyumlu olmalarını ve verimli bir şekilde çalışmalarını sağlar. Model nicelemesini (quantization) takip eden dışa aktarma prosedürü, temel verileri ve cihaza özel yapılandırmaları kapsayan ikili dosyaların oluşturulmasını içerir ve Raspberry Pi AI Camera üzerindeki dağıtım sürecini basitleştirir.

Gerçek Dünya Kullanım Durumları#

IMX500 formatına dışa aktarma, endüstriler genelinde geniş bir uygulama alanına sahiptir. İşte bazı örnekler:

  • Uçta Yapay Zeka ve IoT: Düşük güç tüketen cihazlarda gerçek zamanlı işlemenin kritik olduğu dronlar veya güvenlik kameralarında nesne tespitini etkinleştirin.
  • Giyilebilir Cihazlar: Sağlık takibi yapan giyilebilir cihazlarda küçük ölçekli yapay zeka işleme için optimize edilmiş modelleri dağıtın.
  • Akıllı Şehirler: Daha hızlı işleme ve minimum gecikme ile trafik izleme ve güvenlik analizi için IMX500 ile dışa aktarılmış YOLO11 modellerini kullanın.
  • Perakende Analitiği: Optimize edilmiş modelleri satış noktası sistemlerinde veya akıllı raflarda dağıtarak mağaza içi izlemeyi iyileştirin.

Sonuç#

Ultralytics YOLO11 modellerini Sony'nin IMX500 formatına dışa aktarmak, modellerinizi IMX500 tabanlı kameralarda verimli çıkarım için dağıtmanıza olanak tanır. Gelişmiş niceleme tekniklerinden yararlanarak, doğruluktan önemli ölçüde ödün vermeden model boyutunu küçültebilir ve çıkarım hızını artırabilirsiniz.

Daha fazla bilgi ve ayrıntılı yönergeler için Sony'nin IMX500 website sayfasına göz at.

SSS#

  • Bir YOLO11 modelini IMX500 formatına dışa aktarmak için Python API veya CLI komutunu kullanın:

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

    Dışa aktarma işlemi, dağıtım için gerekli dosyaları (packerOut.zip dahil) içeren bir dizin oluşturacaktır.

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

    • Çip üzerinde yapay zeka işleme, gecikmeyi ve güç tüketimini azaltır
    • Sadece görüntüler yerine hem görüntü hem de meta veri (çıkarım sonucu) çıktısı verir
    • Buluta bağımlılık olmadan verileri yerel olarak işleyerek gelişmiş gizlilik sağlar
    • Zamana duyarlı uygulamalar için ideal gerçek zamanlı işleme yetenekleri
    • Kaynak kısıtlı cihazlarda verimli model dağıtımı için optimize edilmiş niceleme
  • IMX500 modellerini dağıtmak için şunlara ihtiyacınız 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 yazılımı ve araçları (sudo apt install imx500-all)
  • Raspberry Pi AI Camera üzerindeki Ultralytics kıyaslamalarına dayanarak:

    • YOLO11n, görüntü başına 58.82ms çıkarım süresine ulaşır
    • COCO128 veri kümesinde 0.517 mAP50-95 değeri
    • Nicelemeden sonra sadece 2.2MB model boyutu

    Bu, IMX500 formatının uçta yapay zeka uygulamaları için iyi bir doğruluk seviyesini korurken verimli gerçek zamanlı çıkarım sağladığını gösterir.

Yorumlar