Ultralytics YOLO27:
Get Started

Ultralytics YOLO ile Çoklu Nesne Takibi#

YOLO multi-object tracking with trajectory paths

Video analitiği alanında nesne takibi, yalnızca kare içindeki nesnelerin konumunu ve sınıfını belirlemekle kalmayıp video ilerledikçe algılanan her nesneye benzersiz bir kimlik atamayı da gerektiren kritik bir görevdir. Gözetim ve güvenlikten gerçek zamanlı spor analitiğine kadar sınırsız sayıda uygulama alanı vardır.

Planlanan takip desteği için yayımlanmamış YOLO27 önizlemesine göz at.

🚀 Yeni takip algoritmaları: OC-SORT, Deep OC-SORT, FastTracker, TrackTrack

ultralytics 8.4.63 sürümünden itibaren OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack, BoT-SORT ve ByteTrack'in yanında kullanılabilir.

Nesne Takibi için Neden Ultralytics YOLO'yu Seçmelisin?#

Ultralytics takip algoritmalarının çıktısı standart nesne algılamayla tutarlıdır, ancak nesne kimlikleri de sağlar. Bu sayede video akışlarındaki nesneleri takip etmek ve sonraki analizleri gerçekleştirmek kolaylaşır. Nesne takibi ihtiyaçların için Ultralytics YOLO'yu kullanmayı düşünmen için bazı nedenler:

  • Verimlilik: Doğruluktan ödün vermeden video akışlarını gerçek zamanlı işle.
  • Esneklik: Birden fazla takip algoritmasını ve yapılandırmasını destekler.
  • Kullanım Kolaylığı: Hızlı entegrasyon ve dağıtım için basit Python API'si ve CLI seçenekleri sunar.
  • Özelleştirilebilirlik: Özel olarak eğitilmiş YOLO modelleriyle kolayca kullanılabilir ve belirli bir alana yönelik uygulamalara entegre edilebilir.


İzle: Ultralytics YOLO26 ile Çoklu Nesne Takibi Nasıl Yapılır | BoT-SORT ve ByteTrack | VisionAI 🚀

Gerçek Dünya Uygulamaları#

UlaşımPerakendeSu ürünleri yetiştiriciliği
Araç Takibiİnsan TakibiBalık Takibi

Hızlı Başlangıç#

Varsayılan TrackTrack takip algoritmasıyla bir videoda takibi başlat. tracker bağımsız değişkenini değiştirerek başka bir takip algoritmasına geç.

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Varsayılan takip algoritması (TrackTrack)
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)

# ByteTrack'e geç
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")

Video akışlarında takip algoritmasını çalıştırmak için YOLO26n, YOLO26n-seg, YOLO26n-pose veya YOLO26n-obb gibi eğitilmiş bir Detect, Segment, Pose ya da OBB modeli kullan. Özel modelleri yerel olarak veya Ultralytics Platform bulut eğitimiyle eğitebilirsin.

Örnek
from ultralytics import YOLO

# Resmî veya özel bir model yükle
model = YOLO("yolo26n.pt")  # Resmî bir Detect modeli yükle
model = YOLO("yolo26n-seg.pt")  # Resmî bir Segment modeli yükle
model = YOLO("yolo26n-pose.pt")  # Resmî bir Pose modeli yükle
model = YOLO("path/to/best.pt")  # Özel olarak eğitilmiş bir model yükle

# Modelle takip gerçekleştir
results = model.track("https://youtu.be/LNwODJXcvt4", show=True)  # Varsayılan takip algoritmasıyla takip
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # ByteTrack ile

Desteklenen Takip Algoritmaları#

Ultralytics YOLO, yerleşik altı takip algoritmasıyla birlikte gelir. Birini etkinleştirmek için YAML yapılandırma dosyasını tracker bağımsız değişkenine geçir.

Takip algoritmasıYapılandırma dosyasıHareket modeliGörünüş / ReIDKamera hareketi telafisiÖrtüşme yönetimi
BoT-SORTbotsort.yamlDoğrusal Kalmanİsteğe bağlı (with_reid)Yapılandırılabilir (gmc_method)Takip arabelleği + ReID ile yeniden eşleştirme
ByteTrackbytetrack.yamlDoğrusal KalmanYokHayırDüşük güvenli algılamalar için iki aşamalı kurtarma
OC-SORTocsort.yamlGözlem odaklı KalmanYokHayırSon gözlemden ORU, OCM, OCR yeniden güncellemesi
Deep OC-SORTdeepocsort.yamlGözlem odaklı Kalmanİsteğe bağlı (with_reid)Yapılandırılabilir (gmc_method)OC-SORT + isteğe bağlı uyarlanabilir görünüş EMA'sı
FastTrackerfasttrack.yamlDoğrusal Kalman + geri almaYokHayırKalman geri alma + örtüşme durumunda bbox genişletme
TrackTracktracktrack.yamlDoğrusal Kalman (NSA)İsteğe bağlı (with_reid)Yapılandırılabilir (gmc_method)Yinelemeli çoklu ipucu eşleştirmesi + TAI

Hangi Takip Algoritmasını Kullanmalıyım?#

