Ultralytics YOLO27:

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 aynı zamanda video ilerledikçe tespit edilen her nesne için benzersiz bir kimlik (ID) koruyan kritik bir görevdir. Uygulamalar, gözetim ve güvenlikten gerçek zamanlı spor analitiğine kadar sınırsızdır.

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

🚀 Yeni Takipçiler: OC-SORT, Deep OC-SORT, FastTracker, TrackTrack

ultralytics 8.4.63 sürümünden başlayarak OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack, BoT-SORT ve ByteTrack ile birlikte kullanılabilir.

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

Ultralytics takipçilerinden gelen çıktı, standart nesne tespiti ile uyumludur ancak nesne kimlikleri (ID) şeklinde ek bir değer taşır. Bu, video akışlarında nesneleri takip etmeyi ve sonraki analitiği gerçekleştirmeyi kolaylaştırır. Nesne takibi ihtiyaçların için Ultralytics YOLO kullanmayı düşünmen gerektiğinin nedenleri şunlardır:

  • Verimlilik: Doğruluktan ödün vermeden video akışlarını gerçek zamanlı olarak 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 ve CLI seçenekleri sunar.
  • Özelleştirilebilirlik: Özel olarak eğitilmiş YOLO modelleriyle kolayca kullanılabilir ve bu sayede alana özgü uygulamalara entegrasyona olanak tanır.


Watch: How to Run Multi-Object Tracking with Ultralytics YOLO26 | BoT-SORT & 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çisi ile bir videoda takibi çalıştır. tracker argümanını değiştirerek başka bir takipçiye geçiş yap.

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Default tracker (TrackTrack)
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)

# Switch to ByteTrack
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")

Takipçiyi video akışlarında çalıştırmak için YOLO26n, YOLO26n-seg, YOLO26n-pose veya YOLO26n-obb gibi eğitilmiş bir Detect, Segment, Pose veya OBB modeli kullan. Özel modelleri yerel olarak veya Ultralytics Platform bulut eğitimi ile eğitebilirsin.

Örnek
from ultralytics import YOLO

# Load an official or custom model
model = YOLO("yolo26n.pt")  # Load an official Detect model
model = YOLO("yolo26n-seg.pt")  # Load an official Segment model
model = YOLO("yolo26n-pose.pt")  # Load an official Pose model
model = YOLO("path/to/best.pt")  # Load a custom-trained model

# Perform tracking with the model
results = model.track("https://youtu.be/LNwODJXcvt4", show=True)  # Tracking with default tracker
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # with ByteTrack

Desteklenen Takipçiler#

Ultralytics YOLO, altı yerleşik takipçiyle birlikte gelir. YAML yapılandırma dosyasını tracker argümanına ileterek birini etkinleştir.

TakipçiYapılandırma dosyasıHareket modeliGörünüm / ReIDKamera hareketi telafisiTıkanma yönetimi
BoT-SORTbotsort.yamlDoğrusal Kalmanİsteğe bağlı (with_reid)Yapılandırılabilir (gmc_method)Takip arabelleği + ReID yeniden bağlama
ByteTrackbytetrack.yamlDoğrusal KalmanYokHayırİki aşamalı düşük güvenilirlikli kurtarma
OC-SORTocsort.yamlGözlem odaklı KalmanYokHayırSon gözlemden ORU, OCM, OCR yeniden güncelleme
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ı uyarlamalı görünüm EMA
FastTrackerfasttrack.yamlDoğrusal Kalman + geri almaYokHayırKalman geri alma + tıkanmada kutu (bbox) büyütme
TrackTracktracktrack.yamlDoğrusal Kalman (NSA)İsteğe bağlı (with_reid)Yapılandırılabilir (gmc_method)Yinelemeli çok ipuçlu ilişkilendirme + TAI

Hangi Takipçiyi Kullanmalıyım?#

