Ultralytics YOLO27:

Vitis AI ile Ultralytics YOLO için AMD Xilinx Dağıtımı#

Ultralytics yerel dışa aktarma yakında sunulacak

AMD Xilinx cihazları için yerel Ultralytics dışa aktarma desteği yakında sunulacak. O zamana kadar bu kılavuz, AMD Xilinx donanım ve yazılım ortamını açıklıyor ve bir ONNX dışa aktarımından veya PyTorch kontrol noktasından başlayarak AMD'nin Vitis AI araçlarıyla Ultralytics YOLO26 modelini bugün nasıl dağıtabileceğini gösteriyor.

AMD Xilinx cihazları, dünyanın dört bir yanındaki birçok endüstriyel kameraya, otomotiv görüş sistemine, robota, drone'a ve tıbbi görüntüleme ürününe güç veriyor. Arm işlemcilerini programlanabilir mantıkla ve daha yeni cihazlarda özel AI Engine'lerle birleştirdikleri için tek bir çip video yakalayabilir, videoyu ön işleyebilir, nesne algılama gerçekleştirebilir ve sonucu düşük, öngörülebilir bir çıkarım gecikmesiyle işleyebilir.

Bu kılavuzda her AMD Xilinx cihaz ailesinin ne olduğu, AI'ın bu cihazlarda nasıl çalıştığı, her hızlandırıcının hangi Ultralytics YOLO operatörlerini desteklediği ve YOLO modellerini Zynq UltraScale+, Kria ve Versal donanımlarında dağıtmak için adım adım izlenecek iş akışı ele alınıyor.

AMD Xilinx nedir?#

Xilinx, 1980'lerde sahada programlanabilir kapı dizisi (FPGA) alanını ortaya çıkardı ve uyarlanabilir SoC'ler ve FPGA'ler konusunda lider tedarikçilerden biri oldu. AMD, Xilinx'i Şubat 2022'de satın aldı ve ürün serileri artık AMD markası altında AMD Zynq, AMD Kria, AMD Versal ve AMD Vitis olarak satılıyor.

Xilinx mi, AMD mi?

Her iki ad da aynı ürünleri ifade eder. AMD bu ürünleri "uyarlanabilir SoC'ler ve FPGA'ler" olarak pazarlıyor, ancak mühendisler hâlâ yaygın biçimde "Xilinx" diyor. Parça numaralarında XC ön eki korunuyor (örneğin xczu7ev) ve eski Vitis AI deposu ile Docker görüntüleri GitHub ve Docker Hub'da hâlâ Xilinx adı altında bulunuyor. Bu kılavuz, her iki adla da bulabilmen için "AMD Xilinx" adını kullanıyor.

Temel Terimler ve Kavramlar#

AMD Xilinx dağıtımının kendine özgü bir terminolojisi vardır. Aşağıdaki tabloda bu kılavuzda kullanılan tüm terimler açıklanıyor.

TerimNe anlama geliyor
FPGASahada programlanabilir kapı dizisi: yüklenen ve bit akışı adı verilen bir tasarımla, üretimden sonra dijital mantığı yapılandırılabilen bir çip. Video işlem hatları veya sinir ağı hızlandırıcıları gibi özel donanımları uygulayabilir.
Programlanabilir mantık (PL)AMD Xilinx SoC içindeki FPGA yapısı. Zynq ve Kria cihazlarında AI hızlandırıcı PL içinde oluşturulur.
İşlem sistemi (PS)SoC'nin donanım tabanlı Arm CPU çekirdekleri, bellek denetleyicileri ve çevre birimleri. Linux'u, uygulamanı ve hızlandırıcının çalıştıramadığı model katmanlarını yürütür.
Uyarlanabilir SoC / MPSoCBir işlem sistemini programlanabilir mantıkla ve birçok Versal cihazında AI Engine'lerle birleştiren çip üzerinde sistem. MPSoC, çok işlemcili çip üzerinde sistem anlamına gelir.
AI Engine (AIE, AIE-ML, AIE-MLv2)Burada ele alınan Versal AI Edge serisi de dahil olmak üzere birçok Versal cihazında bulunan, makine öğrenimi ve sinyal işleme için tasarlanmış donanım tabanlı vektör işlemci dizileri.
DPUDerin Öğrenme İşlem Birimi: AMD'nin INT8 sinir ağı hızlandırıcısı. PL içine yerleştirilen bir IP olarak sunulur (örneğin Zynq UltraScale+ ve Kria'daki DPUCZDX8G). B512 ile B4096 arasındaki boyutlar, saat döngüsü başına en yüksek işlem sayısını belirtir.
NPU / NPU IPSinirsel İşlem Birimi: AMD'nin mevcut nesil çıkarım hızlandırıcısı; son Vitis AI sürümlerinde DPU'nun yerini almıştır. AMD, NPU IP'sini AI Engine'leri programlanabilir mantıkla birleştiren yazılım tabanlı bir hızlandırıcı olarak tanımlar; bu nedenle eşleşen bir donanım tasarımı da gerektirir. NPU sözlük maddesine bak.
Vitis AIAMD Xilinx cihazlarında sinir ağlarını dağıtmak için AMD'nin sunduğu araç zinciri. Kuantizasyon, derleme, çalışma zamanları, örnekler ve Docker ortamlarını kapsar.
AMD QuarkVersal AI Edge Gen 2 iş akışının FP32 ONNX modelini INT8 modele dönüştürmek için kullandığı, AMD'nin güncel model kuantizasyonu kütüphanesi.
Kuantizasyon, PTQ ve QATFP32 ağırlıklarını ve aktivasyonlarını INT8'e dönüştürme. Eğitim sonrası kuantizasyon (PTQ), kalibrasyon görüntülerini kullanır. Kuantizasyon farkındalıklı eğitim (QAT), doğruluğu geri kazanmak için modeli ince ayardan geçirir.
Kalibrasyon görüntüleriPTQ sırasında her tensör için INT8 ölçeğini belirlemek amacıyla modelden geçirilen küçük, temsili bir görüntü kümesi.
BF16 ve karma hassasiyetBFloat16, FP32'nin aralığını koruyan 16 bitlik bir kayan nokta biçimidir. Karma hassasiyet, ağın büyük bölümünü INT8'de, hassas katmanları ise BF16'da çalıştırır.
XIRXilinx Ara Gösterimi: DPU derleyicisinin ürettiği ve çalışma zamanının okuduğu grafik biçimi.
.xmodelSerileştirilmiş bir XIR grafiği. Kuantizasyon aracı, kuantize edilmiş bir .xmodel yazar; DPU derleyicisi de bunu DPU komutları, kuantize edilmiş ağırlıklar ve varsa CPU alt grafikleri içeren derlenmiş bir .xmodel dosyasına dönüştürür. Derlenmiş model, eşleşen DPU yapılandırmasını gerektirir.
arch.json / DPU parmak iziBelirli bir DPU yapılandırmasını tanımlayan dosya. DPU derleyicisi bu dosyaya ihtiyaç duyar ve bir parmak izi için derlenen .xmodel başka bir parmak izinde çalışmaz.
Anlık görüntüVersal AI Edge (VEK280) NPU iş akışının ürettiği derlenmiş model dizini. Tek bir NPU IP çeşidine bağlıdır.
.raiVersal AI Edge Gen 2 NPU iş akışının ürettiği derlenmiş model dosyası.
VART / VART-MLDerlenmiş modelleri yükleyen ve kart üzerinde çalıştıran Vitis AI Runtime kütüphaneleri; C++ ve Python API'leri sunar.
ONNX Runtime Vitis AI EPONNX Runtime için VitisAIExecutionProvider; ONNX modellerini AMD NPU'larında derleyip çalıştırır.
CPU geri dönüşü / grafik bölümlemeHızlandırıcı bir operatörü çalıştıramadığında derleyici genellikle modeli hızlandırıcı ve CPU alt grafiklerine ayırır; her bölme, gecikmeye hâkim olabilecek bir veri aktarımı ekler. Bazı operatörler ise tüm modelin CPU'ya alınmasına neden olur veya derlemenin başarısız olmasına yol açar.

