İçeriğe geç

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 Kameralarına aktarılmasını ve dağıtılmasını kapsar.

Raspberry Pi AI Kamera gibi sınırlı işlem gücüne sahip cihazlarda bilgisayar görüşü modellerini dağıtmak zor olabilir. Daha hızlı performans için optimize edilmiş bir model formatı kullanmak büyük bir fark yaratır.

IMX500 model formatı, sinir ağları için hızlı performans sunarken minimum güç kullanmak üzere tasarlanmıştır. Ultralytics YOLO11 modellerinizi yüksek hızlı ve düşük güçlü çıkarım için optimize etmenize olanak tanır. Bu kılavuzda, modellerinizin Raspberry Pi AI Kamera üzerinde iyi performans göstermesini kolaylaştırırken, modellerinizi IMX500 formatına aktarma ve dağıtma konusunda size yol göstereceğiz.

Raspberry Pi AI Kamera

Neden IMX500'e Aktarmalısınız?

Sony'nin IMX500 Akıllı Görüntü Sensörü, uç nokta yapay zeka işlemede ezber bozan bir donanımdır. Çip üzerinde yapay zeka özelliklerine 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ç nokta yapay zekasındaki birçok zorluğun üstesinden gelmeye yardımcı olur.
Diğer sensörler yalnızca görüntüleri ve kareleri iletirken, IMX500 tüm hikayeyi anlatır. Verileri doğrudan sensör üzerinde işleyerek cihazların gerçek zamanlı olarak içgörü üretmesini sağlar.

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

IMX500, cihazların verileri işlemek için buluta göndermesine gerek kalmadan doğrudan sensör üzerinde nasıl işlediğini dönüştürmek için tasarlanmıştır.

IMX500, nicelenmiş modellerle çalışır. Niceleme, doğruluktan çok fazla kaybetmeden modelleri daha küçük ve daha hızlı hale getirir. Uç bilişimin sınırlı kaynakları için idealdir, gecikmeyi azaltarak ve bulut bağımlılığı olmadan verilerin yerel olarak hızlı bir şekilde işlenmesine olanak tanıyarak uygulamaların hızlı bir şekilde yanıt vermesini sağlar. Yerel işleme ayrıca, uzak bir sunucuya gönderilmediği için kullanıcı verilerini gizli ve güvende tutar.

IMX500'ün Temel Özellikleri:

  • Meta Veri Çıktısı: IMX500, yalnızca görüntüleri iletmek yerine, hem görüntü hem de meta verileri (çıkarım sonucu) çıkarabilir ve veri boyutunu en aza indirmek, bant genişliğini azaltmak ve maliyetleri düşürmek için yalnızca meta verileri çıkarabilir.
  • Gizlilik Endişelerini Giderir: IMX500, verileri cihaz üzerinde işleyerek gizlilik endişelerini giderir ve insan odaklı kişi sayma ve doluluk takibi gibi uygulamalar için idealdir.
  • Gerçek zamanlı İşleme: Hızlı, sensör üzerinde 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ı elde etmek için, Model Eğitim Kılavuzumuzu, Veri Hazırlama Kılavuzumuzu ve Hiperparametre Ayarlama Kılavuzumuzu izleyerek YOLO11 modelinizin dışa aktarma için iyi hazırlanmış olduğundan emin olun.

Desteklenen Görevler

Şu anda yalnızca aşağıdaki görevleri içeren modelleri IMX500 formatına aktarabilirsiniz.

Kullanım Örnekleri

Bir Ultralytics YOLO11 modelini IMX500 formatına aktarın ve aktarılan modelle çıkarım yapın.

Not

Burada, modelin beklendiği gibi çalıştığından emin olmak için çıkarım gerçekleştiriyoruz. Ancak, Raspberry Pi AI Kamera ü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çin.

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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml

# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='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")
# Export a YOLO11n-pose PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n-pose.pt format=imx data=coco8-pose.yaml

# Run inference with the exported model
yolo predict model=yolo11n-pose_imx_model source='https://ultralytics.com/images/bus.jpg'

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ığınızda, doğru çalıştığından emin olmak için konsolunuzu yeniden başlatmanız gerekebilir.

Dışa Aktarma Argümanları

Argüman Tür Varsayılan Açıklama
format str 'imx' Çeşitli dağıtım ortamlarıyla uyumluluğu tanımlayan, dışa aktarılan modelin hedef formatı.
imgsz int veya tuple 640 Model girişi için istenen görüntü boyutu. Kare görüntüler için bir tamsayı veya bir demet olabilir (height, width) belirli boyutlar için.
int8 bool True INT8 nicelemesini etkinleştirir, modeli daha da sıkıştırır ve öncelikle uç cihazlar için minimum doğruluk kaybıyla çıkarımı hızlandırır.
data str 'coco8.yaml' Şuraya giden yol: veri kümesi yapılandırma dosyası (varsayılan: coco8.yaml), niceleme için önemlidir.
fraction float 1.0 Veri kümesinin INT8 niceleme kalibrasyonu için kullanılacak kısmını belirtir. Tam veri kümesinin bir alt kümesi üzerinde kalibrasyon yapılmasına olanak tanır, bu da deneyler için veya kaynaklar sınırlı olduğunda kullanışlıdır. INT8 etkinleştirilmişse belirtilmezse, tam veri kümesi kullanılır.
device str None Dışa aktarma için cihazı belirtir: GPU (device=0), CPU (device=cpu).

