Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Üretimde Ultralytics YOLO·Optimize et·Ders 4/9
Dersorta düzey

CPU'da OpenVINO

FP32, FP16 ve INT8 OpenVINO modellerini dışa aktar, her birini doğrula ve INT8'i yalnızca kendi CPU'nda avantaj sağladığı durumlarda kullan.

Sahip olduğun bir Intel CPU, çoğu zaman GPU örneğinin yerini alabilir: Ultralytics kıyaslamalarında YOLO26m, PyTorch'ta 192 ms'den dizüstü bilgisayar Core Ultra CPU'da OpenVINO INT8 ile 36 ms'ye düşüyor. Ancak kazanım çipe bağlıdır; ayrıca bu kurs için kullanılan ARM test dizüstü bilgisayarında dört görüntüyle kalibre edilen INT8 dışa aktarımı 3 mAP puanı kaybettirdi. Kullanıma almadan önce hangi durumda olduğunu ölçmeyi öğreneceksin.

Sonuç

FP32, FP16 ve INT8 OpenVINO modellerini dışa aktar, doğruluklarını ve hızlarını kendi CPU'nda karşılaştır ve seçimini yazılı bir gerekçeyle yap.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. yolo export model=yolo26n.pt format=openvino, yolo26n_openvino_model/ dosyasını yazar.

  2. FP16 (quantize=16) dosya boyutunu yarıya indirir, ancak çoğu CPU'da FP32 hızında çalışır. Intel'de CPU hızını artıran seçenek INT8'dir (quantize=8 data=your.yaml).

  3. Çıkarım sırasında Intel aygıtını seç: device="intel:cpu", "intel:gpu" veya "intel:npu".

  4. Sonraki dışa aktarma klasörünün üzerine yazmadan önce her hassasiyeti doğrula; hedefte ONNX Runtime ile karşılaştırmalı kıyaslama yap.

Uygulamalı

OpenVINO Ne Sağlar?#

OpenVINO ekosistemi: PyTorch, TensorFlow, Keras, TensorFlow Lite, ONNX, JAX ve PaddlePaddle modelleri; Windows, Linux ve macOS üzerinde OpenVINO aracılığıyla Intel CPU'larda (ve ARM'de), Intel GPU'larda, Intel NPU'larda ve FPGA'larda çalışır

OpenVINO, PyTorch ve ONNX modellerini alır ve tek bir API üzerinden Intel CPU'larda, tümleşik ve ayrı GPU'larda ve NPU'larda çalıştırır. CPU çekirdekleri Intel komut kümelerini (AVX2, AVX-512, AMX) hedefler ve INT8 yolu olgunlaşmıştır. CPU sütunundaki ARM kutucuğuna dikkat et: OpenVINO ARM'de de çalışır, ancak çekirdekleri Intel için ayarlanmıştır; bu yüzden ARM'de ona güvenmeden önce ölçüm yap.

Intel Core Ultra 7 155H CPU'da yayımlanan kıyaslama sonucu (COCO128):

ModelPyTorch FP32OpenVINO FP32OpenVINO INT8FP32 → INT8 mAP50-95
YOLO26n33.19 ms13.43 ms11.40 ms0.4734 → 0.4611
YOLO26s70.92 ms36.16 ms15.54 ms0.5632 → 0.5471
YOLO26m192.45 ms102.52 ms35.72 ms0.6191 → 0.6025

Bu tablodan üç kural çıkıyor:

  • OpenVINO FP32, Intel CPU'da PyTorch gecikmesini tek başına yaklaşık yarıya indirir. Önce bunu dene.
  • Model büyüdükçe INT8 daha fazla kazanç sağlar: n için 1,2×, m için 2,9× hız; bunun karşılığında 1,2–1,7 mAP puanı kaybedilir. n üzerinde INT8, doğruluk kaybına nadiren değer.
  • Donanım almadan önce tümleşik GPU'yu dene: aynı çipteki Arc iGPU (device="intel:gpu"), YOLO26n FP32'yi 9,13 ms'de, YOLO26m'yi ise 34,47 ms'de çalıştırdı.