Uç AI için AMD Xilinx Cihaz Aileleri#

Uç AI için AMD Xilinx cihazları üç aileye ayrılır. Zynq ve Kria, programlanabilir mantıkta DPU kullanırken burada ele alınan Versal AI Edge cihazları AI Engine'lerde NPU kullanır.

AileTanımUygulama CPU'suAI hızlandırıcısıÖrnek kartlar
Zynq UltraScale+ MPSoCTek çipte Arm CPU'ları ve FPGA mantığı; ZU1'den ZU19'a kadar farklı boyutlardaÇift veya dört çekirdekli Arm Cortex-A53Programlanabilir mantıkta oluşturulan DPUZCU104, ZCU102, özel kartlar
Kria K26 sistem modülüZynq UltraScale+ MPSoC temel alınarak geliştirilmiş, üretime hazır modülDört çekirdekli Arm Cortex-A53Programlanabilir mantıkta oluşturulan DPUKV260 Vision AI Starter Kit, KR260 Robotics Starter Kit
Versal AI Edge SerisiUyarlanabilir SoC'ler; VE2302 ve VE2802 gibi AIE-ML bileşenleri NPU'yu çalıştırırÇift çekirdekli Arm Cortex-A72AIE-ML AI Engine'lerinde ve PL'de NPUVEK280
Versal AI Edge Serisi Gen 2AIE-MLv2 AI Engine'lere sahip yeni nesil uyarlanabilir SoCSekiz Arm Cortex-A78AE'ye kadarAIE-MLv2 AI Engine'lerinde ve PL'de NPUVEK385

Zynq UltraScale+ MPSoC#

Her Zynq UltraScale+ çipi; çift çekirdekli (CG) veya dört çekirdekli (EG ve EV) Cortex-A53 çekirdekleri ve gerçek zamanlı Cortex-R5F çekirdeklerine sahip Arm işlem sistemini FPGA mantığıyla birleştirir. EV cihazları, donanım tabanlı H.264/H.265 video kod çözücü ekler. Sinir ağlarını çalıştırmak için tasarımcılar, kamera ve video işleme hatlarının yanına mantık içinde bir DPU yerleştirir. Küçük cihazlarda DPU, tasarımın geri kalanıyla alan için rekabet eder.

Kria Sistem Modülleri#

Kria K26 modülü, Zynq UltraScale+ MPSoC'yi bellek ve güç bileşenleriyle üretime hazır bir modülde bir araya getirir; böylece işlemciyi, belleği ve güç alt sistemini kendin tasarlamak zorunda kalmazsın. Modül, ister başlangıç kiti kartı ister kendi tasarımın olsun, bir taşıyıcı karta takılır. Akıllı kameralar için KV260 Vision AI Starter Kit, robotik içinse KR260 Robotics Starter Kit kitine güç verir. K26, Zynq UltraScale+ temelinde geliştirildiğinden aynı DPU iş akışını kullanır. Kria ürün portföyünde başka modüller de bulunur; bu nedenle iş akışını seçmeden önce modülünün hangi işlemciyi kullandığını kontrol et.

Versal Uyarlanabilir SoC'ler#