İpucu

CUDA desteği olan bir GPU üzerinde dışa aktarım yapıyorsanız, lütfen şu argümanı geçirin: device=0 daha hızlı dışa aktarım için.

Dışa aktarma süreci hakkında daha fazla bilgi için Ultralytics'in dışa aktarma hakkındaki dokümantasyon sayfasını ziyaret edin.

Dışa aktarma işlemi, niceleme doğrulaması için bir ONNX modeli ve ayrıca adlı bir dizin oluşturacaktır. <model-name>_imx_model. Bu dizin şunları içerecektir: packerOut.zip IMX500 donanımında dağıtım için modelin paketlenmesi için gerekli olan dosya. Ek olarak, <model-name>_imx_model klasörü bir metin dosyası içerecektir (labels.txt) modelle ilişkili tüm etiketleri listeleyen.

Klasör Yapısı

yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx500_model_MemoryReport.json
└── yolo11n_imx500_model.pbtxt
yolo11n-pose_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n-pose_imx.onnx
├── yolo11n-pose_imx500_model_MemoryReport.json
└── yolo11n-pose_imx500_model.pbtxt

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

Ultralytics YOLO11n modelini IMX500 formatına aktardıktan sonra, çıkarım için Raspberry Pi AI Kamerasına dağıtılabilir.

Donanım Ön Koşulları

Aşağıdaki donanıma sahip olduğunuzdan emin olun:

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

Raspberry Pi AI kamerasını Raspberry Pi üzerindeki 15 pinli MIPI CSI konektörüne bağlayın ve Raspberry Pi'yi açın

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 1: Raspberry Pi yazılımını en son sürüme güncellemek için bir terminal penceresi açın ve aşağıdaki komutları yürütün.

sudo apt update && sudo apt full-upgrade

Adım 2: IMX500 sensörünü çalıştırmak için gerekli olan IMX500 ürün yazılımını yükleyin.

sudo apt install imx500-all

Adım 3: Değişikliklerin yürürlüğe girmesi için Raspberry Pi'yi yeniden başlatın

sudo reboot

Adım 4: Aitrios Raspberry Pi uygulama modülü kütüphanesini yükleyin

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

Adım 5: aitrios-rpi-application-module-library örneklerinde bulunan aşağıdaki betikleri kullanarak YOLO11 nesne algılama ve poz tahminini çalıştırın.

Not

Değiştirdiğinizden emin olun model_file ve labels.txt Bu betikleri çalıştırmadan önce ortamınıza göre dizinleri ayarlayın.

Python Komut Dosyaları

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 DPS 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()
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_yolo_pose_ultralytics


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

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

    def post_process(self, output_tensors):
        """Post-process the output tensors for pose estimation."""
        return pp_yolo_pose_ultralytics(output_tensors)


device = AiCamera(frame_rate=17)  # Optimal frame rate for maximum DPS of the YOLO-pose model running on the AI Camera
model = YOLOPose()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.4]

        annotator.annotate_keypoints(frame, detections)
        annotator.annotate_boxes(frame, detections, corner_length=20)
        frame.display()

Kıyaslamalar

Aşağıdaki YOLOv8n, YOLO11n, YOLOv8n ve YOLO11n-pose kıyaslamaları Ultralytics ekibi tarafından Raspberry Pi AI Kamera üzerinde imx hız ve doğruluğu ölçen model formatı.

Model Format Durum Boyutu packerOut.zip (MB) mAP50-95(B) Çıkarım süresi (ms/im)
YOLOv8n imx 2.1 0.470 58.79
YOLO11n imx 2.2 0.517 58.82
YOLOv8n-pose imx 2.0 0.687 58.79
YOLO11n-pose imx 2.1 0.788 62.50

Not

Yukarıdaki kıyaslamalar için doğrulama, algılama modelleri için COCO128 veri kümesi ve poz tahmin modelleri için COCO8-Pose veri kümesi kullanılarak yapılmıştır

Kulisin Ardında Neler Var?

IMX500 dağıtımı

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