Başlangıç noktası seçmek için bu akıştan yararlan; tracker belirtmediğinde tracktrack.yaml kullanılır:

  1. En hızlı ve en basit temel çözümü mü arıyorsun? → ByteTrack (ReID yok, kamera hareketi telafisi yok, en düşük ek yük).
  2. Elde çekilmiş, drone veya hareketli kamerayla çekilmiş görüntüler mi kullanıyorsun? → BoT-SORT (kamera hareketi telafisi ve isteğe bağlı ReID ekler).
  3. Doğrusal olmayan hareket (spor, dans, ani dönüşler) var ve ReID kullanmıyor musun? → OC-SORT (görünüş eşleştirme maliyeti olmadan gözlem odaklı düzeltmeler yapar).
  4. Kimlik değişimlerinin başlıca sorun olduğu kalabalık ve hareketli kameralı sahneler mi var? → Deep OC-SORT veya TrackTrack (ikisi de isteğe bağlı görünüş eşleştirmesini destekler; TrackTrack ayrıca çoklu ipucu eşleştirmesi ve yinelenen kimlikleri bastırma özelliği sunar).
  5. Gerçek zamanlı kullanımda sık sık kısmi örtüşme oluyor ve ReID için bütçen yok mu? → FastTracker (Kalman geri alma özelliğine sahip, örtüşmeleri dikkate alan bir ByteTrack çeşidi).

Takip Algoritmalarını Değiştirme#

Takip algoritmasının yapılandırma dosyası adını tracker= bağımsız değişkenine geçir. Diğer tüm kodlar aynı kalır.

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.track(source="path/to/video.mp4", tracker="bytetrack.yaml")
results = model.track(source="path/to/video.mp4", tracker="ocsort.yaml")
results = model.track(source="path/to/video.mp4", tracker="tracktrack.yaml")

Yapılandırma#

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

Takip yapılandırması; conf, iou ve show gibi özellikleri Predict moduyla paylaşır. Diğer yapılandırmalar için Predict model sayfasına bak.

Örnek
from ultralytics import YOLO

# Takip parametrelerini yapılandır ve takip algoritmasını çalıştır
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.1, iou=0.7, show=True)

Özel Takip Algoritması Yapılandırması#

Ultralytics, değiştirilmiş bir takip algoritması yapılandırma dosyası kullanmana da olanak tanır. Bunun için ultralytics/cfg/trackers dizininden bir takip algoritması yapılandırma dosyasının (örneğin, custom_tracker.yaml) kopyasını oluştur ve ihtiyaçlarına göre tracker_type dışındaki tüm yapılandırmaları değiştir.

Örnek
from ultralytics import YOLO

# Modeli yükle ve özel bir yapılandırma dosyasıyla takip algoritmasını çalıştır
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")

Ortak Takip Algoritması Bağımsız Değişkenleri#

Aşağıdaki parametreler takip algoritmalarının YAML dosyalarının çoğunda ortaktır; her parametre her yapılandırma dosyasında bulunmayabilir:

Takip Eşiği Bilgileri

track_high_thresh değerine eşit veya daha yüksek algılamalar ilk eşleştirme aşamasına girer. track_low_thresh ile track_high_thresh arasındaki algılamalar, seçilen takip algoritması düşük güvenli eşleştirmeyi etkinleştirmişse mevcut izleri kurtarabilir, ancak yeni izler başlatmaz. track_low_thresh değerine eşit veya daha düşük algılamalar yok sayılır.

ParametreGeçerli Değerler veya AralıklarAçıklama
tracker_typebotsort, bytetrack, ocsort, deepocsort, fasttrack, tracktrackTakip algoritması türünü belirtir.
track_high_thresh0.0-1.0İlk eşleştirme eşiği. Bir tespitin mevcut bir iz ile ne kadar güvenle eşleştirileceğini etkiler.
track_low_thresh0.0-1.0Düşük güvenli kurtarma tespitleri için alt sınır. OC-SORT ve Deep OC-SORT bu tespitleri yalnızca use_byte: True durumunda kullanır; TrackTrack ise bunları cezalı eşleştirme havuzuna dahil eder.
new_track_thresh0.0-1.0Tespit mevcut izlerden hiçbiriyle eşleşmezse yeni bir iz başlatmak için gereken eşik.
track_buffer>=0Kayıp izlerin kaldırılmadan önce kaç kare boyunca canlı tutulacağı. Daha yüksek değer, örtülmelere karşı daha fazla tolerans sağlar.
match_thresh0.0-1.0İzleri eşleştirme eşiği. Daha yüksek değerler eşleştirmeyi daha esnek hale getirir.
fuse_scoreTrue, FalseEşleştirme öncesinde güven puanlarının IoU uzaklıklarıyla birleştirilip birleştirilmeyeceği.
gmc_methodsparseOptFlow, orb, sift, ecc, noneKüresel hareket telafisi yöntemi. Kamera hareketini hesaba katmaya yardımcı olur.
proximity_thresh0.0-1.0Geçerli bir ReID eşleşmesi için gereken minimum IoU. Görünüş ipuçlarını kullanmadan önce nesnelerin uzamsal olarak yakın olmasını sağlar.
appearance_thresh0.0-1.0ReID için gereken minimum normalize edilmiş görünüş benzerliği.
with_reidTrue, FalseÖrtülmeler boyunca takibi iyileştirmek için görünüş tabanlı eşleştirmeyi etkinleştir. BoT-SORT, Deep OC-SORT ve TrackTrack tarafından desteklenir.
modelauto veya uyumlu ReID model yoluReID modeli. auto kullanılabiliyorsa yerel YOLO omurga özelliklerini kullanır; aksi durumda yolo26n-cls.pt seçeneğine geri döner. Özel bir kodlayıcı, .pt kontrol noktası veya .torchscript, .onnx, .engine gibi dışa aktarılmış bir model ya da bir OpenVINO model dizini olabilir.