Versal, AMD'nin uyarlanabilir SoC ailesidir. AI Edge ve AI Core serileri, Arm çekirdeklerinin ve programlanabilir mantığın yanına donanım tabanlı AI Engine'ler eklerken bazı diğer Versal serilerinde AI Engine bulunmaz. AMD'nin NPU IP'si AI Engine'lerde ve programlanabilir mantıkta birlikte çalışır; Vitis AI ise AI Edge serisinin VE2302 ve VE2802 gibi AIE-ML bileşenlerini hedefler. Versal AI Edge Serisi (VEK280 değerlendirme kiti) ve Versal AI Edge Serisi Gen 2 (VEK385 değerlendirme kiti), AMD'nin uç AI için mevcut hedefleri ve güncel Vitis AI sürümlerinin odak noktalarıdır.

AMD Xilinx Cihazlarında AI Nasıl Çalışır: DPU ve NPU#

Çoğu AMD Xilinx AI dağıtımı aynı düzeni izler. Hızlandırıcı, desteklediği katmanları çalıştırır; Arm CPU ön işleme, son işleme ve hızlandırıcının çalıştıramadığı katmanları yürütür; karttaki bir çalışma zamanı ise bu ikisini koordine eder.

graph LR
    A[Camera / video input]:::start --> B[Arm CPU<br>Linux, preprocessing,<br>post-processing]:::proc
    B <--> C[AI accelerator<br>DPU in programmable logic<br>or NPU on AI Engines + PL]:::out
    B --> D[Application<br>alerts, control, display]:::start

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff

AMD iki nesil hızlandırıcı sundu ve her birinin kendine ait araç zinciri ile derlenmiş model dosyası var. Bu kılavuz, DPU için Vitis AI 3.5'i ve NPU için Vitis AI 6.3'ü temel alıyor; daha sonraki sürümler için AMD'nin güncel belgelerini kontrol et.

İş akışıDonanımAraç zinciriKuantizasyon aracıDerlenmiş çıktıKart çalışma zamanıDurum
DPUZynq UltraScale+, KriaVitis AI 3.5 (Docker)vai_q_pytorch.xmodelVARTDondurulmuş derleyici, model koleksiyonu ve DPU IP'si
NPU (Versal AI Edge)VEK280 ve diğer Versal AI Edge parçalarıVitis AI 6.3 (Docker)Anlık görüntü akışına yerleşikAnlık görüntüVART-MLEtkin
NPU (Versal AI Edge Gen 2)VEK385 ve diğer Gen 2 parçalarıVitis AI 6.3 (Docker)AMD Quark.raiONNX Runtime Vitis AI EP veya VART-MLEtkin
DPU akışı donduruldu

Vitis AI 3.5, DPU derleyicisi ve model zoo güncellemelerini içeren son sürümdür. Xilinx/Vitis-AI deposundaki sonraki sürümler, derleyiciyi, model zoo'yu ve Zynq UltraScale+ DPU IP'sini değiştirmeden korurken çalışma zamanını ve daha yeni AMD araç sürümleriyle uyumluluğu günceller (Vitis AI 5.0 sürüm notlarına bak). AMD'nin güncel Vitis AI belgeleri, kullanımdan kaldırılan DPU mimarisinin yerine NPU'nun geçtiğini belirtir. Mevcut Zynq UltraScale+ ve Kria ürünleri DPU'yla gönderilmeye devam edebilir, ancak DPU'nun operatör desteği genişlemeyeceğinden daha yeni model mimarileri YOLO Model Uyumluluğu bölümünde açıklanan uyarlamaları gerektirir.

Ryzen AI dizüstü bilgisayarları farklı bir yığın kullanır

Bilgisayarlardaki AMD Ryzen AI işlemciler de bir NPU içerir, ancak bu kılavuzdaki gömülü Vitis AI akışları yerine ayrı Ryzen AI Software yığınını kullanır. AMD Instinct ve Radeon GPU'lar için AMD GPU entegrasyonu bölümüne bak.

Hangi Vitis AI Akışına İhtiyacım Var?#

Kartındaki cihaza göre akışını seç:

graph TD
    A[Start: which AMD device<br>is on your board?]:::start --> B{Device family?}:::decide
    B -->|Zynq UltraScale+ MPSoC<br>or Kria K26| C[DPU flow<br>Vitis AI 3.5]:::proc
    B -->|Versal AI Edge<br>VEK280| D[NPU snapshot flow<br>Vitis AI 6.3]:::proc
    B -->|Versal AI Edge Gen 2<br>VEK385| E[NPU Quark flow<br>Vitis AI 6.3]:::proc
    C --> F[Train YOLO with Hard-Swish<br>then compile to .xmodel]:::out
    D --> G[Run your model on calibration<br>images to capture a snapshot]:::out
    E --> H[Quantize ONNX with Quark<br>then compile to .rai]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff

YOLO Model Uyumluluğu ve Desteklenen Operatörler#

Bir hızlandırıcı yalnızca donanımda uyguladığı operatörleri hızlandırır. Bir model desteklenmeyen bir operatör içerdiğinde derleyici genellikle ağın o bölümünü Arm CPU'ya gönderir ve hızlandırıcı ile CPU arasındaki her gidiş dönüş gecikmeyi artırır. Bazı operatörler bölümlere ayrılamaz: Versal AI Edge Gen 2 NPU'da AMD, NonZero ve NonMaxSuppression gibi tüm modeli CPU'ya yönlendirebilen operatörleri listeler. AMD Xilinx donanımında bir YOLO modelinin ne kadar iyi performans gösterdiğini belirleyen en önemli etken operatör desteğidir.