Hassasiyetleri Kendi CPU'nda Karşılaştır#

Her hassasiyeti dışa aktar, hemen doğrula ve ancak bundan sonra sıradakini dışa aktar:

from ultralytics import YOLO

if __name__ == "__main__":  # validation starts worker processes on macOS and Windows
    model = YOLO("yolo26n.pt")  # or runs/detect/pills_v1/weights/best.pt
    for name, quantize in (("FP32", None), ("FP16", 16), ("INT8", 8)):
        path = model.export(format="openvino", quantize=quantize, data="coco8.yaml")  # or my_dataset/data.yaml
        m = YOLO(path).val(data="coco8.yaml", batch=1, plots=False, verbose=False)  # before the next export overwrites it
        print(f"{name}: mAP50-95 {m.box.map:.4f}  -> {path}")
OpenVINO: export success ✅ 2.3s, saved as 'yolo26n_openvino_model/' (9.6 MB)
FP32: mAP50-95 0.6783  -> yolo26n_openvino_model/
OpenVINO: export success ✅ 1.6s, saved as 'yolo26n_openvino_model/' (5.1 MB)
FP16: mAP50-95 0.6783  -> yolo26n_openvino_model/
WARNING ⚠️ OpenVINO: >300 images recommended for INT8 calibration, found 4 images.
OpenVINO: export success ✅ 11.3s, saved as 'yolo26n_int8_openvino_model/' (3.2 MB)
INT8: mAP50-95 0.6460  -> yolo26n_int8_openvino_model/

Her satırın gösterdiği:

  • FP32 ve FP16 aynı sonucu verir ve FP16'nın boyutu yarısıdır (5,1'e karşı 9,6 MB); ancak ikisi de aynı klasöre yazılmıştır. Önce ikisini de dışa aktarıp sonra doğrulasaydın FP16'yı iki kez ölçmüş olacaktın.
  • INT8 3,2 MB boyutundadır ve 3,2 puan kaybettirdi, çünkü COCO8'in dört görüntüsüyle kalibre edildi. Uyarı bunu belirtiyor: doğru kalibrasyon için kendi YAML dosyandan yüzlerce üretim benzeri görüntü gerekir (fraction kullanılacak görüntü sayısını sınırlar).
  • Bunların hiçbiri hızı ölçmez. Bunun için aşağıdaki kıyaslamayı kullan.

Dışa aktarılan bir modeli belirli bir Intel aygıtında çalıştırmak için:

from ultralytics import YOLO

ov_model = YOLO("yolo26n_openvino_model/")
results = ov_model("https://ultralytics.com/images/bus.jpg", device="intel:cpu")  # veya intel:gpu, intel:npu

Klasörün tamamını dağıt: yolo26n.xml (graf), yolo26n.bin (ağırlıklar) ve metadata.yaml. intel:gpu ve intel:npu için Intel donanımı gerekir.

ONNX Runtime ile Süreyi Karşılaştır#

Doğruluk konusu tamam; hızı hedef cihazda ve gerçekten taşıyacağı yük altında belirlersin. İlk dersteki pick_runtime.py komutunu CANDIDATES = ("onnx", "openvino") ile çalıştır. CPU'yu başka işlerin de kullandığı Apple silicon test dizüstü bilgisayarında sonuçlar şöyleydi:

onnx      p50  30.0 ms  p95  46.4 ms  misses the 30 ms budget
openvino  p50  22.8 ms  p95 113.5 ms  misses the 30 ms budget

OpenVINO'nun medyanı daha iyiydi, ancak kuyruk gecikmesi çok daha kötüydü. Ultralytics sarmalayıcısı OpenVINO'yu LATENCY ipucuyla derler (günlükte Using OpenVINO LATENCY mode for batch=1 inference on CPU yazar); bu, her isteği CPU çekirdeklerine yayar. Başka işler bu çekirdekler için yarıştığında en yavaş istekler en çok etkilenir. Özel bir Intel bilgisayarda sonuçlar genellikle yukarıda yayımlanan değerlere benzer, ancak bunu yalnızca kendi p95 ölçümün gösterebilir.

