Ultralytics YOLO27: Bekleme listesine katıl.
Get Started

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

Ultralytics YOLO modellerini Ambarella SoC'lerinde dağıtmak için modellerin Ambarella'nın derleme araçlarıyla derlenmesi gerekir; CVflow mimarisi için optimize edilmiş modeller ise çıkarım sırasında daha iyi performans gösterir. Ultralytics'in 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, sıkıştırma farkındalıklı eğitimden cihaz üzerinde çıkarıma kadar mevcut nesne algılama dağıtım iş akışını 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 bilgisayar tarafındaki yapıdır; hedef cihaz için oluşturulan ayrı Cavalry ikilisi ise kart üzerinde çalışır.

Not

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

Destek

Bu entegrasyonun bakımını Ambarella yapar. Çatal, SpongeTorch veya SDK ile ilgili sorunları Ambarella desteğine bildir.

Ambarella nedir?#

Merkezi Santa Clara, California'da bulunan Ambarella, uç AI SoC'leri tasarlayan bir yarı iletken şirketidir. İşlemcileri görüntü sinyali işlemeyi, video kodlamayı ve çip üzeri AI hesaplamalarını bir araya getirir; güvenlik, otomotiv, robotik, endüstriyel 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 ile CVflow'un yerel biçiminde 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üleme
CV5 / CV52Dronlar, aksiyon kameraları, robotik, çok kameralı sistemler
N1-655Şirket içi üretken AI ve çoklu video akışı analitiği cihazları

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

  • Watt başına performans: CVflow SoC'leri sürekli çalışan uç AI için tasarlanmıştır ve kamera sınıfı güç bütçeleri içinde gerçek zamanlı nesne algılama çalıştırır.
  • Sıkıştırma farkındalıklı eğitim: SpongeTorch, modelin doğruluğunu korurken seyrekleşmesine ve CVflow dağıtımı için daha 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 çeşitli kamera sistemlerinin düşük güç tüketimiyle çalışmasını sağlar; böylece tek bir Ambarella SoC'si 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 kabul edilebilir olmadığı durumlarda SpongeTorch, nicemleme farkındalıklı eğitimi (QAT) de destekler; ancak bu yol henüz 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 aktararak ONNX grafiğindeki sıkıştırma yapısını koru.
  3. Derleme — CVflow motoru için PTQ uygulayan SDK derleme araçlarıyla ONNX modelini AmbaPB kontrol noktasına derle.
  4. Ana bilgisayarda doğrulama — Dağıtımdan önce doğruluğu kontrol etmek için derlenmiş *.ambapb.ckpt.onnx modelini 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 Ambarella'nın SDK çalışma zamanı kitaplığıyla cihazda ç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'in bu çatalını yükle, ardından derleme araçlarını ve cvflowbackend kitaplığını içeren Ambarella CVflow SDK'yı 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 öğesini 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ı yüklenmiş ve PATH yolunda bulunmalıdır.

SpongeKit Yapılandırma Dosyası#

SpongeTorch, seyrekleştirme hedefleri ve sıkıştırma takvimi dâhil budama geçişlerini tanımlayan bir SpongeKit yapılandırma dosyasıyla (protobuf metin biçimi, .prototxt) çalışır. Ö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ı gerektiğinde eğitim yapılandırmasını kullan ve sıkıştırılmış bir kontrol noktasını dışa aktarırken her zaman aynı yapılandırmayı kullan.

Amba Bağımsız Değişkenleri#

İki bağımsız değişken, train, val ve export modlarında SpongeTorch entegrasyonunu denetler:

Bağımsız değişkenTürVarsayılanAçıklama
amba_configstrNonespongetorch.prepare() öğesine geçirilen 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() öğesine geçirilen hedef yonga seti adı; ör. CV72.

Çatal ayrıca genel bir dışa aktarma bağımsız değişkeni ekler:

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

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

SpongeTorch sıkıştırması etkinleştirilmiş olarak 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 optimize ediciyi spongetorch.prepare() ile sarar. Sıkıştırma, adım takvimine göre aşamalı olarak uygulanır; böylece ağ, seyrekleşirken doğruluğunu korumayı öğrenir. Eğitilmiş kontrol noktası SpongeTorch'un seyrek durumunu (_orig/_mask tensörleri) depolar; dışa aktarma adımı daha sonra bunları gerektirir. Yeniden üretilebilirlik için yapılandırma dosyası çalıştırma dizinine amba_config.prototxt olarak kopyalanır.

Kontrol Noktası Kaydetme Koşulu

best.pt ve last.pt, SpongeTorch sıkıştırma takvimi end_step eşiğini aşana kadar bilerek kaydedilmez; yarı sıkıştırılmış bir kontrol noktası kullanılamaz. Yapılandırmandaki takvimin tamamlanması için epochs değerinin yeterince uzun olduğundan emin ol; günlük, kontrol noktası kaydetmenin ne zaman başladığını bildirir. Eğitim takvim tamamlanmadan biterse son dönem yine de bir uyarıyla 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 biçimde eğit (veya önceden eğitilmiş bir kontrol noktasından başla), ardından eğitilmiş ağırlıklarda amba_config ile daha kısa bir sıkıştırma ince ayarı yap.

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() öğesini 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 düşüşü çok fazlaysa SpongeKit yapılandırmasını ayarla ve yeniden eğit.