graph LR
    subgraph S1 [Stock YOLO26 on the DPU]
        A1[Conv]:::out --> A2[SiLU<br>CPU]:::error --> A3[Conv]:::out --> A4[SiLU<br>CPU]:::error --> A5[...]:::proc
    end
    subgraph S2 [Hard-Swish YOLO26 on the DPU]
        B1[Backbone<br>Conv + Hard-Swish<br>DPU]:::out --> B2[C2PSA attention<br>CPU]:::error --> B3[Neck<br>DPU]:::out --> B4[C3k2 attention<br>CPU]:::error --> B5[Detect head<br>DPU]:::out --> B6[Sigmoid and<br>post-processing<br>CPU]:::error
    end

    classDef proc fill:#2196F3,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef error fill:#F44336,color:#fff

Tablo, YOLO26 modelindeki her operatörün nerede çalıştığını gösterir. Standart bir YOLO26n ONNX dışa aktarımı 87 SiLU aktivasyonu içerir; her biri Sigmoid ve Mul olarak dışa aktarılır. Ayrıca iki dikkat bloğundan 4 MatMul ve 2 Softmax operatörü içerir: omurganın sonundaki C2PSA bloğu (katman 10) ve P5 çıktısını üreten, dikkat etkin C3k2 bloğu (katman 22).

OperatörYOLO'da göründüğü yerDPU (Zynq UltraScale+, Kria)NPU (Versal AI Edge Gen 2)
Evrişim + toplu normalleştirmeHer Conv bloğu✅✅
SiLU aktivasyonuHer Conv bloğu (varsayılan aktivasyon)❌ CPU'da çalışır; Hard-Swish ile değiştir✅
Hard-Swish, ReLU, ReLU6, LeakyReLUModel YAML dosyasında ayarlanan isteğe bağlı aktivasyonlar✅ Evrişime birleştirilir✅
SigmoidAlgılama başlığındaki sınıf skorları❌ CPU'da çalışır (genellikle son işlemenin bir parçasıdır)✅
İki aktivasyon arasındaki MatMulDikkat blokları (C2PSA; YOLO26 C3k2)❌ CPU'da çalışır✅
SoftmaxDikkat blokları; YOLOv8 ve YOLO11'de DFL❌ CPU'da çalışır✅
Yeniden şekillendirme, TransposeDikkat blokları⚠️ Mümkünse birleştirilir, aksi durumda CPU'da çalışır✅
Split, SliceC3k2 ve C2f blokları⚠️ Dilimlere dönüştürülür; derleyici raporunu kontrol et✅
Resize (en yakın komşuyla büyütme)Boyun yukarı örneklemesi✅✅
MaxPool, Concat, AddSPPF bloğu ve özellik birleştirme✅✅
TopK, GatherElementsYOLO26 NMS içermeyen başlık (nms=False)❌ CPU'da çalışır⚠️ Arm ana bilgisayarda CPU bölümlemesi
NonMaxSuppressionYalnızca nms=True ile dışa aktarıldığında❌ CPU'da çalışır❌ Modeli CPU'ya yönlendirebilir

Kaynaklar: AMD UG1414 desteklenen operatörler, PyTorch operatör desteği ve Versal AI Edge Gen 2 desteklenen, CPU bölümleme ve desteklenmeyen operatör listeleri. Destek ayrıca DPU yapılandırmana ve grafik örüntülerine bağlıdır; bu nedenle derleyicinin bölümleme raporunu mutlaka kontrol et.

YOLO26 başlığı: DFL yok, NMS içermeyen isteğe bağlı çıktı var

YOLO26, Distribution Focal Loss'u (DFL) kaldırır; bu nedenle YOLO11 ve YOLOv8 modellerinden farklı olarak kutu çıktılarının softmax ile kodunun çözülmesi gerekmez. Ayrıca YOLO11'e kıyasla ikinci bir dikkat bloğu ekler; bu nedenle model seçmeden önce hedefe özgü derleyici raporlarını ve cihaz üzerindeki kıyaslama sonuçlarını karşılaştır. nms ayarlanmadan yapılan dışa aktarımlar, bire-çok başlığı korur ve diğer YOLO modelleri gibi CPU'da NMS gerektirir. Bunun yerine YOLO26'nın NMS içermeyen bire-bir başlığını kullanmak için nms=False ile dışa aktar; bu başlık NMS'nin yerini CPU'da çalışan hafif bir top-k seçimiyle değiştirir.

YOLO26'yı Hard-Swish ile DPU'ya Hazırla#

DPU, evrişimlerine yalnızca ReLU, ReLU6, LeakyReLU, Hard-Swish ve Hard-Sigmoid operatörlerini birleştirir. Hard-Swish, SiLU'nun donanım dostu bir yaklaşımıdır ve bu nedenle doğal bir alternatiftir. Ultralytics model YAML dosyaları, Conv bloklarının varsayılan aktivasyonunu değiştiren bir activation anahtarını kabul eder (Model YAML Yapılandırma Kılavuzu).

yolo26.yaml dosyasını yolo26-hswish.yaml konumuna kopyala ve parametrelerin altına bir satır ekle:

# Parameters
nc: 80 # number of classes
activation: nn.Hardswish() # default Conv activation, DPU-native
end2end: True # whether to use end-to-end mode

Ardından modeli oluştur, önceden eğitilmiş YOLO26 ağırlıklarını aktar ve veri kümen üzerinde ince ayar yap:

Hard-Swish YOLO26 modelinde ince ayar yap
from ultralytics import YOLO

# # Hard-Swish aktivasyonlarıyla YOLO26n oluştur; addaki 'n' nano ölçeğini seçer
model = YOLO("yolo26n-hswish.yaml").load("yolo26n.pt")  # # önceden eğitilmiş ağırlıkları aktar