İzleyiciye Özgü Argümanlar#

Her algoritma, paylaşılan parametrelere ek olarak başka ayarlar da sunar. Açıklamalar ve ayarlama önerileri için aşağıdaki izleyici bölümlerine bak veya doğrudan yapılandırma dosyalarını incele:

Yeniden Kimlik Tanıma (ReID) Özelliğini Etkinleştirme#

Ek yükü en aza indirmek için ReID varsayılan olarak devre dışıdır. Bir izleyici yapılandırma dosyasında with_reid: True değerini ayarlayarak etkinleştir.

ReID modeli seçenekleri:

  • model: auto — Yerel YOLO algılayıcı özelliklerini kullanır ve ek yükü en aza indirir. Büyük bir performans kaybı yaşamadan ReID'den yararlanmak istediğinde idealdir. Algılayıcı uyumlu özellikler sunmuyorsa yolo26n-cls.pt seçeneğine geri döner.
  • Özel ReID modeli — model: değerini bir .pt kontrol noktasına veya .torchscript, .onnx, .engine gibi uyumlu, dışa aktarılmış bir gömme modeline ya da bir OpenVINO model dizinine yönlendir. Dışa aktarılmış modeller AutoBackend aracılığıyla yüklenir ve doğrudan bir gömme tensörü üretmelidir.

Her model boyutu için kullanıma hazır ONNX kodlayıcıları yayımlanmıştır. model: değerini bu adlardan birine ayarla; izleyici ilk kez çalıştığında dosya otomatik olarak indirilir (YOLO ağırlıklarının alınmasıyla aynı şekilde) — elle dışa aktarma veya indirme gerekmez:

# In your tracker config (e.g. tracktrack.yaml)
with_reid: True
model: yolo26n-reid.onnx # downloaded on first use; swap n→s/m/l/x for a larger encoder
Modelboyut
(piksel)
parametre
(M)
FLOPs
(B)
YOLO26n-reid.onnx4482.82.0
YOLO26s-reid.onnx4487.56.6
YOLO26m-reid.onnx44812.420.1
YOLO26l-reid.onnx44815.325.2
YOLO26x-reid.onnx44832.755.9
ReID yalnızca izleme amaçlıdır

Şu anda yalnızca izleyicinin görünüş dalına yönelik ONNX ReID kodlayıcıları kullanılabilir. ReID train, val ve predict kipleri ile özel ReID dışa aktarma tarifleri hâlâ geliştirme aşamasındadır.

Ayrı bir sınıflandırma modeliyle daha iyi performans elde etmek için modeli TensorRT gibi daha hızlı bir arka uca dışa aktar:

ReID modelini TensorRT'ye dışa aktarma
from torch import nn

from ultralytics import YOLO

# Sınıflandırma modelini yükle
model = YOLO("yolo26n-cls.pt")

# Ortalama havuzlama katmanı ekle
head = model.model.model[-1]
pool = nn.Sequential(nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(start_dim=1))
pool.f, pool.i = head.f, head.i
model.model.model[-1] = pool

# TensorRT'ye dışa aktar
model.export(format="engine", quantize=16, dynamic=True, batch=32)

Dışa aktarma tamamlandıktan sonra izleyici yapılandırmanda TensorRT model yolunu belirt.

İzleyici Ayrıntıları#

Aşağıdaki bölümlerde her izleyicinin tasarımı, belirli parametreleri ve ayarlama ipuçları açıklanır.



İzle: Hangi Nesne Takipçisi Daha İyi Performans Gösteriyor? | Hız, FPS ve ID Kararlılığı | Ultralytics YOLO26 📊

BoT-SORT#

BoT-SORT (Aharon ve diğerleri, 2022), ByteTrack'i kamera hareketi telafisi ve isteğe bağlı ReID ile genişletir:

  • Kamera Hareketi Telafisi (CMC): Her karede tahmin edilen bir afin dönüşüm (varsayılan olarak seyrek optik akış; ORB / ECC de kullanılabilir), IoU eşleştirmesinden önce Kalman durumlarına uygulanır.
  • İsteğe bağlı ReID: Görünüş gömmeleri maliyet matrisine dahil edilebilir. Varsayılan olarak devre dışıdır; with_reid: True ile etkinleştir.

En uygun kullanım: Genel amaçlı izleme, özellikle hareketli kameralar. Benzer görünen kalabalıklar kimlik değişimlerine yol açıyorsa ReID ekle.

BoT-SORT'a özgü argümanlar:

ParametreGeçerli Değerler veya AralıklarAçıklama
gmc_methodsparseOptFlow, orb, sift, ecc, noneKamera hareketi telafisi arka ucu. Varsayılan değer sparseOptFlow'dır. none, CMC'yi devre dışı bırakır.
with_reidTrue, FalseGörünüş tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID model yoluauto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir.
proximity_thresh0.0-1.0Görünüş özelliklerinin dikkate alınabilmesi için gereken minimum IoU.
appearance_thresh0.0-1.0ReID eşleşmesi için gereken minimum normalize edilmiş görünüş benzerliği. Eşleştirmeyi sıkılaştırmak için değeri artır.

