Ultralytics YOLO11 için Sony IMX500 Dışa Aktarımı#
Bu kılavuzda, Sony IMX500 sensörüne sahip Raspberry Pi AI Kameralara Ultralytics YOLO11 modellerinin aktarımı ve dağıtımı ele alınmaktadır.
Raspberry Pi AI Kamera 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ına yüksek performans sağlarken en az gücü kullanacak şekilde tasarlanmıştır. Yüksek hızda ve düşük güç tüketimiyle çıkarım yapmaları için Ultralytics YOLO11 modellerini optimize etmene olanak tanır. Bu kılavuzda, modellerinin Raspberry Pi AI Kamera üzerinde verimli çalışmasını kolaylaştırırken modellerini IMX500 biçimine aktarma ve dağıtma adımlarını anlatacağız.
Neden IMX500'e Aktarım Yapmalısın?#
Sony'nin IMX500 Akıllı Görüntü Sensörü, uç yapay zekâ işlemede çığır açan bir donanımdır. Çip üzerinde yapay zekâ ö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 kısıtlamaları dâhil olmak üzere uç yapay zekâ alanındaki pek çok zorluğun aşılmasına yardımcı olur. Diğer sensörler yalnızca görüntüleri ve kareleri aktarırken IMX500, bütün resmi ortaya koyar. Verileri doğrudan sensör üzerinde işler ve cihazların gerçek zamanlı olarak içgörüler üretmesini sağlar.
YOLO11 Modelleri için Sony IMX500 Dışa Aktarımı#
IMX500, işlenmek üzere buluta gönderilmeleri gerekmeksizin cihazların verileri doğrudan sensör üzerinde işleme biçimini dönüştürmek üzere tasarlanmıştır.
IMX500, nicemlenmiş modellerle çalışır. Nicemleme, fazla doğruluk kaybı olmadan modelleri küçültür ve hızlandırır. Uç bilişimin sınırlı kaynakları için idealdir; gecikmeyi azaltıp verilerin buluta bağlı olmadan yerel olarak hızlıca işlenmesini sağlayarak uygulamaların çabuk yanıt vermesine olanak tanır. Veriler uzak bir sunucuya gönderilmediği için yerel işleme, kullanıcı verilerini gizli ve güvende tutar.
IMX500 Temel Özellikleri:
- Meta Veri Çıktısı: IMX500, yalnızca görüntüleri aktarmak yerine hem görüntü hem de meta veri (çıkarım sonucu) çıktısı verebilir. Veri boyutunu, bant genişliğini ve maliyetleri azaltmak için yalnızca meta veri çıktısı da verebilir.
- Gizlilik Endişelerini Giderir: IMX500, verileri cihaz üzerinde işleyerek gizlilik endişelerini giderir; bu yönüyle kişi sayımı ve doluluk takibi gibi insan odaklı uygulamalar için idealdir.
- Gerçek Zamanlı İşleme: Sensör üzerinde hızlı işleme, otonom sistemler gibi uç yapay zekâ uygulamaları için mükemmel olan gerçek zamanlı kararları destekler.
Başlamadan Önce: En iyi sonuçları elde etmek için YOLO11 modelini aktarım için Model Eğitimi Kılavuzumuzu, Veri Hazırlama Kılavuzumuzu ve Hiperparametre Ayarlama Kılavuzumuzu izleyerek hazırla.
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; anlamsal segmentasyon, OBB veya derinlik tahmini modelini dışa aktarmaya çalışmak hata verir.
| Görev | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Algılama | ✅ | ✅ | ❌ |
| Segmentasyon | ✅ | ✅ | ❌ |
| Anlamsal | ❌ | ❌ | ❌ |
| Derinlik | ❌ | ❌ | ❌ |
| Sınıflandırma | ✅ | ✅ | ❌ |
| Poz | ✅ | ✅ | ❌ |
| OBB | ❌ | ❌ | ❌ |
Kullanım Örnekleri#
Bir Ultralytics YOLO11 modelini IMX500 biçimine aktar ve aktarılan modelle çıkarım yap.
IMX500 biçimi Dışa Aktar, Tahmin ve Doğrula modlarını destekler. Çıkarım ve doğrulama Raspberry Pi AI Kamera (IMX500) üzerinde çalışır.
Burada, modelin beklendiği gibi çalıştığından emin olmak için çıkarım yapıyoruz. Ancak Raspberry Pi AI Kamera'da dağıtım ve çıkarım için Dağıtımda IMX500 Dışa Aktarımını Kullanma bölümüne geç.
from ultralytics import YOLO
# Bir YOLO11n PyTorch modeli yükle
model = YOLO("yolo11n.pt")
# Modeli dışa aktar
model.export(format="imx", data="coco8.yaml") # varsayılan olarak PTQ nicemlemesiyle dışa aktarır
# Dışa aktarılan modeli yükle
imx_model = YOLO("yolo11n_imx_model")
# Çıkarımı çalıştır
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Bir YOLO11n-pose PyTorch modeli yükle
model = YOLO("yolo11n-pose.pt")
# Modeli dışa aktar
model.export(format="imx", data="coco8-pose.yaml") # varsayılan olarak PTQ nicemlemesiyle dışa aktarır
# Dışa aktarılan modeli yükle
imx_model = YOLO("yolo11n-pose_imx_model")
# Çıkarımı çalıştır
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Bir YOLO11n-cls PyTorch modeli yükle
model = YOLO("yolo11n-cls.pt")
# Modeli dışa aktar
model.export(format="imx", data="imagenet10") # varsayılan olarak PTQ nicemlemesiyle dışa aktarır
# Dışa aktarılan modeli yükle
imx_model = YOLO("yolo11n-cls_imx_model")
# Çıkarımı çalıştır
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Bir YOLO11n-seg PyTorch modeli yükle
model = YOLO("yolo11n-seg.pt")
# Modeli dışa aktar
model.export(format="imx", data="coco8-seg.yaml") # varsayılan olarak PTQ nicemlemesiyle dışa aktarır
# Dışa aktarılan modeli yükle
imx_model = YOLO("yolo11n-seg_imx_model")
# Çıkarımı çalıştır
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Dışa aktarılan IMX500 modelini yükle
model = YOLO("yolo11n_imx_model")
# COCO8 veri kümesinde doğruluğu doğrula
metrics = model.val(data="coco8.yaml")IMX dışa aktarımı yalnızca Python 3.9 veya üzeri sürümlerin yüklü olduğu Linux sistemlerinde desteklenir ve Java 17 veya üzeri sürüm gerektirir. Ultralytics paketi, dışa aktarma için gereken ek bağımlılıkları çalışma zamanında yükler. Dışa aktarma komutunu ilk kez çalıştırdığında düzgün çalıştığından emin olmak için konsolu yeniden başlatman gerekebilir.
Dışa Aktarma Bağımsız Değişkenleri#
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
format | str | 'imx' | Dışa aktarılan modelin hedef biçimi; çeşitli dağıtım ortamlarıyla uyumluluğu tanımlar. |
imgsz | int veya tuple | 640 | Model girişi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı, belirli boyutlar içinse (height, width) demeti kullanılabilir. |
quantize | int veya str | 8/otomatik | Nicemleme hassasiyeti. IMX500 için 8 (INT8/PTQ) gereklidir ve otomatik olarak etkinleştirilir. Yalnızca FP32 ve FP16 dışa aktarımı desteklenmez. Kullanımdan kaldırılan half/int8 bayraklarının yerini alır. |
data | str | None | Nicemleme 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 bir veri kümesi adı gerekir. Belirtilmezse Ultralytics, model görevi için varsayılan kalibrasyon veri kümesini seçer. |
fraction | float, int veya list | 1.0 | Oran, görüntü sayısı veya [train, val, test] oranları/sayıları olarak kalibrasyon alt kümesi. İki öğeli listelerde test tam kalır; 0 ise onu atlar. |
nms | bool, isteğe bağlı | None | Ham çıktıyı (None, varsayılan), gömülü NMS'yi (True) veya NMS'siz başlığı (False) seç. IMX, detect, segment ve pose için nms=True gerektirir ve bu seçeneği otomatik olarak belirler. |
device | str | None | Dışa aktarma cihazını belirtir: GPU (device=0), CPU (device=cpu). |
CUDA destekli bir GPU üzerinde dışa aktarım yapıyorsan daha hızlı dışa aktarım için device=0 argümanını ilet.
Dışa aktarma süreci hakkında daha fazla bilgi için Ultralytics dışa aktarma belgeleri sayfasını ziyaret et.
Dışa aktarma işlemi, nicemlemeyi doğrulamak 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 paketlenmesinde gerekli olan packerOut.zip dosyasını içerir. Ayrıca <model-name>_imx_model klasöründe, modelle ilişkili tüm etiketleri listeleyen bir metin dosyası (labels.txt) bulunur.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtDağıtımda IMX500 Dışa Aktarımını Kullanma#
Ultralytics YOLO11n modeli IMX500 biçimine aktarıldıktan sonra çıkarım için Raspberry Pi AI Kamera'ya dağıtılabilir.
Donanım Gereksinimleri#
Aşağıdaki donanımlara sahip olduğundan emin ol:
- Raspberry Pi 5 veya Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Raspberry Pi AI Kamerayı Raspberry Pi'deki 15 pinli MIPI CSI konektörüne bağla ve Raspberry Pi'yi aç
Yazılım Gereksinimleri#
Bu kılavuz, Raspberry Pi 5 üzerinde çalışan Raspberry Pi OS Bookworm ile test edilmiştir.
Adım 1: 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-upgradeAdım 2: IMX500 sensörünü çalıştırmak için gereken IMX500 ürün yazılımını yükle.
sudo apt install imx500-allAdım 3: Değişikliklerin etkili olması için Raspberry Pi'yi yeniden başlat.
sudo rebootAdım 4: Aitrios Raspberry Pi uygulama modülü kitaplığını yükle.
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitAdım 5: aitrios-rpi-application-module-library örneklerinde bulunan aşağıdaki betikleri kullanarak YOLO11 nesne algılama, poz tahmini, sınıflandırma ve segmentasyon işlemlerini çalıştır.
Bu betikleri çalıştırmadan önce model_file ve labels.txt dizinlerini ortamına göre değiştirdiğinden emin ol.
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ı, hız ve doğruluğu ölçmek için Ultralytics ekibi tarafından Raspberry Pi AI Kamera'da imx model biçimiyle gerçekleştirildi.
| Model | Biçim | Boyut (piksel) | packerOut.zip boyutu (MB) | mAP50-95(B) | Çıkarım süresi (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Model | Biçim | Boyut (piksel) | packerOut.zip boyutu (MB) | acc (top1) | acc (top5) | Çıkarım süresi (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
Yukarıdaki kıyaslamalar için doğrulama; algılama modellerinde COCO128, poz tahmini modellerinde COCO8-Pose ve sınıflandırma modellerinde ImageNet10 veri kümeleri kullanılarak yapıldı.
Kaputun Altında Neler Var?#
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, özellikle kaynakları kısıtlı cihazlara model dağıtmak için kullanışlıdır; verimli çıkarım ve daha düşük gecikme sağlar.
MCT'nin Desteklediği Özellikler#
Sony'nin MCT'si, sinir ağı modellerini optimize etmek için tasarlanmış çeşitli özellikler sunar:
- Graf Optimizasyonları: Toplu normalleştirme gibi katmanları önceki katmanlarla birleştirerek modelleri daha verimli sürümlere dönüştürür.
- Kuantizasyon Parametresi Arama: Ortalama Kare Hata, Kırpmasız ve Ortalama Mutlak Hata gibi ölçütleri kullanarak kuantizasyon gürültüsünü en aza indirir.
- Gelişmiş Kuantizasyon Algoritmaları:
- Negatif Kayma Düzeltmesi: Simetrik aktivasyon kuantizasyonundan kaynaklanan performans sorunlarını giderir.
- Aykırı Değerleri Filtreleme: Aykırı değerleri tespit edip kaldırmak için z puanını kullanır.
- Kümeleme: Dağılım eşleşmesini iyileştirmek için tekdüze olmayan kuantizasyon ızgaralarından yararlanır.
- Karma Hassasiyet Araması: Duyarlılığa göre her katmana farklı kuantizasyon bit genişlikleri atar.
- 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 çeşitli kuantizasyon yöntemlerini destekler:
- Eğitim Sonrası Kuantizasyon (PTQ):
- Keras ve PyTorch API'leri üzerinden kullanılabilir.
- Karmaşıklık: Düşük
- Hesaplama Maliyeti: Düşük (CPU ile birkaç dakika)
- Gradyan Tabanlı Eğitim Sonrası Kuantizasyon (GPTQ):
- Keras ve PyTorch API'leri üzerinden kullanılabilir.
- Karmaşıklık: Orta
- Hesaplama Maliyeti: Orta (GPU ile 2-3 saat)
- Kuantizasyon Farkındalıklı Eğitim (QAT):
- Karmaşıklık: Yüksek
- Hesaplama Maliyeti: Yüksek (GPU ile 12-36 saat)
MCT, ağırlıklar ve aktivasyonlar için çeşitli kuantizasyon şemalarını da destekler:
- İkinin Kuvvetleri (donanım dostu)
- Simetrik
- Tekdüze
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) özelliklerinden yararlanır. Böylece model boyutu ve karmaşıklığı azaltılırken kanal kullanımı optimize edilir; ağırlık belleği ayak izinin hedef kaynak kullanımına göre düzenlenmesi için SIMD mimarisiyle uyum sağlanır. Keras ve PyTorch API'leri üzerinden 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 Kameralarda) dağıtılacak modellerin derlenmesini sağlayan IMX500 araç setinin temel bir parçasıdır. Bu araç, Ultralytics yazılımıyla işlenen Ultralytics YOLO11 modellerinin ilgili donanımla uyumlu olmasını ve verimli çalışmasını sağlayarak dağıtım sürecini kolaylaştırır. Model kuantizasyonunun ardından gerçekleştirilen dışa aktarma işlemi, temel verileri ve cihaza özgü yapılandırmaları içeren ikili dosyalar oluşturur ve Raspberry Pi AI Camera'ya dağıtımı kolaylaştırır.
Gerçek Dünya Kullanım Senaryoları#
IMX500 biçimine dışa aktarma, çeşitli sektörlerde geniş kullanım alanına sahiptir. İşte bazı örnekler:
- Uç Yapay Zekâ ve IoT: Düşük güçlü cihazlarda gerçek zamanlı işleme gerektiren drone'larda veya güvenlik kameralarında nesne algılamayı etkinleştir.
- Giyilebilir Cihazlar: Sağlık takibi yapan giyilebilir cihazlarda küçük ölçekli yapay zekâ işleme için optimize edilmiş modelleri kullanıma al.
- Akıllı Şehirler: Daha hızlı işleme ve minimum gecikmeyle trafik izleme ve güvenlik analizi için IMX500 biçimine aktarılmış YOLO11 modellerini kullan.
- Perakende Analitiği: Satış noktası sistemlerine veya akıllı raflara optimize edilmiş modeller dağıtarak mağaza içi izlemeyi iyileştir.
Sonuç#
Ultralytics YOLO11 modellerini Sony'nin IMX500 biçimine aktarmak, modellerini IMX500 tabanlı kameralarda verimli çıkarım için kullanıma almanı sağlar. Gelişmiş kuantizasyon tekniklerinden yararlanarak doğruluktan önemli ölçüde ödün vermeden model boyutunu küçültebilir ve çıkarım hızını artırabilirsin.
Daha fazla bilgi ve ayrıntılı yönergeler için Sony'nin IMX500 web sitesine göz at.
Sık Sorulan Sorular#
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") # PTQ kuantizasyonuyla dışa aktarır (varsayılan)Dışa aktarma işlemi,
packerOut.zipdahil dağıtım için gerekli dosyaları içeren bir dizin oluşturur.IMX500 biçimi, uç dağıtım için bazı önemli avantajlar sunar:
- Çip üzerinde yapay zekâ işleme, gecikmeyi ve güç tüketimini azaltır
- Yalnızca görüntü yerine hem görüntü hem de meta veri (çıkarım sonucu) çıktısı verir
- Verileri buluta bağlı olmadan yerel olarak işleyerek gizliliği artırır
- Zamana duyarlı uygulamalar için ideal gerçek zamanlı işleme özellikleri sunar
- Kaynakları kısıtlı cihazlarda verimli model dağıtımı için optimize edilmiş kuantizasyon sağlar
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 üzerinde Ultralytics kıyaslamalarına göre:
- YOLO11n, görüntü başına 58.82 ms çıkarım süresine ulaşır
- COCO128 veri kümesinde mAP50-95 değeri 0.517'dir
- Kuantizasyon sonrasında model boyutu yalnızca 2.2 MB'tır
Bu sonuçlar, IMX500 biçiminin uç yapay zekâ uygulamaları için iyi doğruluğu korurken verimli, gerçek zamanlı çıkarım sağladığını gösterir.