# # Ağın Hard-Swish'e uyum sağlaması için ince ayar yap
model.train(data="coco8.yaml", epochs=100, imgsz=640)

Aktivasyonların ağırlığı yoktur, bu nedenle önceden eğitilmiş tüm ağırlıklar aktarılır. Dışa aktarılan ONNX grafiği daha sonra 87 HardSwish operatörü içerir ve hiç SiLU içermez. coco8.yaml öğesini kendi veri kümenle değiştir ve dağıtımdan önce Val modu ile SiLU modeline kıyasla doğruluğu karşılaştır.

Yeniden eğitime alternatifler
  • Niceleme sırasında değiştir: Niceleme sırasında SiLU'yu değiştirmek için Vitis AI 3.5 PyTorch niceleyicisinin JSON yapılandırmasında "convert_silu_to_hswish": true öğesini ayarla. Böylece bir eğitim çalışması gerekmez, ancak genellikle doğruluk kaybı daha fazla olur; AMD'nin hızlı ince ayarı veya QAT bu kaybı kısmen telafi edebilir. vai_q_pytorch yapılandırma kılavuzuna bak.
  • LeakyReLU: DPU, LeakyReLU'yu 26/256 (yaklaşık 0,1) sabit negatif eğimle uygular. LeakyReLU kullanıyorsan, eğitim ve dağıtım eğimlerinin eşleşmesi için activation: nn.LeakyReLU(0.1015625) ile eğit.

DPU'da Dikkat Bloklarını Ele Alma#

YOLO26, dikkati en düşük çözünürlükte (640 girişte 20×20 ızgara) iki yerde uygular: 10. katmandaki C2PSA bloğunda ve 22. katmandaki, dikkat etkin C3k2 bloğunda. YOLO11'de bir C2PSA bloğu bulunur. DPU'da bu blokların MatMul ve Softmax operatörleri CPU'da çalışır; bu da modeli dönüşümlü DPU ve CPU alt grafiklerine böler. Üç seçeneğin var:

  1. CPU bloklarını kabul et. Derlenen .xmodel dosyası CPU alt grafikleri içerir. Bu nedenle, her operatör için CPU uygulaması mevcutsa DPU ve CPU alt grafiklerini birlikte çalıştıran AMD Graph Runner ile çalıştır. Aksi takdirde eksik operatörleri kendin uygulayıp kaydetmelisin. 20×20 boyutunda dikkat hesaplaması küçüktür, ancak DPU ile CPU arasındaki her ek aktarım gecikmeyi artırır; bu nedenle kartında ölçüm yap.

  2. Dikkat içermeyen bir YAML kullan. Hard-Swish YAML dosyanda C2PSA katmanını nn.Identity ile değiştirerek Concat ve Detect tarafından kullanılan katman dizinlerini geçerli tut; ayrıca 22. katmandaki dikkati devre dışı bırak:

    backbone:
        # ... layers 0-9 unchanged
        - [-1, 1, nn.Identity, []] # 10 C2PSA removed; keeps later layer indices valid
    
    head:
        # ... layers 11-21 unchanged
        - [-1, 1, C3k2, [1024, True, 0.5, False]] # 22 (P5/32-large), attention disabled
        - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

    Dışa aktarılan ONNX grafiği artık MatMul veya Softmax operatörleri içermez. Dikkat ağırlıkları artık geçerli olmadığından (YOLO26n'deki 666 ağırlığın 624'ü aktarılır), daha uzun süre ince ayar yap ve doğruluğu Val modu ile karşılaştır.

  3. AMD'nin kendi DPU örneklerinde kullandığı YOLOv8 gibi dikkat içermeyen bir model kullan.

Versal AI Edge Gen 2'de dikkat operatörleri NPU tarafından desteklenenler arasında listelenir; bu nedenle bu değişiklikler genellikle gerekli olmaz. Yerleşimi derleyici raporunda doğrula; çünkü AMD, yapılandırma veya bellek kısıtlamaları nedeniyle desteklenen operatörlerin yine de CPU'ya aktarılabileceğini belirtir.

Model Uyumluluğuna Genel Bakış#

ModelDPU (Zynq UltraScale+, Kria)NPU (Versal AI Edge Gen 2)
YOLO26Hard-Swish ile eğit; iki dikkat bloğu CPU alt grafiklerine dönüşür; DFL yokDeğişiklik yapmadan çalışması beklenir; kartında doğrula
YOLO11Hard-Swish ile eğit; C2PSA ve DFL softmax CPU'da çalışırDeğişiklik yapmadan çalışması beklenir; kartında doğrula
YOLOv8Hard-Swish ile eğit; DFL softmax CPU'da çalışırAMD'nin YOLOv8m öğreticisi (Vitis AI 6.3, VEK385, BF16 kuyruklu INT8): derleyici raporunda 1.181 operatör (%99,915) ve GOP'ların %99,994'ü NPU'da görünüyor; modelde değişiklik yok

YOLO26'yı Bugün AMD Xilinx'te Dağıt#

Yerel dışa aktarma kullanılabilir olana kadar dağıtım dört adımda gerçekleştirilir:

graph LR
    A[1. Train or fine-tune<br>Ultralytics YOLO]:::start --> B{Target?}:::decide
    B -->|Versal NPU| C[2. Export to ONNX<br>model.export]:::proc
    B -->|Zynq or Kria DPU| D[2. Keep the trained<br>PyTorch checkpoint]:::proc
    C --> E[3. Quantize and compile<br>Vitis AI 6.3 Docker]:::proc
    D --> F[3. Quantize and compile<br>Vitis AI 3.5 Docker]:::proc
    E --> G[4. Run on the board<br>VART-ML or ONNX Runtime]:::out
    F --> H[4. Run on the board<br>VART]:::out
    G -.->|accuracy check| A
    H -.->|accuracy check| A

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff

1. Adım: Modelini Eğit veya İnce Ayar Yap#

Kendi verilerinle Train modunu veya Ultralytics Platform'u kullanarak eğitim yap. DPU hedefleri için Hard-Swish YAML dosyasından başla. Nicelemenin doğruluk üzerindeki etkisini daha sonra ölçebilmek için Val modu ile bir temel değer kaydet.

2. Adım: NPU Hedefleri için ONNX'e Dışa Aktar#

ONNX, AMD'nin NPU akışları için ortak girdidir. DPU akışı, eğitilmiş PyTorch kontrol noktasını doğrudan Vitis AI 3.5 Docker görüntüsünde niceler; bu nedenle DPU kullanıcıları bu adımı atlayabilir. Sabit 1 batch boyutuyla ve AMD'nin desteklediği bir opset kullanarak dışa aktar; AMD'nin Versal AI Edge Gen 2 için YOLOv8m öğreticisi opset 17 kullanır.

Dışa aktar
from ultralytics import YOLO

# # 1. Adımda eğittiğin modeli yükle
model = YOLO("runs/detect/train/weights/best.pt")

# # AMD derleyicisi için statik şekille ONNX'e dışa aktar
model.export(format="onnx", opset=17, imgsz=640)  # # 'best.pt' dosyasının yanına 'best.onnx' oluşturur

Tüm seçenekler için ONNX entegrasyonu ve dışa aktarma bağımsız değişkenleri bölümlerine bak. nms ayarlanmamışsa çıkarım sonrasında NMS'yi CPU'da çalıştır; YOLO26 için nms=False bunun yerine NMS içermeyen başlığı seçer. AMD'nin NonMaxSuppression'ı tüm modeli CPU'ya yönlendirebilen operatörler arasında listelemesi nedeniyle NMS'yi nms=True ile modele gömme.

AMD'nin ONNX Runtime derlemesini koru

AMD'nin Docker görüntüleri, Vitis AI Execution Provider içeren kendi ONNX Runtime derlemeleriyle gelir. Ultralytics, dışa aktarma sırasında ONNX Runtime'ı kontrol eder ve standart paketi bu derlemenin üzerine yükleyebilir. Dışa aktarmayı herhangi bir makinede yapıp .onnx dosyasını kapsayıcıya kopyala veya Ultralytics'i AMD'nin Docker görüntüsünde çalıştırırken YOLO_AUTOINSTALL=false ayarla.

3. Adım: Vitis AI ile Nicele ve Derle#

Aşağıdaki iş akışlarında x86-64 Linux ana bilgisayarındaki AMD Docker görüntüleri kullanılır. Bu adım için karta ihtiyacın yok. Cihazına ait sekmeyi seç:

  1. Versal AI Edge Gen 2 için AMD'nin Vitis AI 6.3 Docker görüntüsünü başlat. Sistem gereksinimlerine bak.
  2. ONNX modelini VINT8 yapılandırmasıyla AMD Quark kullanarak INT8'e nicele. AMD'nin minimum yapılandırması ayrıca Int32Bias=False, enable_npu_cnn=True, DedicatedQDQPair=True ve QuantizeAllOpTypes=True öğelerini gerektirir. Quark, kalibrasyon verilerini senin yazacağın bir veri okuyucu aracılığıyla okur; bu nedenle çıkarımla aynı ön işlemeyi uygula: veri kümenin temsili görüntülerinde dışa aktarma boyutuna letterbox ile yeniden boyutlandırma, RGB kanal sırası, 0–1 ölçekleme ve NCHW düzeni.
  3. İşlem sonrası alt grafiği nicemlemenin dışında bırak. AMD'nin YOLOv8m öğreticisi, bu alt grafiğin nicemlenmesinin tespitlerin kaçırılmasına neden olduğu konusunda uyarıyor. Bu YOLOv8m örneğinde derleyici, son katmanı NPU'da BF16 ile çalıştırıyor; YOLO26'nın top-k seçimi gibi desteklenmeyen son katman operatörleri ise CPU'da çalışıyor.
  4. Derlemeden önce kart çalışma zamanını seç. Standart derleme, YOLO26'nın top-k seçimi gibi NPU ile uyumlu olmayan operatörleri CPU'nun kendisinde çalıştıran ONNX Runtime ile ve yalnızca her operatör NPU'da çalıştığında VART-ML ile çalışır. CPU operatörlerini koruyan bir modeli VART-ML ile çalıştırmak için AMD'nin CPU bölümleme geçişlerini vitisai_config.json öğesine ekle. Bu yapıtlar ONNX Runtime üzerinden çalıştırılamaz.
  5. Derlemek için VitisAIExecutionProvider ve hedef cihazını belirten bir vitisai_config.json ile ONNX Runtime oturumu oluştur. Derleme, önbellek dizinine bir .rai dosyası yazar. Model derleme konusuna bak.

Nicemlemeyi atlamak için FP32 ONNX modelini doğrudan derle; derleyici modeli BF16'ya dönüştürür. Derleme için AMD AI Engine derleyici lisansı gerekir; AMD'nin lisanslama sayfasına bak.

4. Adım: Kartta Çalıştırma ve Doğrulama#

Önce kartı hazırla. Kartta, derlediğin hızlandırıcı yapılandırmasını içeren bir donanım tasarımı ve Linux imajının yanı sıra eşleşen Vitis AI çalışma zamanı da çalışmalıdır. AMD'nin Zynq UltraScale+ ve Kria DPU hedefleri, Versal AI Edge (VEK280) ve Versal AI Edge Gen 2 (VEK385) için kurulum kılavuzlarına bak.

