Ultralytics YOLO Modelleri için Ambarella CVflow Dışa Aktarımı#
Ultralytics YOLO modellerini Ambarella SoC'lerde dağıtmak, Ambarella'nın derleme araçları kullanılarak model derlemesi yapılmasını gerektirir ve CVflow mimarisi için optimize edilmiş modeller çıkarım zamanı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 aktarım boru 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ı kapsamaktadır (tam boru hattı için İş Akışı Genel Bakışı bölümüne bakın).
AmbaPB kontrol noktası biçimi, CVflow hesaplama temellerini destekleyen ve SDK araçları tarafından oluşturulan yapıları paketleyen ONNX IR belirtiminin Ambarella'ya özgü bir uzantısıdır. Dağıtımdan önce derlenen modelin doğruluğunu doğrulamak için kullanılan ana bilgisayar tarafındaki yapıdır; hedef cihaz için üretilen ayrı Cavalry ikili dosyası ise kart üzerinde çalışandır.
Bu iş akışı, PyPI üzerinde bulunmayan tescilli Ambarella SDK bileşenlerine bağlıdır. Gerekli SDK paketlerini edinmek için Ambarella Geliştirici Bölgesi kaydol ve Cooper™ Geliştirici Platformu aracılığıyla erişim iste.
Bu entegrasyon Ambarella tarafından sürdürülmektedir. Çatalla, SpongeTorch ile veya SDK ile ilgili sorunları Ambarella desteği adresine bildir.
Ambarella Kimdir?#
Merkezi Santa Clara, Kaliforniya'da bulunan Ambarella, uç AI SoC'leri tasarlayan bir yarı iletken şirketidir. İşlemcileri görüntü sinyali işleme, video kodlama ve çip üstü AI hesaplamasını birleştirir; 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, motor üzerinde çalışmadan önce Ambarella SDK ile CVflow'un yerel biçimine derlenir.
Mevcut CVflow SoC aileleri ve tipik uygulamaları:
| SoC ailesi | Tipik uygulamalar |
|---|---|
| CV72 / CV75 | 4K AI güvenlik kameraları, akıllı kameralar, endüstriyel görüntüleme |
| CV5 / CV52 | Dronlar, aksiyon kameraları, robotik, çok kameralı sistemler |
| N1-655 | Şirket içi üretken AI ve çok akışlı video analizi cihazları |
YOLO neden Ambarella'da dağıtılmalı?#
- Watt başına performans: CVflow SoC'leri sürekli açık 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 CVflow dağıtımı için daha seyrek ve daha verimli hale gelirken doğruluğunu korumasına yardımcı olmak için eğitim sırasında budama uygular.
- Entegre kamera boru hattı: Ambarella SoC'ler, düşük güç tüketiminde çeşitli kamera sistemlerini etkinleştirmek için bir görüntü sinyali işlemcisi (ISP), ultra HD video kodlama ve CVflow'u birleştirir; böylece tek bir Ambarella SoC tam AI kamera boru hattını yönetir.
İş Akışına Genel Bakış#
Boru hattının altı aşaması vardır:
- Sıkıştırma farkındalıklı eğitim — SpongeTorch'un eğitim sırasında yapılandırılmamış budamayı kademeli olarak uygulaması için bir SpongeKit yapılandırması (
amba_config) ile eğit. Eğitim sonrası niceleme (PTQ) doğruluğunun kabul edilebilir olmadığı durumlarda, SpongeTorch ayrıca niceleme farkındalıklı eğitimi (QAT) destekler, ancak bu yol henüz bu Ultralytics entegrasyonuna bağlanmamıştır ve gelecekteki bir sürüme planlanmaktadır. - ONNX dışa aktarımı — Sıkıştırılmış kontrol noktasını aynı
amba_configile dışa aktararak sıkıştırma yapısını ONNX grafiğinde koru. - Derleme — CVflow motoru için PTQ uygulayan SDK derleme araçlarıyla ONNX modelini bir AmbaPB kontrol noktasına derle.
- Ana bilgisayar doğrulaması — dağıtımdan önce doğruluğu doğrulamak için AmbaPB arka ucu aracılığıyla derlenmiş
*.ambapb.ckpt.onnxmodelini Ultralyticspredict/valüzerinden çalıştır. - Cavalry dönüşümü — doğrulanmış AmbaPB kontrol noktasını SDK araçlarıyla bir Cavalry ikili dosyasına dönüştür.
- Cihazda çalıştır — Cavalry ikili dosyasını Ambarella'nın SDK çalışma zamanı kitaplığı ile 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ı ile değiştirilebilir (bkz. SpongeTorch Olmadan Dışa Aktarma).
Ön koşullar#
Kurulum#
Bu Ultralytics çatalını yükle, ardından derleme araçlarını ve cvflowbackend kitaplığını içeren Ambarella CVflow SDK'sını ayarla ve yanında dağıtılan spongetorch tekerleğini yükle:
# 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-*.whlAutoBackend, cvflowbackend öğesini SDK derleme araçlarının tv2 komutu (tv2 -libpath cvflowbackend) aracılığıyla bulur; bu nedenle derleme araçları yüklenmeli ve derlenmiş modellerle çıkarım veya doğrulama çalıştırmadan önce PATH üzerinde olmalıdır.
SpongeKit Yapılandırma Dosyası#
SpongeTorch, budama geçişlerini, seyreklik hedeflerini ve sıkıştırma programını tanımlayan bir SpongeKit yapılandırma dosyası (prototip metin biçimi, .prototxt) tarafından yönlendirilir. Örnek yapılandırmaları ve eşleşen ş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ğrulamanın modeli yeniden hazırlaması gerektiğinde her zaman 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#
Üç bağımsız değişken, train, val ve export modlarında SpongeTorch entegrasyonunu denetler:
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
amba_config | str | None | spongetorch.prepare() aracına aktarılan SpongeKit yapılandırmasının yolu. Sıkıştırma farkındalıklı eğitimi ve SpongeTorch farkındalıklı dışa aktarımı etkinleştirir. |
amba_chipset | str | None | spongetorch.set_target_chipset() aracına aktarılan hedef yonga seti adı; örneğin CV72. |
Çatallama ayrıca genel bir dışa aktarma bağımsız değişkeni ekler:
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
export_file | str | None | Ö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 olacak şekilde modelini eğit (veya ince ayar yap):
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ğitmen kurulum sırasında modeli ve optimizatörü spongetorch.prepare() ile sarmalar. Sıkıştırma kademeli bir adım programında uygulanır, böylece ağ seyrekleşirken doğru kalmayı öğrenir. Eğitilen kontrol noktası, dışa aktarma adımının daha sonra gerektirdiği SpongeTorch'un seyrek durumunu (_orig/_mask tensörlerini) depolar. Yapılandırma dosyası, yeniden üretilebilirlik için amba_config.prototxt olarak çalışma dizinine kopyalanır.
best.pt ve last.pt, SpongeTorch sıkıştırma zamanlaması end_step değerini aşana kadar kasıtlı olarak 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şladığını bildirir. Eğitim zamanlama tamamlanmadan sona ererse son epoch yine de bir uyarıyla kaydedilir, ancak böyle bir kontrol noktası dağıtılmamalıdır.
En iyi doğruluk için önce modelini normal şekilde eğit (veya önceden eğitilmiş bir kontrol noktasıyla başla), ardından eğitilmiş ağırlıklarla amba_config kullanarak daha kısa bir sıkıştırma ince ayarı çalıştır.
Sıkıştırılmış Kontrol Noktasını Doğrulama#
Derlemeden önce doğruluğu aynı yapılandırmayı kullanarak doğrula:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72Doğrulayıcı, gerektiğinde spongetorch.prepare() öğesini yeniden uygular ve sıkıştırma yapısının korunması 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 büyükse SpongeKit yapılandırmasını ayarla ve yeniden eğit.
ONNX'e Dışa Aktarma#
Sıkıştırılmış kontrol noktasını eğitimde kullanılan aynı amba_config ile dışa aktar:
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, spongetorch.prepare() öğesini yapılandırmanla yeniden uygular, seyrek kontrol noktası ağırlıklarını hazırlanan yapıya yeniden yükler ve SDK derleme araçlarının beklediği tam biçimde bir grafik üreterek Conv+BN birleştirmesi devre dışı bırakılmış şekilde ONNX'e izler.
Model Meta Verilerini Koruma#
ONNX dışa aktarımı model görevini, sınıf adlarını, adımı ve giriş boyutunu ONNX dosyasına gömer; AmbaPB arka ucu ise bu bilgiyi derlenmiş modelin yanındaki bir metadata.yaml yan dosyasından okur. SDK derleme araçların bu yan dosyayı oluşturmuyorsa, derlemeden önce bunu 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.
- Kontrol noktası SpongeTorch sıkıştırma durumunu içermelidir.
amba_configayarlanmış 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 şekilde yüklenmesini engelleyebilir.
SDK Araçları ile Derle#
SDK derleme kılavuzunu izleyerek dışa aktarılan ONNX modelini SDK derleme araçlarını kullanarak hedef yonga setin için derle. Araçlar grafiği CVflow AI motoru üzerine eşler (PTQ, zamanlama ve bellek planlaması uygulayarak) ve ana bilgisayar doğrulaması için AmbaPB kontrol noktasını üretir.
PTQ, kalibrasyon görüntülerini (SDK derleme kılavuzunda açıklandığı gibi hazırlanan) kullanarak INT8 nicelemesi uygular ve derleme araçları doğruluğu çalışma zamanı gecikmesine karşı 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 gecikmede doğruluğu korur. PTQ, gecikme bütçen için gereken INT8 düzeyinde doğruluk hedefine ulaşamadığında, SpongeTorch ile QAT amaçlanan çözümdür — modeli daha agresif INT8 nicelemesine tolerans göstermesi için eğitir ve daha düşük gecikme çalışma noktasında doğruluğu kurtarır. QAT henüz bu entegrasyonda mevcut değildir ve gelecekteki bir sürüme planlanmaktadır.
Ultralytics'in derlenmiş modeli tanıması için dosya adı .ambapb.ckpt.onnx veya .ambapb.fastckpt.onnx ile bitmelidir.
Derlenmiş Modelle Çıkarım Çalıştırma#
Derlenen AmbaPB modeli doğrudan Ultralytics API aracılığıyla 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:
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 niceleme etkilerini içeren, donanıma dağıtımdan ö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 buradan okur. Arka uç varsayılan olarak CVflow çıkarım modu acinf değerini kullanır; hata ayıklama amacıyla giriş/çıkış ayrıntılarını günlüğe kaydetmek için ULTRALYTICS_AMBAPB_DEBUG=1 ortam değişkenini ayarla.
Bir Cavalry İkili Dosyasına Dönüştür#
AmbaPB kontrol noktası ana bilgisayar doğrulamasını geçtikten sonra, SDK derleme kılavuzunu izleyerek hedef cihazın için bir Cavalry ikili dosyasına dönüştürmek için SDK derleme araçlarını kullan. Cavalry ikili dosyası, kart üzerinde SDK çalışma zamanı kitaplığı tarafından yürütülen biçimdir.
Karta Dağıtma#
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 ne için derlendiğiyle eşleşmelidir: 0–255 aralığında harf kutulu RGB girişi ve çıkışlarda standart YOLO algılama kod çözme. Çalışma zamanı API'leri için SDK dağıtım belgelerine başvur.
SpongeTorch Olmadan Dışa Aktarma#
SpongeTorch'un eğitim zamanı budamasına ihtiyacın yoksa, standart Ultralytics boru hattı da SDK araçlarının derleyebileceği bir model üretir:
yolo export model=yolo26n.pt format=onnxElde edilen ONNX'i, eğitim zamanında spongetorch bağımlılığı olmaksızın daha basit bir iş akışı için kendileri eğitim sonrası niceleme gerçekleştiren SDK derleme araçlarıyla derle.
Gerçek Dünya Uygulamaları#
Ambarella CVflow SoC'leri üzerindeki Ultralytics YOLO modelleri uçta sürekli açık görüntü zekâsı sağlar:
- AI güvenlik kameraları: 4K IP kameralarda, 3 W'ın altındaki güç bütçesi içinde gerçek zamanlı kişi ve araç algılama.
- Dronlar ve robotik: CV5 sınıfı yongalarda navigasyon, denetim ve teslimat için yerleşik 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'lerde dağıtmak için mevcut iş akışını özetledi: 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 dışa aktarımı, SDK araçlarıyla bir AmbaPB kontrol noktasına çevrimdışı derleme, Ultralytics aracılığıyla ana bilgisayar doğrulaması ve Ambarella SDK ile cihaz üzerinde dağıtım için bir 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.
SSS#
Hayır.
format="ambarella"hedefi yoktur. ONNX'e dışa aktar (isteğe bağlı olarakamba_configaracılığıyla SpongeTorch sıkıştırması ile), ardından ONNX modelini Ambarella SDK derleme araçlarıyla çevrimdışı olarak AmbaPB'ye derle.AI kameralar için CV72/CV75 aileleri ve dronlar ile robotik için CV5/CV52 dahil olmak üzere SDK derleme araçların tarafından desteklenen herhangi bir CVflow tabanlı SoC hedef alınabilir.
amba_chipsetbağımsız değişkeni SpongeTorch'un optimizasyon hedefinin yapılandırmasını yapar; derlerken eşleşen hedefi ayrı olarak seç. Kabul edilen yonga seti dizeleri ve kullanılabilirlik, yüklenen SDK sürümüne bağlıdır.SpongeTorch, eğitim zamanı yapılandırılmamış budama için Ultralytics'in Ambarella çatalına entegre edilmiş Ambarella'nın SpongeKit model sıkıştırma kitaplığının (ayrıca Caffe ve TensorFlow çeşitlerine de sahip olan) PyTorch sürümüdür (niceleme farkındalıklı eğitim gelecekteki bir sürüme planlanmaktadır). İsteğe bağlıdır: düz bir Ultralytics ONNX dışa aktarımı da çalışma zamanı performansında ve niceleme doğruluğunda bir maliyet pahasına, nicelemeyi kendileri gerçekleştiren SDK derleme araçlarıyla derlenebilir.
Bunlar tescillidir ve PyPI üzerinde değildir. SDK erişimi istemek için Ambarella Geliştirici Bölgesi kaydol; SDK derleme araçlarını (
cvflowbackendile birlikte) içerir ve ayrı olarak dağıtılanspongetorchtekerleği bunun yanında gönderilir.Ambarella çatalı kurulu olarak
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlçalıştır. AmbaPB arka ucu derlenmiş modeli CVflow AI motorunda çalışırken yürütür, bu nedenle bildirilen mAP tüm derleyici niceleme efektlerini içerir.