Ultralytics YOLO27:

Ultralytics YOLO Modelleri için Ambarella CVflow Dışa Aktarımı#

Ultralytics YOLO modellerini Ambarella SoC'lerinde dağıtmak için Ambarella'nın derleme araçları kullanılarak model derlemesi gerekir; CVflow mimarisi için optimize edilen modeller çıkarım sırasında daha iyi performans gösterir. Ultralytics'ın bu çatalı, Ambarella'nın SpongeTorch sıkıştırma araç setini doğrudan eğitim, doğrulama ve dışa aktarma işlem hattına entegre ederek geliştiricilerin Ambarella donanımında verimli dağıtım için optimize edilmiş modeller oluşturmasını sağlar.

Bu kılavuz, mevcut nesne algılama dağıtım iş akışını, sıkıştırma farkındalıklı eğitimden cihaz üzerinde çıkarıma kadar ele alır (işlem hattının tamamı için İş Akışına Genel Bakış bölümüne bak).

AmbaPB kontrol noktası biçimi, CVflow hesaplama ilkellerini destekleyen ve SDK araçlarının oluşturduğu yapıtları paketleyen, Ambarella'ya özgü bir ONNX IR belirtimi uzantısıdır. Dağıtımdan önce derlenmiş modelin doğruluğunu doğrulamak için kullanılan ana makine tarafı yapıtıdır; hedef cihaz için oluşturulan ayrı Cavalry ikilisi ise kart üzerinde çalışır.

Not

Bu iş akışı, PyPI'de bulunmayan özel Ambarella SDK bileşenlerine bağlıdır. Gerekli SDK paketlerini edinmek için Ambarella Developer Zone kaydı oluştur ve Cooper™ Developer Platform üzerinden erişim talep et.

Destek

Bu entegrasyonun bakımı Ambarella tarafından yapılır. Çatal, SpongeTorch veya SDK ile ilgili sorunları Ambarella desteğine bildir.

Ambarella nedir?#

Santa Clara, Kaliforniya merkezli Ambarella, uç AI SoC'leri tasarlayan bir yarı iletken şirketidir. İşlemcileri görüntü sinyali işleme, video kodlama ve çip üzerinde AI hesaplamayı bir araya getirir; güvenlik, otomotiv, robotik, endüstri ve tüketici cihazlarında kullanılır.

CVflow nedir?#

CVflow, Ambarella'nın görüntü işleme mimarisidir. Bilgisayarlı görü ve sinir ağı iş yüklerini çalıştırmak için CPU ve GPU'dan ayrı, özel bir görüntü motoru kullanır. PyTorch gibi çerçevelerde eğitilen modeller, motorda çalıştırılmadan önce Ambarella SDK'sıyla CVflow'un yerel biçimine derlenir.

Mevcut CVflow SoC aileleri ve tipik uygulamaları:

SoC ailesiTipik uygulamalar
CV72 / CV754K AI güvenlik kameraları, akıllı kameralar, endüstriyel görüntü işleme
CV5 / CV52Drone'lar, aksiyon kameraları, robotik, çok kameralı sistemler
N1-655Şirket içi üretken AI ve çok akışlı video analitiği cihazları

YOLO'yu Ambarella'da Neden Dağıtmalısın?#

  • Watt başına performans: CVflow SoC'leri, kamera sınıfı güç bütçeleri içinde gerçek zamanlı nesne algılama çalıştırarak sürekli açık uç AI için tasarlanmıştır.
  • Sıkıştırma farkındalıklı eğitim: SpongeTorch, modelin doğruluğunu korurken CVflow dağıtımı için daha seyrek ve verimli hâle gelmesine yardımcı olmak üzere eğitim sırasında budama uygular.
  • Entegre kamera işlem hattı: Ambarella SoC'leri görüntü sinyali işlemcisini (ISP), ultra HD video kodlamayı ve CVflow'u bir araya getirerek düşük güç tüketimiyle çeşitli kamera sistemlerinin çalışmasını sağlar; böylece tek bir Ambarella SoC tüm AI kamera işlem hattını yönetir.