Karar kuralları:

Yaygın Hatalar#

FP16'nın CPU'yu hızlandırmasını bekleme

Belirti: FP16 dışa aktarımı yarı boyutta, ancak tam olarak aynı hızda. Çözüm: Çoğu CPU'da eklenti kendi yürütme hassasiyetini seçer; daha küçük indirmeler için FP16, hız için INT8 veya iGPU kullan.

Tüm dışa aktarımlardan sonra doğrulama

Belirti: FP32 ve FP16 aynı dosya oldukları için aynı sonuçları bildiriyor. Çözüm: FP32 ve FP16 dışa aktarımları *_openvino_model/ klasörünü paylaşır; her dışa aktarımdan hemen sonra doğrula (veya klasörün adını değiştir).

Boşta çalışan bir makinede kıyaslama

Belirti: Ortalama değer iyi görünüyor, ancak yoğun anlarda kareler yine de atlanıyor. Çözüm: Üretim yükü çalışırken çıkarım süresini ölç ve ortalamaya değil p95'e göre karar ver. Tek sunucuda çok sayıda akış için, gecikme ve verim modları kılavuzunda gösterildiği gibi .xml dosyasını doğrudan OpenVINO çalışma ortamıyla yükleyip THROUGHPUT ipucuyla derle.

Doğrulama yapan betikleri koruma altına al

macOS ve Windows'ta doğrulama, betiğini yeniden içe aktaran çalışan süreçleri başlatır. if __name__ == "__main__": olmadan bu dersin test çalıştırması, dışa aktarımları çalışan süreçlerde tekrarlayarak dakikalarca zaman kaybetti ve ölçmeye çalıştığı CPU için rekabete yol açtı.

Dene

Hedef CPU'nda kendi modelin ve veri kümesi YAML dosyanla ov_compare.py komutunu çalıştır; ardından üretim yükü (veya benzeri) devam ederken ONNX ve OpenVINO ile pick_runtime.py komutunu çalıştır. Kısa bir tablo (hassasiyet veya çalışma zamanı, mAP50-95, boyut, p95 ms) ve neyi kullanıma alacağını belirten tek cümle sun.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Aynı modelin FP32, FP16 ve INT8 OpenVINO dışa aktarımlarını aynı veriler üzerinde doğruladın.

  • Gerçekçi yük altında aynı makineden p95 OpenVINO ve ONNX Runtime gecikme değerlerini aldın.

  • Hassasiyet ve çalışma zamanı seçimini, ölçtüğün mAP maliyetine ve hız kazanımına dayandırıyorsun.

Çözümü göster
python ov_compare.py    # accuracy and size of FP32, FP16, INT8
python pick_runtime.py  # p50 and p95 for ONNX Runtime and OpenVINO

Yukarıdaki Core Ultra 7 155H değerleriyle yapılmış örnek bir karar:

SeçenekmAP50-95Boyutgörüntü başına ms
OpenVINO FP320.47349.6 MB13.43
OpenVINO INT80.46113.2 MB11.40
iGPU FP32 (intel:gpu)0.47589.6 MB9.13

Entegre GPU'da OpenVINO FP32'yi dağıtıma al: en hızlı seçenek ve hiçbir kayıp yaratmıyor; CPU'da INT8 ise 2 ms kazanmak için 1,2 puana mal oluyor. YOLO26m dağıtımında, bu kayıp bütçene uygunsa tercih CPU INT8'e dönüyor (1,7 puan karşılığında 2,9× daha hızlı).

Sırada ne var

Tekil karelerdeki algılamalar temel yapı taşlarıdır. Sırada bunları kararlı kimliklere sahip kalıcı nesnelere dönüştüren takip var.

İlerlemeni kaydetmek için giriş yap