Ayarlama ipuçları:

  • Sabit kamera: Kare başına birkaç ms kazanmak için gmc_method: none değerini ayarla.
  • Yoğun kamera hareketi: sparseOptFlow değerini koru; ecc daha doğrudur ancak daha yavaştır.
  • Benzer görünen kalabalıklar: with_reid: True özelliğini etkinleştir ve appearance_thresh değerini artır (ör. 0.85+).

ByteTrack#

ByteTrack (Zhang ve diğerleri, ECCV 2022), hafif bir temel yöntemdir. İki aşamalı eşleştirme için doğrusal Kalman + IoU kullanır:

  • 1. Aşama: yüksek puanlı tespitleri etkin izlerle eşleştir.
  • 2. Aşama: kısa süreli kısmi örtülmelerde izleri kurtarmak için eşleşmeyen izleri düşük puanlı tespitlerle yeniden eşleştirmeyi dene.

Görünüş modeli ve kamera hareketi telafisi yoktur.

En uygun kullanım: Algılayıcı maliyetinin baskın olduğu ve izleyici ek yükünü en aza indirmek istediğin sabit veya neredeyse sabit kameralar.

ByteTrack'e özgü argümanlar: paylaşılan izleyici argümanları dışında yoktur.

Ayarlama ipuçları:

  • Gürültülü algılayıcı: İkinci aşamanın daha fazla aday bulması için track_low_thresh değerini düşür.
  • Yüksek duyarlılıklı algılayıcı: Parçalı kimlikleri azaltmak için track_high_thresh değerini artır.
  • Sık kimlik titreşimi: Kısa süreliğine kaçırılan izlerin korunması için track_buffer değerini artır.

OC-SORT#

OC-SORT (Cao ve diğerleri, CVPR 2023), SORT'un gözlem merkezli bir uzantısıdır. SORT'un hafif tasarımını (görünüş özellikleri yoktur) korur ve üç düzeltme ekler:

  • Gözlem Merkezli Yeniden Güncelleme (ORU): Son gözlem ile mevcut tespit arasında sanal bir yörüngeyi yeniden oynatır ve kaymış hızı düzeltmek için Kalman güncellemesini yeniden çalıştırır.
  • Gözlem Merkezli Momentum (OCM): Hız tutarlılığı terimi aracılığıyla yanlış yönde hareket eden tespitleri cezalandırır.
  • Gözlem Merkezli Kurtarma (OCR): Eşleşmeyen tespitleri, tahmin edilen durum yerine son gözlemlerini kullanarak yakın zamanda kaybolan izlerle yeniden kontrol eder.

En uygun kullanım: ReID modeli maliyetine katlanmadan doğrusal olmayan hareketleri izleme.

OC-SORT'a özgü argümanlar:

ParametreGeçerli Değerler veya AralıklarAçıklama
delta_t>=1OCM'de hız yönünü hesaplamak için kullanılan zamansal pencere (kare). Daha büyük değerler daha fazla yumuşatma sağlar.
inertia0.0-1.0Hız tutarlılığı maliyetinin ağırlığı. Daha yüksek değerler ani yön değişikliklerini daha fazla cezalandırır.
use_byteTrue, FalseDüşük güvenli tespitler üzerinde ByteTrack tarzı ikinci bir eşleştirme turunu etkinleştir.

Ayarlama ipuçları:

  • Doğrusal olmayan hareket: inertia değerini artır (ör. 0.3-0.4).
  • Seyrek tespitler: use_byte: True özelliğini etkinleştir.
  • Uzun örtülmeler: OCR'nin yeniden bağlayabileceği daha fazla kayıp iz olması için track_buffer değerini artır.

OBB modellerinde, yönlendirilmiş son gözlem geçmişi tutulmadığı için OCR, Kalman tarafından tahmin edilen yönlendirilmiş kutuyu kullanır.

Deep OC-SORT#

Deep OC-SORT, OC-SORT'u görünüş bilgisi ve kamera hareketi telafisiyle genişletir:

  • Görünüş eşleştirmesi: Kosinüs gömme uzaklığı örtüşmeye göre sınırlandırılır ve hareket maliyetiyle birleştirilir.
  • Dinamik görünüş EMA'sı: İz gömmeleri, yumuşatma katsayısı tespit güvenine göre uyarlanan bir EMA ile güncellenir.
  • Kamera Hareketi Telafisi: Kalman durumları, kareler arasında seyrek optik akış, ORB veya ECC aracılığıyla dönüştürülür.

En uygun kullanım: Görsel olarak farklı ancak uzamsal olarak yakın nesneler arasında kimlik değişimlerinin sık yaşandığı kalabalık veya hareketli kameralı sahneler.

Deep OC-SORT'a özgü argümanlar:

ParametreGeçerli Değerler veya AralıklarAçıklama
with_reidTrue, FalseGörünüş tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID model yoluauto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir.
proximity_thresh0.0-1.0Görünüş özelliklerinin dikkate alınabilmesi için gereken minimum IoU.
appearance_thresh0.0-1.0ReID eşleşmesi için gereken minimum normalize edilmiş görünüş benzerliği.
alpha_fixed_emb0.0-1.0İz gömme güncellemeleri için temel EMA katsayısı. Daha yüksek değerler eski gömmenin daha uzun süre korunmasını sağlar.
gmc_methodsparseOptFlow, orb, sift, ecc, noneKüresel hareket telafisi yöntemi.
delta_t>=1OCM'de hız yönünü hesaplamak için kullanılan zamansal pencere (kare) (OC-SORT'tan devralınmıştır).
inertia0.0-1.0Hız tutarlılığı maliyetinin ağırlığı (OC-SORT'tan devralınmıştır).
use_byteTrue, FalseDüşük güvenli tespitler üzerinde ByteTrack tarzı ikinci bir eşleştirmeyi etkinleştir (OC-SORT'tan devralınmıştır).

Ayarlama ipuçları:

  • Kalabalıklarda kimlik değişimleri: appearance_thresh değerini artır (ör. 0.92-0.95) ve gömmelerin daha yavaş uyum sağlaması için alpha_fixed_emb değerini yükselt.
  • Hareketli kamera: gmc_method: sparseOptFlow değerini ayarla (Deep OC-SORT varsayılan olarak none kullanır).
  • Daha düşük gecikme: Yalnızca hareket + CMC için with_reid: False değerini (varsayılan) koru; ReID'yi yalnızca hatalarda kimlik değişimleri baskınsa etkinleştir.

FastTracker#

FastTracker, görünüş modeli içermeyen ve örtülmeleri dikkate alan bir ByteTrack çeşididir:

  • Örtülme tespiti: Diğer etkin izlerin kapladığı alan occ_cover_thresh değerini aştığında izleri örtülmüş olarak işaretler.
  • Örtülme sırasında Kalman geri alma: Halka tamponunda tutulan geçmişi kullanarak Kalman durumunu örtülme öncesi bir kareye geri alır.
  • Hareket azaltma ve arama alanını genişletme: Örtülme sırasında hız azaltılır ve tahmin edilen bbox büyütülür.
  • Başlatma-IoU baskılama: Etkin izlerin üzerine yeni izlerin başlatılmasını önler.

En uygun kullanım: Hedeflerin sık sık üst üste bindiği (kalabalıklar, kuyruklar, spor) gerçek zamanlı, yalnızca algılamaya dayalı işlem hatları.

FastTracker'a özgü bağımsız değişkenler:

ParametreGeçerli Değerler veya AralıklarAçıklama
reset_velocity_offset_occ>=0Örtülme başladığında Kalman hızını geri yüklemek için geçmişteki kare sayısı.
reset_pos_offset_occ>=0Örtülme başladığında Kalman konumunu geri yüklemek için geçmişteki kare sayısı.
enlarge_bbox_occ>=1.0Örtülme sırasında tahmin edilen bbox'a uygulanan yükseklik ölçeklendirmesi (genişlik, XYAH en-boy oranına göre ölçeklenir).
dampen_motion_occ0.0-1.0Örtülme sırasında kullanılan hız çarpanı. Daha düşük değerler, iz nesnesinin örtülme sırasında "yavaşlamasını" sağlar.
active_occ_to_lost_thresh>=1Etkin bir iz kayıp durumuna geçirilmeden önce izin art arda örtülü kalabileceği en fazla kare sayısı.
occ_cover_thresh0.0-1.0Örtülme kararı vermek için başka bir etkin iz tarafından kaplanan iz alanı oranı.
occ_reappear_window>=0Yakın zamanda örtülmüş kayıp bir izin yeniden bulunabilir durumda öncelikli olarak tutulduğu kare sayısı.
init_iou_suppress0.0-1.0IoU değeri herhangi bir etkin iz için bu eşiği aşarsa yeni iz başlatmayı engelle. Devre dışı bırakmak için 1.0 olarak ayarla.

Ayarlama ipuçları:

  • Sık kısmi örtülmeler: occ_cover_thresh değerini düşür (ör. 0.5-0.6).
  • Örtüşme çevresinde yinelenen kimlikler: init_iou_suppress değerini düşür (ör. 0.5).
  • Uzun süreli örtülmeler: occ_reappear_window ve track_buffer değerlerini birlikte artır.
  • Hızlı hareket eden hedefler: dampen_motion_occ değerini artır (1.0 değerine yaklaştır); daha geniş bir arama bölgesi kurtarmayı iyileştiriyorsa yalnızca enlarge_bbox_occ değerini artır.

TrackTrack#

TrackTrack (Shim ve diğerleri, CVPR 2025) varsayılan izleyicidir. Çoklu ipucuyla yinelemeli eşleştirme yaparken her izin bakış açısından değerlendirme gerçekleştirir:

  • İz Perspektifine Dayalı Eşleştirme (TPA): HMIoU'yu, isteğe bağlı kosinüs ReID mesafesini, güven projeksiyonu mesafesini ve köşe açısı mesafesini birleştirir. Atama, gevşetilen bir eşikle yinelemeli olarak çözülür.
  • İz Farkındalıklı Başlatma (TAI): yeni bir kimlik oluşturulmadan önce yinelenen iz oluşumlarını engeller.

En uygun kullanım: yinelenen kimliklerin sorun olduğu, sık örtülmelerin yaşandığı kalabalık sahneler.

TrackTrack'e özgü bağımsız değişkenler:

ParametreGeçerli Değerler veya AralıklarAçıklama
iou_weight0.0-1.0ReID etkin olduğunda HMIoU mesafesinin ağırlığı; aksi durumda doğrudan HMIoU kullanılır.
reid_weight0.0-1.0ReID etkin olduğunda kosinüs ReID mesafesinin ağırlığı; aksi durumda yok sayılır.
conf_weight0.0-1.0Güven projeksiyonu mesafesinin ağırlığı.
angle_weight0.0-1.0Köşe açısı mesafesinin ağırlığı.
penalty_p0.0-1.0Düşük güvenli tespitler için maliyet cezası.
penalty_q0.0-1.0İkincil NMS tarafından kurtarılan tespitler için maliyet cezası.
reduce_step0.0-1.0Her yinelemede eşleştirme eşiğinin gevşetilme miktarı.
tai_thr0.0-1.0İz Farkındalıklı Başlatma NMS'si için IoU eşiği.
min_track_len>=0Yeni bir izin doğrulanmasından önce gereken en kısa geçmiş uzunluğu.
lost_match_thr0.0-1.0Gevşetilmiş kayıp izi yeniden bağlama adımı için daha esnek maliyet eşiği; 0 bu özelliği devre dışı bırakır.
with_reidTrue, FalseKosinüs ReID görünüş eşleştirmesini etkinleştir (yerel YOLO özelliklerini kullanır). Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID model yoluauto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir.
gmc_methodsparseOptFlow, orb, sift, ecc, noneKüresel hareket telafisi yöntemi.

Ayarlama ipuçları:

  • Kalabalık yaya grupları: yinelenen iz oluşumlarını daha fazla engellemek için tai_thr değerini düşür (ör. 0.45); daha uzun örtülmeler için track_buffer değerini artır.
  • Hızlı kamera hareketi: gmc_method: sparseOptFlow özelliğini etkin tut.
  • Küçük/hızlı nesneler: angle_weight değerini biraz artır ve min_track_len değerini düşür.
  • ReID'yi yalnızca gerektiğinde etkinleştir: çıkarım maliyetini artırır; kısa süreli örtülmelerde varsayılan çoklu ipucu maliyeti genellikle yeterlidir.

Segment ve Pose modellerinde TrackTrack, maskelerin ve anahtar noktaların tespitleriyle hizalı kalması için gevşek NMS tespit kurtarmayı atlar.

Python Örnekleri#



İzle: Ultralytics YOLO ile Etkileşimli Nesne Takibi Nasıl Oluşturulur | Kırpmak ve Görüntülemek İçin Tıkla ⚡

İzleri Korumalı Döngü#

Burada, video karelerinde nesne izleme gerçekleştirmek için OpenCV (cv2) ve YOLO26 kullanan bir Python betiği yer alıyor. Bu betik, gerekli paketlerin (opencv-python ve ultralytics) önceden yüklü olduğunu varsayar. persist=True bağımsız değişkeni, izleyiciye geçerli görüntünün veya karenin bir dizideki sonraki kare olduğunu ve geçerli görüntüde önceki görüntüdeki izleri beklemesi gerektiğini bildirir.

İzleri koruma ve izleyici seçme

persist=True seçeneğini yalnızca aynı video akışından art arda gelen kareleri model.track() öğesine aktarırken kullan. Böylece izleyici önceki karelerdeki durumu yeniden kullanabilir ve zaman içinde tutarlı iz kimliklerini koruyabilir. Önceki iz durumu aktarılabileceği için persist=True seçeneğini alakasız görüntülerde veya farklı bir akışta kullanma.

tracker="botsort.yaml", tracker="bytetrack.yaml" veya tracker="tracktrack.yaml" gibi bir izleyici yapılandırma dosyası aktararak da izleyici arka ucunu seçebilirsin.

İzlemeli akış for döngüsü
import cv2

from ultralytics import YOLO

# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")

# Video dosyasını aç
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Video kareleri üzerinde döngü oluştur
while cap.isOpened():
    # Videodan bir kare oku
    success, frame = cap.read()

    if success:
        # Karede YOLO26 ile izleme yap ve kareler arasında izleri koru
        # ve BoT-SORT izleyici arka ucunu kullan
        results = model.track(frame, persist=True, tracker="botsort.yaml")

        # Sonuçları kare üzerinde görselleştir
        annotated_frame = results[0].plot()

        # Açıklama eklenmiş kareyi görüntüle
        cv2.imshow("YOLO26 Tracking", annotated_frame)

        # 'q' tuşuna basılırsa döngüyü sonlandır
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Videonun sonuna ulaşılırsa döngüyü sonlandır
        break

# Video yakalama nesnesini serbest bırak ve görüntüleme penceresini kapat
cap.release()
cv2.destroyAllWindows()

Basit tespit yerine nesne izlemeyi etkinleştiren model(frame) ile model.track(frame) arasındaki değişikliğe dikkat et. Bu değiştirilmiş betik, videonun her karesinde izleyiciyi çalıştırır, sonuçları görselleştirir ve bir pencerede gösterir. 'q' tuşuna basarak döngüden çıkabilirsin.

İzleri Zaman İçinde Çizme#

Art arda gelen karelerdeki nesne izlerini görselleştirmek, bir videoda tespit edilen nesnelerin hareket örüntüleri ve davranışları hakkında değerli bilgiler sağlayabilir. Ultralytics YOLO26 ile bu izleri çizmek kolay ve verimli bir işlemdir.

Aşağıdaki örnekte, tespit edilen nesnelerin birden fazla video karesindeki hareketini çizmek için YOLO26'nın izleme özelliklerinden nasıl yararlanabileceğini gösteriyoruz. Bu betik; bir video dosyasını açar, kareleri sırayla okur ve çeşitli nesneleri belirleyip izlemek için YOLO modelini kullanır. Tespit edilen bbox'ların merkez noktalarını kaydedip bunları birleştirerek, izlenen nesnelerin izlediği yolları gösteren çizgiler çizebiliriz.

Birden fazla video karesi boyunca izleri çizme
from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")

# Video dosyasını aç
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# İz geçmişini sakla
track_history = defaultdict(list)

# Video kareleri üzerinde döngü oluştur
while cap.isOpened():
    # Videodan bir kare oku
    success, frame = cap.read()

    if success:
        # Karede YOLO26 ile izleme yap ve kareler arasında izleri koru
        result = model.track(frame, persist=True)[0]

        # Kutuları ve iz kimliklerini al
        if result.boxes and result.boxes.is_track:
            boxes = result.boxes.xywh.cpu()
            track_ids = result.boxes.id.int().cpu().tolist()

            # Sonucu karede görselleştir
            frame = result.plot()

            # İzleri çiz
            for box, track_id in zip(boxes, track_ids):
                x, y, w, h = box
                track = track_history[track_id]
                track.append((float(x), float(y)))  # x, y merkez noktası
                if len(track) > 30:  # 30 kare boyunca 30 izi tut
                    track.pop(0)

                # İzleme çizgilerini çiz
                points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                cv2.polylines(frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Açıklama eklenmiş kareyi görüntüle
        cv2.imshow("YOLO26 Tracking", frame)

        # 'q' tuşuna basılırsa döngüyü sonlandır
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Videonun sonuna ulaşılırsa döngüyü sonlandır
        break

# Video yakalama nesnesini serbest bırak ve görüntüleme penceresini kapat
cap.release()
cv2.destroyAllWindows()

Çok İş Parçacıklı İzleme#

Çok iş parçacıklı izleme, aynı anda birden fazla video akışında nesne izleme olanağı sağlar. Bu özellik, birden fazla güvenlik kamerasından gelenler gibi çok sayıda video girdisiyle çalışırken özellikle kullanışlıdır; eşzamanlı işleme, verimliliği ve performansı önemli ölçüde artırabilir.

Sağlanan Python betiğinde, izleyicinin birden fazla örneğini eşzamanlı çalıştırmak için Python'ın threading modülünü kullanıyoruz. Her iş parçacığı bir video dosyasında izleyiciyi çalıştırmaktan sorumludur ve tüm iş parçacıkları arka planda aynı anda çalışır.

Her iş parçacığının doğru parametreleri (video dosyası, kullanılacak model ve dosya dizini) almasını sağlamak için bu parametreleri kabul eden ve ana izleme döngüsünü içeren run_tracker_in_thread işlevini tanımlıyoruz. Bu işlev videoyu kare kare okur, izleyiciyi çalıştırır ve açıklama eklenmiş sonuçları kaydeder.

Bu örnekte iki farklı model kullanılıyor: yolo26n.pt ve yolo26n-seg.pt; her biri farklı bir video dosyasındaki nesneleri izliyor. Video dosyaları SOURCES içinde belirtilir.

threading.Thread içindeki daemon=True parametresi, ana program biter bitmez bu iş parçacıklarının kapatılacağı anlamına gelir. Ardından iş parçacıklarını start() ile başlatır ve her iki izleyici iş parçacığı da tamamlanana kadar ana iş parçacığının beklemesi için join() kullanırız.

Son olarak, tüm iş parçacıkları görevlerini tamamladıktan sonra sonuçları gösteren pencereler cv2.destroyAllWindows() kullanılarak kapatılır.

Çok iş parçacıklı izleme uygulaması
import threading

import cv2

from ultralytics import YOLO

# Model adlarını ve video kaynaklarını tanımla
MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"]  # yerel video, web kamerası için 0

def run_tracker_in_thread(model_name, filename):
    """Run YOLO tracker in its own thread for concurrent processing.

    Args:
        model_name (str): Model checkpoint name or path loaded inside the thread.
        filename (str): The path to the video file or the identifier for the webcam/external camera source.
    """
    model = YOLO(model_name)
    results = model.track(filename, save=True, stream=True)
    for r in results:
        pass

# Bir for döngüsüyle izleyici iş parçacıkları oluştur ve başlat
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
    thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
    tracker_threads.append(thread)
    thread.start()

# Tüm izleyici iş parçacıklarının tamamlanmasını bekle
for thread in tracker_threads:
    thread.join()

# Temizle ve pencereleri kapat
cv2.destroyAllWindows()

Bu örnek, daha fazla iş parçacığı oluşturup aynı yöntemi uygulayarak daha fazla video dosyası ve model işleyecek şekilde kolayca genişletilebilir.

Yeni İzleyicilere Katkıda Bulun#

Çoklu nesne izleme konusunda yetkin misin ve Ultralytics YOLO ile bir izleme algoritmasını başarıyla uyguladın ya da uyarladın mı? Seni ultralytics/cfg/trackers bölümümüze katkıda bulunmaya davet ediyoruz! Gerçek dünyadaki uygulamaların ve çözümlerin, izleme görevleri üzerinde çalışan kullanıcılara büyük değer sağlayabilir.

Bu bölüme katkıda bulunarak Ultralytics YOLO çerçevesindeki izleme çözümlerinin kapsamını genişletmeye, topluluk için yeni işlevler ve kullanım alanları eklemeye yardımcı olursun.

Katkıda bulunmaya başlamak için Pull Request (PR) gönderme talimatlarının tamamı için Katkıda Bulunma Kılavuzumuza başvur. Katkılarını görmek için sabırsızlanıyoruz!

Gelin, Ultralytics YOLO ekosisteminin izleme yeteneklerini birlikte geliştirelim 🙏!

Sık Sorulan Sorular#

  • Video analitiğinde çoklu nesne izleme, nesneleri belirlemeyi ve tespit edilen her nesne için video kareleri boyunca benzersiz bir kimliği korumayı kapsar. Ultralytics YOLO; gerçek zamanlı izleme ve nesne kimlikleri sağlayarak güvenlik gözetimi ve spor analitiği gibi görevleri kolaylaştırır. Sistem, YAML dosyaları üzerinden yapılandırılabilen BoT-SORT, ByteTrack, OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack gibi izleyiciler kullanır.

  • Hayır. Standart Ultralytics .pt dosyaları YOLO model ağırlıklarını saklarken izleyici, çıkarım sırasında model.track() tarafından oluşturulur. İz kimlikleri art arda gelen karelerdeki izleyici durumuna bağlıdır. Bu nedenle tek bir bağımsız görüntü kutular, sınıflar ve güven değerleri gibi tespit sonuçları döndürebilir; ancak tek başına anlamlı ve kalıcı izleme kimlikleri üretemez.

    Dağıtım için tespit modelini ve izleyiciyi uygulamanda birlikte paketle; kareler aynı video akışından geliyorsa model.track() öğesini kare kare, persist=True ile çağır. Videolar arasında durum aktarımını önlemek için alakasız akışlarda ayrı model veya izleyici örnekleri kullan.

  • Var olan bir izleyici yapılandırma dosyasını (ör. custom_tracker.yaml) Ultralytics izleyici yapılandırma dizininden kopyalayıp tracker_type dışında gerekli parametreleri değiştirerek özel bir izleyici yapılandırabilirsin. Bu dosyayı izleme modelinde şöyle kullan:

    Örnek
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")
  • Birden fazla video akışında aynı anda nesne izlemek için Python'ın threading modülünü kullanabilirsin. Her iş parçacığı ayrı bir video akışını işler. Bunu nasıl ayarlayabileceğine dair bir örnek:

    Çok İş Parçacıklı İzleme
    import threading
    
    import cv2
    
    from ultralytics import YOLO
    
    # Model adlarını ve video kaynaklarını tanımla
    MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"]
    SOURCES = ["path/to/video.mp4", "0"]  # yerel video, web kamerası için 0
    
    def run_tracker_in_thread(model_name, filename):
        """Run YOLO tracker in its own thread for concurrent processing.
    
        Args:
            model_name (str): Model checkpoint name or path loaded inside the thread.
            filename (str): The path to the video file or the identifier for the webcam/external camera source.
        """
        model = YOLO(model_name)
        results = model.track(filename, save=True, stream=True)
        for r in results:
            pass
    
    # Bir for döngüsüyle izleyici iş parçacıkları oluştur ve başlat
    tracker_threads = []
    for video_file, model_name in zip(SOURCES, MODEL_NAMES):
        thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
        tracker_threads.append(thread)
        thread.start()
    
    # Tüm izleyici iş parçacıklarının tamamlanmasını bekle
    for thread in tracker_threads:
        thread.join()
    
    # Temizle ve pencereleri kapat
    cv2.destroyAllWindows()
  • Ultralytics YOLO ile çoklu nesne izlemenin aşağıdakiler de dahil olmak üzere birçok uygulaması vardır:

    • Ulaşım: Trafik yönetimi ve otonom sürüş için araç izleme.
    • Perakende: Mağaza içi analiz ve güvenlik için insanları izleme.
    • Su Ürünleri Yetiştiriciliği: Su ortamlarını izlemek için balıkları takip etme.
    • Spor Analitiği: Performans analizi için oyuncuları ve ekipmanları izleme.
    • Güvenlik Sistemleri: Şüpheli etkinlikleri izleme ve güvenlik alarmları oluşturma.

    Bu uygulamalar, Ultralytics YOLO'nun yüksek kare hızlı videoları olağanüstü doğrulukla gerçek zamanlı işleyebilme özelliğinden yararlanır.

  • Birden fazla video karesindeki nesne izlerini görselleştirmek için tespit edilen nesnelerin yollarını çizmede YOLO modelinin izleme özelliklerini OpenCV ile birlikte kullanabilirsin. Bunu gösteren örnek bir betik:

    Birden fazla video karesi boyunca izleri çizme
    from collections import defaultdict
    
    import cv2
    import numpy as np
    
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    video_path = "path/to/video.mp4"
    cap = cv2.VideoCapture(video_path)
    track_history = defaultdict(list)
    
    while cap.isOpened():
        success, frame = cap.read()
        if success:
            result = model.track(frame, persist=True)[0]
            annotated_frame = result.plot()
            if result.boxes and result.boxes.is_track:
                boxes = result.boxes.xywh.cpu()
                track_ids = result.boxes.id.int().cpu().tolist()
                for box, track_id in zip(boxes, track_ids):
                    x, y, w, h = box
                    track = track_history[track_id]
                    track.append((float(x), float(y)))
                    if len(track) > 30:
                        track.pop(0)
                    points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                    cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
            cv2.imshow("YOLO26 Tracking", annotated_frame)
            if cv2.waitKey(1) & 0xFF == ord("q"):
                break
        else:
            break
    cap.release()
    cv2.destroyAllWindows()

    Bu betik, izlenen nesnelerin zaman içindeki hareket yollarını gösteren izleme çizgilerini çizer ve nesne davranışları ile örüntüleri hakkında değerli bilgiler sağlar.

Yorumlar