Ardından çalışma zamanının ihtiyaç duyduğu yapıtları kopyala:

İş akışıKarta kopyalanacak yapıtlarKart çalışma zamanı
DPU (Zynq UltraScale+, Kria)Derlenmiş .xmodelVART; CPU alt grafikleri için Graph Runner
NPU (Versal AI Edge, VEK280)Anlık görüntü diziniVART-ML
NPU (Versal AI Edge Gen 2), ORTDerleme için kullanılan FP32 veya nicemlenmiş ONNX modeli, vitisai_config.json ve derlenmiş önbellek diziniVitis AI EP ile ONNX Runtime
NPU (Versal AI Edge Gen 2), VART-ML.rai dosyası (herhangi bir operatör CPU'da çalışıyorsa CPU bölümleme geçişleriyle birlikte) ve bir VART-ML çalıştırıcı yapılandırmasıVART-ML

NPU akışlarında dışa aktarılan ONNX grafiği, kutuları zaten çözümler ve sınıf puanlarının sigmoid işlemini uygular; bu nedenle ana makine yalnızca çıktıyı yorumlar:

  • nms ayarlanmamış: tespit modelleri, xywh kutu ve sınıf başına puan içeren bir (1, 4 + nc, anchors) tensörü çıktılar. Her anchor için en iyi sınıfı seç, kutuları köşe koordinatlarına dönüştür, güven puanına göre filtrele ve NMS çalıştır; Ultralytics non_max_suppression işlevi bu adımların tümünü gerçekleştirir.
  • nms=False (YOLO26): model, yalnızca bir güven eşiği gerektiren [x1, y1, x2, y2, score, class] satırdan oluşan bir (1, max_det, 6) tensörü çıktılar.

Her iki durumda da kutuları letterbox uygulanmış girişten özgün görüntüye geri ölçeklendir. Yalnızca çözümleme adımından önce kesilen grafiklerde kutuların ana makinede çözülmesi gerekir. DPU'da VART arabellekleri sabit noktalı INT8 değerleri tutar: her tensörün şeklini ve fix_point ölçeğini sorgula; yukarıdaki adımları uygulamadan önce girişleri nicemle ve çıktıları nicemden arındır. Graph Runner tüm grafiğin çıktılarını döndürürken yalnızca DPU'yu çalıştıran bir çalıştırıcı, kodunun hesaplamayı tamamlaması gereken ara DPU alt grafik çıktıları döndürür. Yukarıdaki düzenler ONNX düzenleridir (CPU görünümü): VART-ML varsayılan olarak şekli, veri türü ve bellek düzeni farklı olabilen donanım tensörü görünümlerini kullanır. Bu nedenle çalıştırıcının giriş ve çıkış tensörü türlerini CPU görünümleri olarak yapılandır veya donanım biçimini kendin dönüştür (AMD'nin VART-ML mimarisine genel bakışına bak).

Cihaz üzerindeki doğruluğu, kendi doğrulama kümeni ve performans metrikleri ile 1. Adımdaki FP32 temel değerine göre karşılaştır; örneğin mAP kullan. AMD'nin VEK385 üzerindeki YOLOv8m için yayımladığı sonuçlar, INT8 dağıtımının doğruluk maliyetini gösteriyor:

YOLOv8m yapılandırmasıDonanımmAP50-95 (COCO)
FP32 ONNXAna makine CPU'su49.95
BF16VEK385 NPU50.29
VINT8 nicemlenmiş, FP32 son katmanAna makine CPU'su48.75
BF16 son katmanlı VINT8VEK385 NPU48.38

Kaynak: AMD'nin Versal AI Edge Gen 2 için YOLOv8m öğreticisi; öğretici ayrıca dp_size=1 değerinde 100 VART çalıştırması üzerinden ortalama 10.69 ms çıkarım süresi bildiriyor.

Ticari ürünler için lisanslama

Ultralytics YOLO'yu ticari bir AMD Xilinx ürününde sunmak için AGPL-3.0 lisansına veya bir Ultralytics Enterprise Lisansına uygun hareket etmen gerekir.

Gerçek Dünya Uygulamaları#

AMD Xilinx cihazları, görüntü yapay zekâsının gerçek zamanlı, düşük güç tüketimiyle ve sensöre yakın çalışması gereken yerlerde yaygın olarak kullanılır:

  • Endüstriyel ve inşaat güvenliği: Ağır ekipmanların çevresindeki insanları ve makineleri tespit et, çalışma alanlarını nesne tespiti ve nesne sayımı ile izle.
  • Otomotiv ve karayolu dışı araçlarda görüntü işleme: Nitelikli otomotiv sınıfı parçalarda kamera tabanlı algılamayı çalıştırarak otonom araçları ve sürücü destek sistemlerini destekle.
  • Akıllı kameralar ve video analitiği: Güvenlik sistemleri ve video analitiği için video yakalamayı, kodlamayı ve YOLO çıkarımını tek bir çipte birleştir.
  • Makine görüşü ve kalite denetimi: Hat içi kusur tespiti için FPGA tabanlı yüksek hızlı görüntü yakalamayı YOLO örnek segmentasyonu veya sınıflandırma ile birleştir.
  • Robotik ve dronlar: Belirleyici gecikmeyle poz tahmini, yönelimli nesne tespiti ve navigasyon için Kria KR260 veya Versal modüllerini kullan.

Özet#

AMD Xilinx cihazları, YOLO modellerini iki hızlandırıcı nesli üzerinden çalıştırır. Zynq UltraScale+ ve Kria'daki DPU, dondurulmuş Vitis AI 3.5 akışını kullanır ve .xmodel dosyaları üretir. Hard-Swish gibi DPU'ya özgü aktivasyonlar gerektirir ve attention işlemlerini CPU'da çalıştırır. Versal AI Edge ve Versal AI Edge Gen 2'deki NPU, güncel Vitis AI sürümlerini kullanır. Gen 2 NPU, SiLU ve attention operatörlerini destekler ve AMD'nin YOLOv8m örneğini VEK385 üzerinde neredeyse tamamen NPU'da çalıştırır; daha eski VEK280 NPU'daki operatör desteği ise Vitis AI sürümüne ve duyarlığa bağlıdır.

AMD Xilinx cihazları için yerel Ultralytics dışa aktarımı yakında sunulacak. O zamana kadar Ultralytics ile eğitim yap, Versal NPU hedefleri için ONNX'e dışa aktar veya DPU hedefleri için PyTorch kontrol noktasını koru ve yukarıda açıklandığı gibi Vitis AI ile derle. Diğer dağıtım hedefleri için model dağıtım seçenekleri kılavuzuna, dağıtım için en iyi uygulamalara ve Hailo, Rockchip RKNN ve Axelera gibi hızlandırıcı entegrasyonlarına bak.

Sık Sorulan Sorular#

  • Evet. AMD, Xilinx'i Şubat 2022'de satın alma işlemini tamamladı ve Xilinx ürünleri artık AMD uyarlanabilir SoC'leri ve FPGA'leri olarak satılıyor: AMD Zynq, AMD Kria, AMD Versal ve AMD Vitis. Mühendisler Xilinx adını hâlâ yaygın olarak kullanıyor ve parça numaraları XC önekini koruyor.

  • Henüz değil. AMD Xilinx cihazları için yerel Ultralytics dışa aktarımı yakında sunulacak. Şimdilik Versal NPU hedefleri için model.export(format="onnx") ile ONNX'e dışa aktar veya Zynq UltraScale+ ve Kria DPU hedefleri için eğitilmiş PyTorch kontrol noktasını vai_q_pytorch ile nicemle; ardından YOLO26'yı Bugün AMD Xilinx'te Dağıtma bölümünde gösterildiği gibi AMD'nin Vitis AI araçlarıyla derle.

  • DPU (Derin Öğrenme İşlem Birimi), AMD'nin önceki INT8 hızlandırıcısıdır. Zynq UltraScale+ ve Kria cihazlarının programlanabilir mantık bölümünde yerleşiktir, Vitis AI 3.5 ile derlenir ve .xmodel dosyaları üretir. Güncel Vitis AI sürümlerinde yerini NPU almıştır. Versal AI Edge cihazlarında NPU, güçlendirilmiş AI Engines'ı programlanabilir mantıkla birleştirir; INT8, BF16 ve karma duyarlığı destekler ve SiLU ile Versal AI Edge Gen 2'de attention dâhil daha fazla operatörü destekler.

  • .xmodel, AMD DPU araç zincirinin kullandığı serileştirilmiş bir XIR grafiğidir. Nicemleyici, nicemlenmiş bir .xmodel yazar; vai_c_xir derleyicisi bunu DPU komut akışını, nicemlenmiş INT8 ağırlıklarını ve CPU'da çalışması gereken alt grafikleri içeren derlenmiş bir .xmodel biçimine dönüştürür. Derlenmiş dosya, arch.json parmak iziyle tanımlanan belirli bir DPU yapılandırmasını hedefler ve kartta Vitis AI Runtime (VART) üzerinden veya CPU alt grafikleri içeriyorsa Graph Runner üzerinden çalışır.

  • Hayır. DPU yalnızca ReLU, ReLU6, LeakyReLU, Hard-Swish ve Hard-Sigmoid aktivasyonlarını hızlandırır; iki aktivasyon arasındaki Sigmoid, Softmax ve MatMul işlemlerini CPU'da çalıştırır. Evrişimleri DPU'da tutmak için model YAML'ında activation: nn.Hardswish() ile YOLO'yu eğit ve attention seçenekleri için DPU'da Attention Bloklarını Ele Alma bölümüne bak. Versal AI Edge Gen 2 NPU'ları SiLU, Softmax ve MatMul işlemlerini yerel olarak destekler.

  • KV260, DPU'lu bir Zynq UltraScale+ MPSoC kullanır; bu nedenle DPU akışını izle. Hard-Swish kullanan bir YOLO26 modelini eğit, Vitis AI 3.5 Docker imajındaki vai_q_pytorch ile nicemle, KV260'ın arch.json yapılandırmasını kullanan vai_c_xir ile derle ve ortaya çıkan .xmodel dosyasını kartta VART ile veya CPU alt grafikleri içeriyorsa Graph Runner ile çalıştır.

  • Hayır. Nicemleme ve derleme, AMD'nin Vitis AI Docker imajlarında x86-64 Linux ana makinesinde çalışır. Derlenen modeli çalıştırmak, cihaz üzerindeki gecikmeyi ve doğruluğu ölçmek için karta ihtiyacın var.

  • Operatörleri hızlandırıcın için derlenebildiği sürece her görev çalışabilir. Desteklenmeyen operatörler genellikle CPU'da çalışır, ancak bazıları tüm modelin CPU'ya yönlendirilmesine veya derlemenin başarısız olmasına neden olabilir. Nesne tespiti en yaygın iş yüküdür ve AMD'nin kendi örneklerinde kullandığı görevdir. Segmentasyon, poz tahmini ve diğer görevler için ağır katmanların hızlandırıcıda çalıştığını doğrulamak üzere derleyicinin bölümleme raporunu kontrol et.

Katkıda Bulunanlar

Yorumlar