İş Akışına Genel Bakış#

İşlem hattı altı aşamadan oluşur:

  1. Sıkıştırma farkındalıklı eğitim — SpongeTorch'un eğitim sırasında yapılandırılmamış budamayı aşamalı olarak uygulaması için bir SpongeKit yapılandırmasıyla (amba_config) eğitim yap. Eğitim sonrası nicemleme (PTQ) doğruluğunun yeterli olmadığı durumlarda SpongeTorch, nicemleme farkındalıklı eğitimi (QAT) de destekler; ancak bu yol henüz bu Ultralytics entegrasyonuna bağlanmamıştır ve gelecekteki bir sürüm için planlanmaktadır.
  2. ONNX dışa aktarımı — sıkıştırılmış kontrol noktasını aynı amba_config ile dışa aktar ve sıkıştırma yapısını ONNX grafiğinde koru.
  3. Derleme — CVflow motoru için PTQ uygulayan SDK derleme araçlarıyla ONNX modelini AmbaPB kontrol noktasına derle.
  4. Ana makinede doğrulama — derlenmiş *.ambapb.ckpt.onnx modelinin doğruluğunu dağıtımdan önce doğrulamak için AmbaPB arka ucu üzerinden Ultralytics predict/val ile çalıştır.
  5. Cavalry'ye dönüştürme — doğrulanmış AmbaPB kontrol noktasını SDK araçlarıyla Cavalry ikilisine dönüştür.
  6. Cihazda çalıştırma — Cavalry ikilisini cihazda Ambarella'nın SDK çalışma zamanı kitaplığıyla çalıştır.

SpongeTorch eğitim ve dışa aktarma iş akışı isteğe bağlıdır ve düz bir ONNX dışa aktarımıyla değiştirilebilir (SpongeTorch Olmadan Dışa Aktarma bölümüne bak).

Ön koşullar#

Kurulum#

Ultralytics'ın bu çatalını yükle, ardından derleme araçlarını ve cvflowbackend kitaplığını içeren Ambarella CVflow SDK'sını kur ve yanında dağıtılan spongetorch wheel paketini yükle:

Kurulum
# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .

# Access and set up the Ambarella SDK compilation tools
# After the environment is ready, install the spongetorch library
pip install /path/to/spongetorch-*.whl

AutoBackend, cvflowbackend konumunu SDK derleme araçlarının tv2 komutu (tv2 -libpath cvflowbackend) aracılığıyla bulur; bu nedenle derlenmiş modellerle çıkarım veya doğrulama yapmadan önce SDK derleme araçları kurulmuş ve PATH üzerinde bulunmalıdır.

SpongeKit Yapılandırma Dosyası#

SpongeTorch, seyrekliğe yönelik hedefler ve sıkıştırma zamanlaması da dâhil olmak üzere budama geçişlerini tanımlayan bir SpongeKit yapılandırma dosyasıyla (protobuf metin biçimi, .prototxt) yönetilir. Örnek yapılandırmaları ve bunlara karşılık gelen şema belgelerini Ambarella SDK sürümünden edin. Eğitim, doğrulama ve dağıtım arasında tutarlılığı korumak için doğrulama sırasında modelin yeniden hazırlanması gerekiyorsa eğitim yapılandırmasını kullan ve sıkıştırılmış bir kontrol noktasını dışa aktarırken daima aynı yapılandırmayı kullan.

Amba Argümanları#

İki argüman, SpongeTorch entegrasyonunu train, val ve export modlarında denetler:

Bağımsız değişkenTürVarsayılanAçıklama
amba_configstrNonespongetorch.prepare() komutuna aktarılan SpongeKit yapılandırmasının yolu. Sıkıştırma farkındalıklı eğitimi ve SpongeTorch uyumlu dışa aktarımı etkinleştirir.
amba_chipsetstrNonespongetorch.set_target_chipset() komutuna aktarılan hedef yonga setinin adı; örneğin CV72.

Çatal ayrıca genel bir dışa aktarma argümanı da ekler:

Bağımsız değişkenTürVarsayılanAçıklama
export_filestrNoneÖzel dışa aktarma çıktı yolu/adı; örneğin '/tmp/model.onnx' veya 'model.onnx'.

Sıkıştırma Farkındalıklı Eğitim#

SpongeTorch sıkıştırması etkin durumdayken modelini eğit (veya ince ayar yap):

Kullanım
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=100,
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

amba_config ayarlandığında eğitici, kurulum sırasında modeli ve iyileştiriciyi spongetorch.prepare() ile sarar. Sıkıştırma, adım zamanlamasına göre aşamalı olarak uygulanır; böylece ağ seyrekleşirken doğruluğunu korumayı öğrenir. Eğitilmiş kontrol noktası, dışa aktarma adımının daha sonra gerektirdiği SpongeTorch seyrek durumunu (_orig/_mask tensörleri) saklar. Yeniden üretilebilirlik için yapılandırma dosyası çalıştırma dizinine amba_config.prototxt olarak kopyalanır.

Kontrol noktası kaydetme koşulu

SpongeTorch sıkıştırma zamanlaması end_step eşiğini geçene kadar best.pt ve last.pt bilerek kaydedilmez — yarı sıkıştırılmış bir kontrol noktası kullanılamaz. Yapılandırmandaki zamanlamanın tamamlanması için epochs değerinin yeterince uzun olduğundan emin ol; günlük, kontrol noktası kaydetmenin ne zaman başlayacağını bildirir. Eğitim zamanlama tamamlanmadan biterse son dönem bir uyarıyla yine de kaydedilir, ancak böyle bir kontrol noktası dağıtılmamalıdır.

Sıfırdan eğitmek yerine ince ayar yap

En iyi doğruluk için önce modelini normal şekilde eğit (veya önceden eğitilmiş bir kontrol noktasından başla), ardından eğitilmiş ağırlıklara amba_config ile daha kısa bir sıkıştırma ince ayarı uygula.

Sıkıştırılmış Kontrol Noktasını Doğrulama#

Derlemeden önce aynı yapılandırmayı kullanarak doğruluğu doğrula:

Kullanım
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
  amba_config=config.prototxt amba_chipset=CV72

Doğrulayıcı gerektiğinde spongetorch.prepare() ayarını yeniden uygular ve sıkıştırma yapısını korumak için Conv+BN birleştirmesini devre dışı bırakır. mAP değerini sıkıştırılmamış temel modelinle karşılaştır; doğruluk kaybı çok fazlaysa SpongeKit yapılandırmasını düzenleyip yeniden eğitim yap.

ONNX'e aktar#

Sıkıştırılmış kontrol noktasını eğitimde kullandığın aynı amba_config ile dışa aktar:

Kullanım
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
model.export(
    format="onnx",
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

Dışa aktarıcı modeli yeniden oluşturur, yapılandırmanla spongetorch.prepare() ayarını yeniden uygular, seyrek kontrol noktası ağırlıklarını hazırlanmış yapıya yeniden yükler ve Conv+BN birleştirmesi devre dışıyken ONNX'e izleme yapar — böylece SDK derleme araçlarının beklediği biçimin tam karşılığında bir grafik üretir.

Model Meta Verilerini Koru#

ONNX dışa aktarımı model görevini, sınıf adlarını, stride değerini ve giriş boyutunu ONNX dosyasına ekler; AmbaPB arka ucu ise bu bilgileri derlenmiş modelin yanındaki metadata.yaml yan dosyasından okur. SDK derleme araçların bu yan dosyayı oluşturmuyorsa derlemeden önce ONNX modelinden çıkar:

import onnx

from ultralytics.utils import YAML

model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})

metadata.yaml dosyasını derlenmiş *.ambapb.ckpt.onnx veya *.ambapb.fastckpt.onnx dosyasıyla aynı dizinde tut.

Uyarı
  • Kontrol noktası SpongeTorch sıkıştırma durumunu içermelidir. amba_config ayarlanmışken sıkıştırılmamış bir kontrol noktasını dışa aktarmaya çalışmak şu hatayı verir: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export."
  • Yapılandırma, eğitim sırasında kullanılan yapılandırmayla eşleşmelidir. Farklı bir yapılandırma kullanmak, kontrol noktası ağırlıklarının doğru yüklenmesini engelleyebilir.