Bir başlangıç noktası seçmek için bu akışı kullan; herhangi bir tracker iletmediğinde tracktrack.yaml kullanılır:

  1. En hızlı, en basit temel modele mi ihtiyacın var?ByteTrack (ReID yok, kamera hareketi telafisi yok, minimum ek yük).
  2. Elde taşınan, dron veya hareketli kamera görüntüsü mü?BoT-SORT (kamera hareketi telafisi ve isteğe bağlı ReID ekler).
  3. Doğrusal olmayan hareket (spor, dans, ani dönüşler) ve ReID yok mu?OC-SORT (görünüm maliyeti olmadan gözlem odaklı düzeltmeler).
  4. ID değişimlerinin ana sorun olduğu kalabalık hareketli kamera sahneleri mi?Deep OC-SORT veya TrackTrack (her ikisi de isteğe bağlı görünüm eşleştirmesini destekler; TrackTrack ayrıca çok ipuçlu ilişkilendirme ve yinelenen ID bastırma ekler).
  5. Gerçek zamanlı olarak sık kısmi örtüşme, ReID bütçesi yok mu?FastTracker (Kalman geri almasına sahip tıkanma farkındalıklı ByteTrack varyantı).

Takipçileri Değiştirme#

Takipçi yapılandırma dosya adını tracker= öğesine ilet. 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 Argümanları#

Takip yapılandırması, conf, iou ve show gibi Predict modu ile özellikleri paylaşır. Daha fazla yapılandırma için Predict modeli sayfasına göz at.

Örnek
from ultralytics import YOLO

# Configure the tracking parameters and run the tracker
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.1, iou=0.7, show=True)

Özel Takipçi Yapılandırması#

Ultralytics ayrıca değiştirilmiş bir takipçi yapılandırma dosyası kullanmana izin verir. Bunu yapmak için ultralytics/cfg/trackers adresinden bir takipçi yapılandırma dosyasının (örneğin, custom_tracker.yaml) bir kopyasını oluştur ve ihtiyaçlarına göre herhangi bir yapılandırmayı (tracker_type hariç) değiştir.

Örnek
from ultralytics import YOLO

# Load the model and run the tracker with a custom configuration file
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")

Paylaşılan Takipçi Argümanları#

Aşağıdaki parametreler çoğu takipçi YAML dosyası için ortaktır; her parametre her yapılandırmada yer almaz:

Takipçi Eşik Bilgileri

track_high_thresh değerindeki veya üzerindeki tespitler ilk ilişkilendirme aşamasına girer. track_low_thresh ve track_high_thresh arasındaki tespitler, seçilen takipçi düşük güvenilirlikli ilişkilendirmeyi etkinleştirdiğinde mevcut takipleri kurtarabilir, ancak yeni takipler başlatmazlar. track_low_thresh değerindeki veya altındaki tespitler yoksayılır.

ParametreGeçerli Değerler veya AralıklarAçıklama
tracker_typebotsort, bytetrack, ocsort, deepocsort, fasttrack, tracktrackTakipçi türünü belirtir.
track_high_thresh0.0-1.0İlk ilişkilendirme için eşik. Bir tespitin mevcut bir takiple ne kadar güvenle eşleştirileceğini etkiler.
track_low_thresh0.0-1.0Düşük güvenilirlikli kurtarma tespitleri için alt sınır. OC-SORT ve Deep OC-SORT bunları yalnızca use_byte: True olduğunda kullanır; TrackTrack bunları cezalandırılmış ilişkilendirme havuzuna dahil eder.
new_track_thresh0.0-1.0Tespit mevcut takiplerden hiçbiriyle eşleşmezse yeni bir takip başlatmak için eşik.
track_buffer>=0Kaldırılmadan önce kayıp takiplerin canlı tutulduğu kareler. Daha yüksek değer, tıkanma için daha fazla tolerans anlamına gelir.
match_thresh0.0-1.0Takipleri eşleştirmek için eşik. Daha yüksek değerler eşleştirmeyi daha esnek hale getirir.
fuse_scoreTrue, FalseEşleştirmeden önce güven skorlarının IoU mesafeleriyle 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üm ipuçlarını kullanmadan önce uzamsal yakınlığı sağlar.
appearance_thresh0.0-1.0ReID için gereken minimum normalize edilmiş görünüm benzerliği.
with_reidTrue, FalseTıkanmalar boyunca daha iyi takip için görünüm tabanlı eşleştirmeyi etkinleştir. BoT-SORT, Deep OC-SORT ve TrackTrack tarafından desteklenir.
modelauto veya uyumlu ReID modeli yoluReID modeli. auto, mevcut olduğunda yerel YOLO ana omurga (backbone) özelliklerini kullanır; aksi takdirde yolo26n-cls.pt seçeneğine geri döner. Özel bir kodlayıcı, bir .pt kontrol noktası veya .torchscript, .onnx, .engine gibi dışarı aktarılmış bir model ya da bir OpenVINO model dizini olabilir.