ONNX Biçimine Aktarma#

Sıkıştırılmış kontrol noktasını eğitimde kullanılan 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() öğesini yeniden uygular, seyrek kontrol noktası ağırlıklarını hazırlanmış yapıya tekrar yükler ve Conv+BN birleştirmesi devre dışıyken ONNX'e izler; böylece SDK derleme araçlarının beklediği biçimin aynısında bir grafik üretir.

Model Meta Verilerini Koru#

ONNX dışa aktarımı, model görevini, sınıf adlarını, adım boyutunu ve girdi 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 bilgileri 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 ayarı etkin olmayan bir kontrol noktasını dışa aktarmaya çalışmak şu hatayı verir: "Kontrol noktasında SpongeTorch budama durumu yok... Dışa aktarmadan önce amba eğitimi sırasında oluşturulmuş sıkıştırılmış bir kontrol noktası kullanın."
  • 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#

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

PTQ, kalibrasyon görüntülerini kullanarak INT8 nicelemesi uygular (görüntüleri SDK derleme kılavuzunda açıklandığı şekilde hazırla). Derleme araçları doğruluk ile çalışma zamanı gecikmesini dengeler: Daha fazla işlemi INT8'e eşlemek gecikmeyi düşürür ancak doğruluğu azaltabilir; daha fazla işlemi FP16'da tutmak ise daha yüksek gecikme karşılığında doğruluğu korur. PTQ, gecikme bütçen için gereken INT8 düzeyinde doğruluk hedefini karşılayamadığında, amaçlanan çözüm SpongeTorch ile QAT'dir — model, daha agresif INT8 nicelemesine dayanacak şekilde eğitilir ve daha düşük gecikmeli bir çalışma noktasında doğruluk geri kazanılır. QAT bu entegrasyonda henüz kullanılamıyor ve gelecek bir sürümde sunulması planlanıyor.

Not

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

Derlenmiş Modelle Çıkarım Yapma#

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, donanıma dağıtımdan önce derleyicinin tüm niceleme etkilerini içeren 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 İkili Dosyasına Dönüştürme#

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

Kart Üzerinde Dağıtım#

Cavalry ikili dosyasını Ambarella SDK çalışma zamanını kullanarak Ambarella cihazına yükle. Ön işleme ve son işleme, algılama modelinin derlendiği ayarlarla eşleşmelidir: 0–255 aralığında letterbox uygulanmış RGB girişi ve çıktılarda standart YOLO algılama kod çözümü. Ç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 budama özelliğine ihtiyacın yoksa standart Ultralytics işlem hattı da SDK araçlarının derleyebileceği bir model üretir:

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

Oluşan ONNX modelini, eğitim sonrası nicelemeyi kendi gerçekleştiren SDK derleme araçlarıyla derle. Bu yöntem, eğitim sırasında spongetorch bağımlılığı olmadan daha basit bir iş akışı sunar; bunun karşılığında çalışma zamanı performansının ve niceleme sonrası doğruluğun bir kısmından ödün verilir.

Gerçek Dünya Uygulamaları#

Ambarella CVflow SoC'lerindeki Ultralytics YOLO modelleri, uçta sürekli çalışan görüntü işleme olanağı sağlar:

  • AI güvenlik kameraları: 3 W'ın altındaki güç bütçesiyle 4K IP kameralarda gerçek zamanlı kişi ve araç algılama.
  • Dronlar ve robotik: CV5 sınıfı yongalarda gezinme, denetim ve teslimat için yerleşik nesne algılama ve izleme.
  • Endüstriyel ve perakende analitiği: Uç cihazlarda çoklu akışlarda kişi sayımı, kişisel koruyucu ekipman algılama ve raf izleme.

Özet#

Bu kılavuz, Ultralytics YOLO modellerini Ambarella CVflow SoC'lere dağıtmak için 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ı ONNX olarak dışa aktarma, SDK araçlarıyla çevrimdışı biçimde AmbaPB kontrol noktası derleme, Ultralytics üzerinden ana makinede doğrulama ve Ambarella SDK ile cihaz üzerinde dağıtım için Cavalry ikili dosyasına 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ı kullanabilirsin), 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. Bunlara AI kameraları için CV72/CV75 aileleri, dronlar ve robotik için CV5/CV52 dahildir. amba_chipset bağımsız değişkeni 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 (Caffe ve TensorFlow çeşitleri de vardır) ve eğitim sırasında yapılandırılmamış budama için Ultralytics'in Ambarella çatalına entegre edilmiştir (niceleme farkındalıklı eğitimin gelecek bir sürümde sunulması planlanıyor). İsteğe bağlıdır: Düz bir Ultralytics ONNX dışa aktarımı da SDK derleme araçlarıyla derlenebilir; araçlar nicelemeyi kendileri gerçekleştirir, ancak bu yöntemde çalışma zamanı performansı ve niceleme sonrası doğruluk bir miktar düşer.

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

  • 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; böylece bildirilen mAP, derleyicinin tüm niceleme etkilerini içerir.

Yorumlar