Sony'nin Model Sıkıştırma Araç Seti (MCT), niceleme ve budama yoluyla derin öğrenme modellerini optimize etmek için güçlü bir araçtır. Çeşitli niceleme 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, özellikle kaynak kısıtlı cihazlarda modelleri dağıtmak, verimli çıkarım ve azaltılmış gecikme sağlamak için kullanışlı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 gibi katmanları önceki katmanlara katlayarak modelleri daha verimli sürümlere dönüştürür.
  2. Kuantalama Parametresi Arama: Ortalama Karesel Hata, Kırpma Yok ve Ortalama Ortalama Hata gibi metrikleri kullanarak kuantalama gürültüsünü en aza indirir.
  3. Gelişmiş Kuantalama Algoritmaları:
    • Kaydırma Negatif Düzeltme: Simetrik aktivasyon nicelemesinden kaynaklanan performans sorunlarını giderir.
    • Aykırı Değerleri 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üzgün olmayan niceleme ızgaraları kullanır.
    • Karışık Duyarlıklı Arama: Hassasiyete bağlı olarak katman başına farklı niceleme bit genişlikleri atar.
  4. Görselleştirme: Model performansı içgörülerini, niceleme aşamalarını ve bit genişliği yapılandırmalarını gözlemlemek için TensorBoard'u kullanın.

Kuantalama

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

  1. Eğitim Sonrası Kuantalama (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ı Kuantalama (GPTQ):
    • Keras ve PyTorch API'leri aracılığıyla kullanılabilir.
    • Karmaşıklık: Orta
    • Hesaplama Maliyeti: Orta (2-3 GPU saati)
  3. Kuantalama 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 niceleme şemalarını destekler:

  1. İkinin Kuvveti (donanım dostu)
  2. Simetrik
  3. Üniform

Yapılandırılmış Budama

MCT, belirli donanım mimarileri için tasarlanmış, yapılandırılmış, donanım farkındalıklı model budamasını sunar. Bu teknik, SIMD gruplarını budayarak hedef platformun Tek Komut, Çoklu Veri (SIMD) yeteneklerinden yararlanır. Bu, ağırlıklar bellek ayak izinin hedeflenen kaynak kullanımı için SIMD mimarisiyle uyumlu olarak model boyutunu ve karmaşıklığını azaltırken kanal kullanımını optimize eder. 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ı, Sony'nin IMX500 sensöründe (örneğin, Raspberry Pi AI Kameraları) dağıtım için modellerin 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ımda uyumlu ve verimli bir şekilde performans göstermelerini sağlar. Model nicelemesini izleyen dışa aktarma prosedürü, temel verileri ve cihaza özgü konfigürasyonları kapsayan ikili dosyaların oluşturulmasını içerir ve Raspberry Pi AI Kamera'daki dağıtım sürecini kolaylaştırır.

Gerçek Dünya Kullanım Durumları

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

  • Uç Yapay Zeka ve IoT: Düşük güçlü cihazlarda gerçek zamanlı işlemenin gerekli olduğu dronlar veya güvenlik kameralarında nesne algılamayı etkinleştirin.
  • Giyilebilir Cihazlar: Sağlık izleme amaçlı giyilebilir cihazlarda küçük ölçekli yapay zeka işlemleri 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 tarafından dışa aktarılan YOLO11 modellerini kullanın.
  • Perakende Analitiği: Satış noktası sistemlerinde veya akıllı raflarda optimize edilmiş modeller dağıtarak mağaza içi izlemeyi geliştirin.

Sonuç

Ultralytics YOLO11 modellerini Sony'nin IMX500 formatına 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 web sitesine bakın.

SSS

Bir YOLO11 modelini Raspberry Pi AI Kamerası için IMX500 formatına nasıl aktarabilirim?

Bir YOLO11 modelini IMX500 formatına aktarmak için, Python API'sini 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, aşağıdakiler dahil olmak üzere dağıtım için gerekli dosyaları içeren bir dizin oluşturacaktır: packerOut.zip.

Uç (edge) yapay zeka dağıtımı için IMX500 formatını kullanmanın temel faydaları nelerdir?

IMX500 formatı, uç dağıtımı için çeşitli önemli avantajlar sunar:

  • Çip üzerinde yapay zeka işleme, gecikmeyi ve güç tüketimini azaltır.
  • Yalnızca resimler yerine hem resim hem de meta verileri (çıkarım sonucu) verir
  • Bulut bağımlılığı olmadan verileri yerel olarak işleyerek gelişmiş gizlilik
  • Zamandan tasarruf sağlayan 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 dağıtımı için hangi donanım ve yazılım ön koşulları gereklidir?

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 Kamera

Yazılım:

  • Raspberry Pi OS Bookworm
  • IMX500 yazılımı ve araçları (sudo apt install imx500-all)

IMX500 üzerinde YOLO11 modellerinden ne gibi bir performans bekleyebilirim?

Raspberry Pi AI Kamerası üzerindeki Ultralytics kıyaslamalarına göre:

  • YOLO11n, görüntü başına 62.50ms çıkarım süresine ulaşır.
  • COCO128 veri kümesinde 0.492 mAP50-95
  • Kuantizasyondan sonra sadece 3.2MB model boyutu

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



📅 8 ay önce oluşturuldu ✏️ 4 gün önce güncellendi

Yorumlar