SDK Araçlarıyla Derleme#

SDK'nin derleme kılavuzunu izleyerek dışa aktarılan ONNX modelini hedef yonga setin için SDK derleme araçlarıyla derle. Araçlar, grafiği CVflow AI motoruna eşler — PTQ, zamanlama ve bellek planlaması uygular — ve ana makinede doğrulama için AmbaPB kontrol noktası oluşturur.

PTQ, kalibrasyon görüntülerini kullanarak INT8 nicemlemesi uygular (görüntüler SDK'nin derleme kılavuzunda açıklandığı şekilde hazırlanır) ve derleme araçları doğruluğu çalışma zamanı gecikmesine göre dengeler: daha fazla işlemi INT8'e eşlemek gecikmeyi azaltır ancak doğruluğu düşürebilir; daha fazla işlemi FP16'da tutmak ise daha yüksek gecikmeyle doğruluğu korur. PTQ, gecikme bütçen için gereken INT8 düzeyinde doğruluk hedefini karşılayamadığında SpongeTorch ile QAT amaçlanan çözümdür — modeli daha agresif INT8 nicemlemesine dayanacak şekilde eğitir ve daha düşük gecikmeli çalışma noktasında doğruluğu geri kazandırır. QAT henüz bu entegrasyonda kullanılamıyor ve gelecekteki bir sürüm için planlanıyor.

Not

Ultralytics'ın derlenmiş modeli tanıması için dosya adı .ambapb.ckpt.onnx veya .ambapb.fastckpt.onnx ile bitmelidir.

Derlenmiş Modelle Çıkarım Çalıştırma#

Derlenmiş AmbaPB modeli Ultralytics API'si üzerinden doğrudan yüklenir — AutoBackend, .ambapb son ekini algılar ve çıkarımı cvflowbackend üzerinden yönlendirerek modeli AI motorunda çalışacağı şekilde yürütür:

Kullanım
from ultralytics import YOLO

model = YOLO("model.ambapb.ckpt.onnx")

# Inference
results = model("https://ultralytics.com/images/bus.jpg")

# Validation
metrics = model.val(data="coco8.yaml")

Bu, tüm derleyici nicemleme etkilerini içeren, donanım dağıtımından önceki son doğruluk kontrolüdür. Derlenmiş modelin yanında bir metadata.yaml dosyası varsa arka uç sınıf adlarını, stride değerini ve görev bilgilerini bu dosyadan okur. Arka uç varsayılan olarak CVflow çıkarım modu acinf değerini kullanır; hata ayıklama için giriş/çıkış ayrıntılarını günlüğe kaydetmek üzere ULTRALYTICS_AMBAPB_DEBUG=1 ortam değişkenini ayarla.

Cavalry İkilisine Dönüştürme#

AmbaPB kontrol noktası ana makinede doğrulamayı geçtikten sonra SDK'nin derleme kılavuzunu izleyerek SDK derleme araçlarıyla hedef cihazın için bir Cavalry ikilisine dönüştür. Cavalry ikilisi, kart üzerinde SDK çalışma zamanı kitaplığı tarafından yürütülen biçimdir.

Karta Dağıtma#

Cavalry ikilisini Ambarella SDK çalışma zamanını kullanarak Ambarella cihazına yükle. Ön işleme ve son işleme, algılama modelinin derlendiği işlemeyle eşleşmelidir: 0–255 aralığında letterbox uygulanmış RGB girişi ve çıktılarda standart YOLO algılama çözümlemesi. Çalışma zamanı API'leri için SDK dağıtım belgelerine başvur.

SpongeTorch Olmadan Dışa Aktarma#

SpongeTorch'un eğitim sırasında uyguladığı budamaya ihtiyacın yoksa standart Ultralytics işlem hattı da SDK araçlarının derleyebileceği bir model oluşturur:

Kullanım
yolo export model=yolo26n.pt format=onnx

Ortaya çıkan ONNX modelini, eğitim sonrası nicemlemeyi kendi yapan SDK derleme araçlarıyla derle. Bu yol, eğitim sırasında spongetorch bağımlılığı olmadan daha basit bir iş akışı sunar; karşılığında çalışma zamanı performansından ve nicemlenmiş doğruluktan bir miktar ödün verilir.

Gerçek Dünya Uygulamaları#

Ambarella CVflow SoC'lerinde çalışan Ultralytics YOLO modelleri, uçta sürekli açık görüntü işlemeyi mümkün kılar:

  • AI güvenlik kameraları: 3 W'ın altındaki güç bütçesi içinde 4K IP kameralarda gerçek zamanlı insan ve araç algılama.
  • Drone'lar ve robotik: CV5 sınıfı yongalarda navigasyon, denetim ve teslimat için cihaz üzerinde nesne algılama ve izleme.
  • Endüstriyel ve perakende analitiği: uç cihazlarda çok akışlı kişi sayımı, KKD algılama ve raf izleme.

Özet#

Bu kılavuz, Ultralytics YOLO modellerini Ambarella CVflow SoC'lerinde dağıtmaya yönelik mevcut iş akışını açıkladı: SpongeTorch ile sıkıştırma farkındalıklı eğitim (amba_config/amba_chipset), sıkıştırılmış kontrol noktasının ONNX'e aktarılması, SDK araçlarıyla çevrimdışı olarak AmbaPB kontrol noktasına derleme, Ultralytics üzerinden ana makinede doğrulama ve Ambarella SDK ile cihaz üzerinde dağıtım için Cavalry ikilisine dönüştürme.

Diğer uç AI hedefleri için ilgili Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX ve Axelera kılavuzlarına bak. Dışa aktarma biçimlerinin tam listesi için Dışa aktarma modu belgelerini ve entegrasyonlar sayfasını ziyaret et.

Sık Sorulan Sorular#

  • Hayır. format="ambarella" hedefi yok. ONNX'e aktar (isteğe bağlı olarak amba_config aracılığıyla SpongeTorch sıkıştırması uygula), ardından ONNX modelini Ambarella SDK derleme araçlarıyla çevrimdışı olarak AmbaPB'ye derle.

  • SDK derleme araçlarının desteklediği CVflow tabanlı tüm SoC'ler hedeflenebilir. Bunlar arasında AI kameraları için CV72/CV75 aileleri ve drone'lar ile robotik için CV5/CV52 bulunur. amba_chipset argümanı SpongeTorch'un optimizasyon hedefini yapılandırır; derleme sırasında eşleşen hedefi ayrıca seç. Kabul edilen yonga seti dizeleri ve kullanılabilirlik, yüklü SDK sürümüne bağlıdır.

  • SpongeTorch, Ambarella'nın SpongeKit model sıkıştırma kitaplığının PyTorch çeşididir (kitaplığın Caffe ve TensorFlow çeşitleri de vardır) ve eğitim sırasında yapılandırılmamış budama için Ultralytics'ın Ambarella çatalına entegre edilmiştir (nicemleme farkındalıklı eğitim gelecekteki bir sürüm için planlanmaktadır). Kullanımı isteğe bağlıdır: düz bir Ultralytics ONNX dışa aktarımı da SDK derleme araçlarıyla derlenebilir; araçlar nicemlemeyi kendileri yapar, ancak bunun çalışma zamanı performansı ve nicemlenmiş doğruluk açısından bir maliyeti vardır.

  • Bunlar tescillidir ve PyPI'de bulunmaz. SDK erişimi istemek için Ambarella Developer Zone kaydı oluştur; SDK, derleme araçlarını (cvflowbackend ile) içerir ve ayrıca dağıtılan spongetorch wheel paketi de SDK ile birlikte gelir.

  • Ambarella çatalı yüklüyken yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml komutunu çalıştır. AmbaPB arka ucu, derlenmiş modeli CVflow AI motorunda çalışacağı şekilde yürütür; bu nedenle bildirilen mAP tüm derleyici nicemleme etkilerini içerir.

Yorumlar