Takipçiye Özel Argümanlar#

Her algoritma, paylaşılan parametrelere ek olarak ek ayar düğmeleri sunar. Açıklamalar ve ayarlama tavsiyeleri için aşağıdaki takipçi başlıklarına bak veya doğrudan yapılandırma dosyalarına göz at:

Yeniden Kimliklendirmeyi (ReID) Etkinleştirme#

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

ReID modeli seçenekleri:

  • model: auto — Minimum ek yük ekleyerek yerel YOLO dedektör özelliklerini kullanır. Büyük bir performans düşüşü yaşamadan biraz ReID'ye ihtiyacın olduğunda idealdir. Dedektör uyumlu özellikleri sunmuyorsa yolo26n-cls.pt seçeneğine geri döner.
  • Özel ReID modelimodel: değerini bir .pt kontrol noktasına veya .torchscript, .onnx, .engine gibi uyumlu dışarı aktarılmış gömme (embedding) modeline ya da bir OpenVINO model dizinine yönlendir. Dışarı aktarılan modeller AutoBackend aracılığıyla yüklenir ve doğrudan bir gömme tensörü çıktısı vermelidir.

Kullanıma hazır ONNX kodlayıcıları her model boyutu için yayınlanır. model: değerini bu adlardan birine ayarla ve dosya, takipçi ilk kez çalıştırıldığında (YOLO ağırlıklarının alınma şekliyle aynı şekilde) otomatik olarak indirilir; manuel dışarı aktarma veya indirme adımına gerek yoktur:

# 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)
parametreler
(M)
FLOP
(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 takibe yöneliktir

Şu anda yalnızca takipçi görünüm dalı için ONNX ReID kodlayıcıları mevcuttur. ReID train, val ve predict modlarının yanı sıra özel ReID dışarı aktarma tarifleri hala geliştirme aşamasındadır.

Ayrı bir sınıflandırma modeliyle daha iyi performans için, modeli TensorRT gibi daha hızlı bir arka uca (backend) aktar:

Bir ReID Modelini TensorRT'ye Dışarı Aktarma
from torch import nn

from ultralytics import YOLO

# Load the classification model
model = YOLO("yolo26n-cls.pt")

# Add average pooling layer
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

# Export to TensorRT
model.export(format="engine", quantize=16, dynamic=True, batch=32)

Dışarı aktarıldıktan sonra, takipçi yapılandırmanda TensorRT model yolunu göster.

Takipçi Ayrıntıları#

Aşağıdaki bölümlerde her takipçinin tasarımı, belirli parametreleri ve ayar ipuçları açıklanmaktadır.



Watch: Which Object Tracker Performs Better? | Speed, FPS & ID Stability | Ultralytics YOLO26 📊

BoT-SORT#

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

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

Şunlar için idealdir: Genel amaçlı takip, özellikle hareketli kameralar. Yalnızca birbirine benzeyen kalabalıklar kimlik değişimlerine yol açtığında ReID ekle.

BoT-SORT özel argümanları:

ParametreGeçerli Değerler veya AralıklarAçıklama
gmc_methodsparseOptFlow, orb, sift, ecc, noneKamera hareketi telafisi arka ucu. sparseOptFlow varsayılan değerdir. none CMC'yi devre dışı bırakır.
with_reidTrue, FalseGörünüm tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID modeli yoluauto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir.
proximity_thresh0.0-1.0Görünüm özellikleri dikkate alınmadan önceki minimum IoU.
appearance_thresh0.0-1.0Bir ReID eşleşmesi için gereken minimum normalleştirilmiş görünüm benzerliği. Eşleştirmeyi daha katı hale getirmek için artır.

İnce ayar ipuçları:

  • Sabit kamera: Her karede birkaç milisaniye tasarruf etmek için gmc_method: none ayarını yap.
  • Yoğun kamera hareketi: sparseOptFlow değerini koru; ecc daha doğrudur ancak daha yavaştır.
  • Birbirine benzeyen kalabalıklar: with_reid: True değerini aç ve appearance_thresh değerini artır (örn. 0.85+).

ByteTrack#

ByteTrack (Zhang ve ark., ECCV 2022), hafif temel çizgidir. İki aşamalı bir ilişkilendirme ile doğrusal Kalman + IoU kullanır:

  • Aşama 1: Yüksek puanlı tespitleri aktif takiple eşleştir.
  • Aşama 2: Kısa süreli kısmi kapanmaları telafi etmek için eşleşmeyen takipleri düşük puanlı tespitlerle yeniden dene.

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

Şunlar için idealdir: Dedektör maliyetinin baskın olduğu ve minimum takipçi yükü istediğin statik veya statik olmaya yakın kameralar.

ByteTrack özel argümanları: Paylaşılan takipçi argümanları dışında hiçbiri yoktur.

İnce ayar ipuçları:

  • Gürültülü dedektör: İkinci aşamanın daha fazla adaya sahip olması için track_low_thresh değerini düşür.
  • Yüksek geri çağırma dedektörü: Parçalanmış kimlikleri azaltmak için track_high_thresh değerini artır.
  • Sık kimlik titremesi: Kısa süreliğine kaçırılan takiplerin hayatta kalması için track_buffer değerini artır.

OC-SORT#

OC-SORT (Cao ve ark., CVPR 2023), SORT'un gözlem merkezli bir uzantısıdır. SORT'un hafif tasarımını korur (görünüm özellikleri yoktur) 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 kayan hızı onarmak için Kalman güncellemesini yeniden çalıştırır.
  • Gözlem Merkezli Momentum (OCM): Bir hız tutarlılığı terimi aracılığıyla yanlış yönde hareket eden tespitlere ceza verir.
  • Gözlem Merkezli Kurtarma (OCR): Tahmini durum yerine son gözlemlerini kullanarak eşleşmeyen tespitleri yakın zamanda kaybolan takiplere karşı yeniden kontrol eder.

Şunlar için idealdir: Bir ReID modelinin maliyeti olmaksızın doğrusal olmayan hareket.

OC-SORT özel argümanları:

ParametreGeçerli Değerler veya AralıklarAçıklama
delta_t>=1OCM'de hız-yön hesaplaması için zamansal pencere (kareler). 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 cezalandırır.
use_byteTrue, FalseDüşük güven dereceli tespitler üzerinde ByteTrack tarzı ikinci bir ilişkilendirme geçişini etkinleştir.

İnce ayar ipuçları:

  • Doğrusal olmayan hareket: inertia değerini artır (örn. 0.3-0.4).
  • Seyrek tespitler: use_byte: True değerini etkinleştir.
  • Uzun kapanmalar: OCR'nin yeniden bağlayacak daha fazla kayıp takip bulabilmesi için track_buffer değerini artır.

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

Deep OC-SORT#

Deep OC-SORT, OC-SORT'a görünüm bilgisi ve kamera hareketi telafisi ekler:

  • Görünüm eşleştirme: Kosinüs gömme mesafesi çakışma ile sınırlanır ve hareket maliyetiyle birleştirilir.
  • Dinamik görünüm EMA: Takip gömmeleri, yumuşatma faktörü tespit güvenine göre uyarlanan bir EMA ile güncellenir.
  • Kamera Hareketi Telafisi: Kalman durumları, seyrek optik akış, ORB veya ECC aracılığıyla kareden kareye bükülür.

Şunlar için idealdir: Görsel olarak farklı ancak uzamsal olarak yakın nesneler arasındaki kimlik değişimlerinin yaygın olduğu kalabalık veya hareketli kamera sahneleri.

Deep OC-SORT özel argümanları:

ParametreGeçerli Değerler veya AralıklarAçıklama
with_reidTrue, FalseGörünüm tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID modeli yoluauto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir.
proximity_thresh0.0-1.0Görünüm özellikleri dikkate alınmadan önceki minimum IoU.
appearance_thresh0.0-1.0Bir ReID eşleşmesi için gereken minimum normalleştirilmiş görünüm benzerliği.
alpha_fixed_emb0.0-1.0Takip gömme güncellemeleri için taban EMA faktörü. Daha yüksek değerler eski gömmeyi daha uzun süre korur.
gmc_methodsparseOptFlow, orb, sift, ecc, noneKüresel hareket telafisi yöntemi.
delta_t>=1OCM'de hız-yön hesaplaması için zamansal pencere (kareler) (OC-SORT'tan miras alınmıştır).
inertia0.0-1.0Hız tutarlılığı maliyetinin ağırlığı (OC-SORT'tan miras alınmıştır).
use_byteTrue, FalseDüşük güven dereceli tespitler üzerinde ByteTrack tarzı ikinci bir ilişkilendirmeyi etkinleştir (OC-SORT'tan miras alınmıştır).

İnce ayar ipuçları:

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

FastTracker#

FastTracker, görünüm modeli olmayan, kapanma farkındalığına sahip bir ByteTrack varyantıdır:

  • Kapanma tespiti: Diğer aktif takiplerdeki kapsam occ_cover_thresh değerini aştığında takipleri kapanmış olarak işaretler.
  • Kapanmada Kalman geri alma: Halka tamponlu geçmişi kullanarak Kalman durumunu kapanma öncesi bir kareye geri döndürür.
  • Hareket sönümleme ve arama genişletme: Kapanma sırasında hız sönümlenir ve tahmini kutu büyütülür.
  • Init-IoU bastırma: Yeni takipçilerin aktif takipçilerin üzerinde türemesini engeller.

Şunlar için idealdir: Sık hedef çakışmalarının olduğu gerçek zamanlı yalnızca tespit boru hatları (kalabalıklar, kuyruklar, spor).

FastTracker özel argümanları:

ParametreGeçerli Değerler veya AralıklarAçıklama
reset_velocity_offset_occ>=0Kapanma başlangıcında Kalman hızını geri yüklemek için geçmiş kareler.
reset_pos_offset_occ>=0Kapanma başlangıcında Kalman konumunu geri yüklemek için geçmiş kareler.
enlarge_bbox_occ>=1.0Kapanma sırasında tahmini kutuya uygulanan yükseklik ölçeklendirmesi (genişlik XYAH en-boy oranıyla ölçeklenir).
dampen_motion_occ0.0-1.0Kapanma sırasında hız çarpanı. Düşük değerler takibin kapanma boyunca "yavaşlamasını" sağlar.
active_occ_to_lost_thresh>=1Aktif bir takibin kayıp olarak taşınmasından önceki maksimum ardışık kapanmış kare sayısı.
occ_cover_thresh0.0-1.0Kapanma ilan etmek için bir takibin alanının başka bir aktif takip tarafından kapsanan oranı.
occ_reappear_window>=0Yakın zamanda kapanmış kayıp bir takibin öncelikli olarak yeniden bulunabilir kaldığı kareler.
init_iou_suppress0.0-1.0Herhangi bir aktif takip ile IoU'su bunu aşarsa yeni takip başlatmasını engelle. Devre dışı bırakmak için 1.0 olarak ayarla.

İnce ayar ipuçları:

  • Sık kısmi kapanmalar: occ_cover_thresh değerini düşür (örn. 0.5-0.6).
  • Çakışma etrafında yinelenen kimlikler: init_iou_suppress değerini düşür (örn. 0.5).
  • Uzun kapanmalar: 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 yakın); daha geniş bir arama bölgesi iyileştirme sağladığında yalnızca enlarge_bbox_occ değerini artır.

TrackTrack#

TrackTrack (Shim ve ark., CVPR 2025) varsayılan takipçidir. Çok ipuçlu yinelemeli ilişkilendirme ile her takibin perspektifinden akıl yürütür:

  • Takip Perspektifi Tabanlı İlişkilendirme (TPA): HMIoU, isteğe bağlı kosinüs ReID mesafesi, güven projeksiyon mesafesi ve köşe açı mesafesini birleştirir. Atama, esnek bir eşikle yinelemeli olarak çözülür.
  • Takip Farkındalı Başlatma (TAI): Yeni bir kimlik oluşturulmadan önce yinelenen üretimleri bastırır.

Şunlar için idealdir: Yinelenen kimliklerin sorun oluşturduğu, sık kapanmaların olduğu kalabalık sahneler.

TrackTrack özel argümanları:

ParametreGeçerli Değerler veya AralıklarAçıklama
iou_weight0.0-1.0ReID etkinleştirildiğinde HMIoU mesafesinin ağırlığı; aksi takdirde HMIoU doğrudan kullanılır.
reid_weight0.0-1.0ReID etkinleştirildiğinde kosinüs ReID mesafesinin ağırlığı; aksi takdirde yoksayılır.
conf_weight0.0-1.0Güven projeksiyon mesafesinin ağırlığı.
angle_weight0.0-1.0Köşe açı mesafesinin ağırlığı.
penalty_p0.0-1.0Düşük güven dereceli 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.0İterasyon başına eşleşme eşiği esnekliği.
tai_thr0.0-1.0Takip Farkındalı Başlatma NMS için IoU eşiği.
min_track_len>=0Yeni bir takibin onaylanmasından önceki minimum geçmiş uzunluğu.
lost_match_thr0.0-1.0Esnetilmiş kayıp-yeniden bağlama geçişi için daha gevşek maliyet kapısı; 0 bunu devre dışı bırakır.
with_reidTrue, FalseKosinüs-ReID görünüm eşleştirmesini etkinleştir (yerel YOLO özelliklerini kullanır). Varsayılan olarak kapalıdır.
modelauto veya uyumlu ReID modeli yoluauto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir.
gmc_methodsparseOptFlow, orb, sift, ecc, noneKüresel hareket telafisi yöntemi.

İnce ayar ipuçları:

  • Kalabalık yayalar: Daha fazla yinelenen üretimi bastırmak için tai_thr değerini düşür (örn. 0.45); daha uzun kapanmalar için track_buffer değerini artır.
  • Hızlı kamera hareketi: gmc_method: sparseOptFlow değerini 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 maliyeti ekler; kısa kapanmalar için varsayılan çok ipuçlu maliyet genellikle yeterlidir.

Segment ve Pose modelleri ile TrackTrack, maskelerin ve anahtar noktaların tespitleriyle hizalı kalması için gevşek NMS tespit kurtarılmasını atlar.

Python Örnekleri#



Watch: How to Build Interactive Object Tracking with Ultralytics YOLO | Click to Crop & Display ⚡

Takipleri Döngü İçinde Sürdürme#

İşte video kareleri üzerinde nesne takibi çalıştırmak için OpenCV (cv2) ve YOLO26 kullanan bir Python betiği. Bu betik, gerekli paketlerin (opencv-python ve ultralytics) halihazırda kurulu olduğunu varsayar. persist=True argümanı, takipçiye mevcut görüntünün veya karenin bir dizideki sıradaki olduğunu ve mevcut görüntüde önceki görüntüden gelen takipleri beklemesini söyler.

Takipleri sürdürme ve bir takipçi seçme

Yalnızca aynı video akışından ardışık kareleri model.track() öğesine aktarırken persist=True kullan. Bu, takipçinin önceki karelerdeki durumu yeniden kullanmasını ve zaman içinde tutarlı takip kimliklerini korumasını sağlar. Önceki takip durumu taşınabileceği için persist=True öğesini ilişkisiz görüntüler veya farklı bir akış boyunca kullanma.

tracker="botsort.yaml", tracker="bytetrack.yaml" veya tracker="tracktrack.yaml" gibi bir takipçi yapılandırma dosyası ileterek de bir takipçi arka ucu seçebilirsin.

Takipli akış for döngüsü
import cv2

from ultralytics import YOLO

# Load the YOLO26 model
model = YOLO("yolo26n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO26 tracking on the frame, persisting tracks between frames
        # and using the BoT-SORT tracker backend
        results = model.track(frame, persist=True, tracker="botsort.yaml")

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLO26 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

Basit tespit yerine nesne takibini etkinleştiren model(frame) ile model.track(frame) arasındaki değişiklik lütfen dikkate alınsın. Bu değiştirilmiş komut dosyası, izleyiciyi videonun her kareinde çalıştıracak, sonuçları görselleştirecek ve bunları bir pencerede gösterecektir. 'q' tuşuna basılarak döngüden çıkılabilir.

İzleri Zaman İçinde Çizdirme#

Ardışık kareler üzerindeki nesne izlerini görselleştirmek, bir videoda tespit edilen nesnelerin hareket kalıpları ve davranışları hakkında değerli bilgiler sağlayabilir. Ultralytics YOLO26 ile bu izleri çizdirmek kesintisiz ve verimli bir süreçtir.

Aşağıdaki örnekte, tespit edilen nesnelerin birden fazla video karesi üzerindeki hareketini çizdirmek için YOLO26'nın takip yeteneklerinin nasıl kullanılacağını gösteriyoruz. Bu komut dosyası, bir video dosyası açmayı, bunu kare kare okumayı ve çeşitli nesneleri belirleyip takip etmek için YOLO modelini kullanmayı içerir. Tespit edilen sınırlayıcı kutuların merkez noktalarını tutarak ve bunları birbirine bağlayarak, takip edilen nesnelerin izlediği yolları temsil eden çizgiler çizebiliriz.

Birden fazla video karesi üzerinde izleri çizdirme
from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLO26 model
model = YOLO("yolo26n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(list)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO26 tracking on the frame, persisting tracks between frames
        result = model.track(frame, persist=True)[0]

        # Get the boxes and track IDs
        if result.boxes and result.boxes.is_track:
            boxes = result.boxes.xywh.cpu()
            track_ids = result.boxes.id.int().cpu().tolist()

            # Visualize the result on the frame
            frame = result.plot()

            # Plot the tracks
            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 center point
                if len(track) > 30:  # retain 30 tracks for 30 frames
                    track.pop(0)

                # Draw the tracking lines
                points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                cv2.polylines(frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Display the annotated frame
        cv2.imshow("YOLO26 Tracking", frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

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

Çok iş parçacıklı takip, birden fazla video akışında nesne takibini aynı anda çalıştırma yeteneği sağlar. Bu, eşzamanlı işlemenin verimliliği ve performansı büyük ölçüde artırabileceği, birden fazla güvenlik kamerasından gelenler gibi çoklu video girdilerini işlerken özellikle yararlıdır.

Sağlanan Python komut dosyasında, izleyicinin birden fazla örneğini eşzamanlı olarak çalıştırmak için Python'ın threading modülünden yararlanıyoruz. Her iş parçacığı, izleyiciyi bir video dosyasında ç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 indeksi) almasını sağlamak için, bu parametreleri kabul eden ve ana takip döngüsünü içeren bir run_tracker_in_thread fonksiyonu tanımlıyoruz. Bu fonksiyon videoyu kare kare okur, izleyiciyi çalıştırır ve sonuçları görüntüler.

Bu örnekte iki farklı model kullanılmaktadır: her biri farklı bir video dosyasındaki nesneleri takip eden yolo26n.pt ve yolo26n-seg.pt. Video dosyaları SOURCES içinde belirtilmiştir.

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

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

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

import cv2

from ultralytics import YOLO

# Define model names and video sources
MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"]  # local video, 0 for webcam

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

# Create and start tracker threads using a for loop
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()

# Wait for all tracker threads to finish
for thread in tracker_threads:
    thread.join()

# Clean up and close windows
cv2.destroyAllWindows()

Bu örnek, daha fazla iş parçacığı oluşturarak ve aynı metodolojiyi uygulayarak daha fazla video dosyasını ve modeli işlemek için kolayca genişletilebilir.

Yeni İzleyiciler Katkısında Bulun#

Çoklu nesne takibinde uzman mısın ve Ultralytics YOLO ile bir takip algoritmasını başarıyla uyguladın veya uyarladın mı? Seni ultralytics/cfg/trackers içindeki İzleyiciler bölümümüze katkıda bulunmaya davet ediyoruz! Gerçek dünyadaki uygulamaların ve çözümlerin, takip görevleri üzerinde çalışan kullanıcılar için çok değerli olabilir.

Bu bölüme katkıda bulunarak, topluluk için başka bir işlevsellik ve fayda katmanı ekleyerek Ultralytics YOLO çerçevesi içinde mevcut takip çözümlerinin kapsamını genişletmeye yardımcı olursun.

Katkını başlatmak için, lütfen bir Pull Request (PR) 🛠️ göndermeye yönelik kapsamlı talimatlar için Contributing Guide kılavuzumuza göz at. Neler ortaya koyacağını görmek için heyecanlıyız!

Birlikte, Ultralytics YOLO ekosisteminin takip yeteneklerini geliştirelim 🙏!

SSS#

  • Video analitiğinde çoklu nesne takibi, hem nesnelerin tanımlanmasını hem de video kareleri boyunca tespit edilen her nesne için benzersiz bir ID'nin korunmasını içerir. Ultralytics YOLO, nesne ID'leri ile birlikte gerçek zamanlı takip sağlayarak güvenlik gözetimi ve spor analitiği gibi görevleri kolaylaştırarak bunu destekler. Sistem, YAML dosyaları aracılığıyla yapılandırılabilen BoT-SORT, ByteTrack, OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack gibi izleyicileri kullanır.

  • Hayır. Standart Ultralytics .pt dosyaları YOLO model ağırlıklarını saklarken, izleyici çıkarım zamanında model.track() tarafından oluşturulur. Takip ID'leri ardışık kareler boyunca izleyici durumuna bağlıdır, bu nedenle tek bir bağımsız görüntü kutular, sınıflar ve güvenilirlikler gibi tespitler döndürebilir, ancak kendi başına anlamlı kalıcı takip ID'leri üretemez.

    Dağıtım için, dedektörü ve izleyiciyi uygulamanda birlikte paketle ve kareler aynı video akışından geldiğinde persist=True ile model.track()'ı kare kare çağır. Durumun videolar arasında aktarılmaması için ilgisiz akışlar için ayrı model veya izleyici örnekleri kullan.

  • Mevcut bir izleyici yapılandırma dosyasını (ör. custom_tracker.yaml) Ultralytics tracker configuration directory dizininden kopyalayarak ve tracker_type hariç parametreleri gerektiği gibi değiştirerek özel bir izleyici yapılandırabilirsin. Bu dosyayı takip modelinde şu şekilde kullanabilirsin:

    Ö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 nesne takibini aynı anda çalıştırmak için Python'ın threading modülünü kullanabilirsin. Her iş parçacığı ayrı bir video akışını ele alacaktır. Bunu nasıl ayarlayabileceğine dair bir örnek aşağıdadır:

    Çok İş Parçacıklı Takip
    import threading
    
    import cv2
    
    from ultralytics import YOLO
    
    # Define model names and video sources
    MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"]
    SOURCES = ["path/to/video.mp4", "0"]  # local video, 0 for webcam
    
    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
    
    # Create and start tracker threads using a for loop
    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()
    
    # Wait for all tracker threads to finish
    for thread in tracker_threads:
        thread.join()
    
    # Clean up and close windows
    cv2.destroyAllWindows()
  • Ultralytics YOLO ile çoklu nesne takibi, aşağıdakiler dahil olmak üzere çok sayıda uygulamaya sahiptir:

    • Ulaşım: Trafik yönetimi ve autonomous driving için araç takibi.
    • Perakende: Mağaza içi analitik ve güvenlik için insan takibi.
    • Su Ürünleri Yetiştiriciliği: Sucul ortamları izlemek için balık takibi.
    • Spor Analitiği: Performans analizi için oyuncuların ve ekipmanların takibi.
    • Güvenlik Sistemleri: Monitoring suspicious activities ve security alarms oluşturma.

    Bu uygulamalar, Ultralytics YOLO'nun yüksek kare hızındaki videoları olağanüstü bir doğrulukla gerçek zamanlı olarak işleme yeteneğinden yararlanır.

  • Birden fazla video karesi üzerindeki nesne izlerini görselleştirmek için, tespit edilen nesnelerin yollarını çizmek üzere OpenCV ile birlikte YOLO modelinin takip özelliklerini kullanabilirsin. Bunu gösteren örnek bir komut dosyası aşağıdadır:

    Birden fazla video karesi üzerinde izleri çizdirme
    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 komut dosyası, takip edilen nesnelerin zaman içindeki hareket yollarını gösteren takip çizgilerini çizerek, nesne davranışı ve kalıpları hakkında değerli bilgiler sağlayacaktır.

Yorumlar