Ultralytics YOLO ile Çoklu Nesne Takibi#
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.
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şım | Perakende | Su Ürünleri Yetiştiriciliği |
|---|---|---|
| Araç Takibi | İnsan Takibi | Balı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.
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.
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 ByteTrackDesteklenen 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çi | Yapılandırma dosyası | Hareket modeli | Görünüm / ReID | Kamera hareketi telafisi | Tıkanma yönetimi |
|---|---|---|---|---|---|
| BoT-SORT | botsort.yaml | Doğrusal Kalman | İsteğe bağlı (with_reid) | Yapılandırılabilir (gmc_method) | Takip arabelleği + ReID yeniden bağlama |
| ByteTrack | bytetrack.yaml | Doğrusal Kalman | Yok | Hayır | İki aşamalı düşük güvenilirlikli kurtarma |
| OC-SORT | ocsort.yaml | Gözlem odaklı Kalman | Yok | Hayır | Son gözlemden ORU, OCM, OCR yeniden güncelleme |
| Deep OC-SORT | deepocsort.yaml | Gö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 |
| FastTracker | fasttrack.yaml | Doğrusal Kalman + geri alma | Yok | Hayır | Kalman geri alma + tıkanmada kutu (bbox) büyütme |
| TrackTrack | tracktrack.yaml | Doğ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:
- En hızlı, en basit temel modele mi ihtiyacın var? → ByteTrack (ReID yok, kamera hareketi telafisi yok, minimum ek yük).
- Elde taşınan, dron veya hareketli kamera görüntüsü mü? → BoT-SORT (kamera hareketi telafisi ve isteğe bağlı ReID ekler).
- 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).
- 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).
- 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.
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.
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.
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:
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.
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
tracker_type | botsort, bytetrack, ocsort, deepocsort, fasttrack, tracktrack | Takipçi türünü belirtir. |
track_high_thresh | 0.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_thresh | 0.0-1.0 | Düşü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_thresh | 0.0-1.0 | Tespit mevcut takiplerden hiçbiriyle eşleşmezse yeni bir takip başlatmak için eşik. |
track_buffer | >=0 | Kaldı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_thresh | 0.0-1.0 | Takipleri eşleştirmek için eşik. Daha yüksek değerler eşleştirmeyi daha esnek hale getirir. |
fuse_score | True, False | Eşleştirmeden önce güven skorlarının IoU mesafeleriyle birleştirilip birleştirilmeyeceği. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket telafisi yöntemi. Kamera hareketini hesaba katmaya yardımcı olur. |
proximity_thresh | 0.0-1.0 | Geç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_thresh | 0.0-1.0 | ReID için gereken minimum normalize edilmiş görünüm benzerliği. |
with_reid | True, False | Tı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. |
model | auto veya uyumlu ReID modeli yolu | ReID 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 sunmuyorsayolo26n-cls.ptseçeneğine geri döner.- Özel ReID modeli —
model:değerini bir.ptkontrol noktasına veya.torchscript,.onnx,.enginegibi uyumlu dışarı aktarılmış gömme (embedding) modeline ya da bir OpenVINO model dizinine yönlendir. Dışarı aktarılan modellerAutoBackendaracı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| Model | boyut (piksel) | parametreler (M) | FLOP (B) |
|---|---|---|---|
| YOLO26n-reid.onnx | 448 | 2.8 | 2.0 |
| YOLO26s-reid.onnx | 448 | 7.5 | 6.6 |
| YOLO26m-reid.onnx | 448 | 12.4 | 20.1 |
| YOLO26l-reid.onnx | 448 | 15.3 | 25.2 |
| YOLO26x-reid.onnx | 448 | 32.7 | 55.9 |
Ş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:
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: Trueile 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ı:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
gmc_method | sparseOptFlow, orb, sift, ecc, none | Kamera hareketi telafisi arka ucu. sparseOptFlow varsayılan değerdir. none CMC'yi devre dışı bırakır. |
with_reid | True, False | Görünüm tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID modeli yolu | auto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir. |
proximity_thresh | 0.0-1.0 | Görünüm özellikleri dikkate alınmadan önceki minimum IoU. |
appearance_thresh | 0.0-1.0 | Bir 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: noneayarını yap. - Yoğun kamera hareketi:
sparseOptFlowdeğerini koru;eccdaha doğrudur ancak daha yavaştır. - Birbirine benzeyen kalabalıklar:
with_reid: Truedeğerini aç veappearance_threshdeğ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_threshdeğerini düşür. - Yüksek geri çağırma dedektörü: Parçalanmış kimlikleri azaltmak için
track_high_threshdeğerini artır. - Sık kimlik titremesi: Kısa süreliğine kaçırılan takiplerin hayatta kalması için
track_bufferdeğ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ı:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
delta_t | >=1 | OCM'de hız-yön hesaplaması için zamansal pencere (kareler). Daha büyük değerler daha fazla yumuşatma sağlar. |
inertia | 0.0-1.0 | Hız tutarlılığı maliyetinin ağırlığı. Daha yüksek değerler ani yön değişikliklerini cezalandırır. |
use_byte | True, False | Düşü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:
inertiadeğerini artır (örn.0.3-0.4). - Seyrek tespitler:
use_byte: Truedeğerini etkinleştir. - Uzun kapanmalar: OCR'nin yeniden bağlayacak daha fazla kayıp takip bulabilmesi için
track_bufferdeğ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ı:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
with_reid | True, False | Görünüm tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID modeli yolu | auto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir. |
proximity_thresh | 0.0-1.0 | Görünüm özellikleri dikkate alınmadan önceki minimum IoU. |
appearance_thresh | 0.0-1.0 | Bir ReID eşleşmesi için gereken minimum normalleştirilmiş görünüm benzerliği. |
alpha_fixed_emb | 0.0-1.0 | Takip gömme güncellemeleri için taban EMA faktörü. Daha yüksek değerler eski gömmeyi daha uzun süre korur. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket telafisi yöntemi. |
delta_t | >=1 | OCM'de hız-yön hesaplaması için zamansal pencere (kareler) (OC-SORT'tan miras alınmıştır). |
inertia | 0.0-1.0 | Hız tutarlılığı maliyetinin ağırlığı (OC-SORT'tan miras alınmıştır). |
use_byte | True, False | Düşü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_threshdeğerini artır (örn.0.92-0.95) ve gömmelerin daha yavaş uyum sağlaması içinalpha_fixed_embdeğerini artır. - Hareketli kamera:
gmc_method: sparseOptFlowayarını yap (Deep OC-SORT varsayılan olaraknonekullanı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_threshdeğ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ı:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
reset_velocity_offset_occ | >=0 | Kapanma başlangıcında Kalman hızını geri yüklemek için geçmiş kareler. |
reset_pos_offset_occ | >=0 | Kapanma başlangıcında Kalman konumunu geri yüklemek için geçmiş kareler. |
enlarge_bbox_occ | >=1.0 | Kapanma sırasında tahmini kutuya uygulanan yükseklik ölçeklendirmesi (genişlik XYAH en-boy oranıyla ölçeklenir). |
dampen_motion_occ | 0.0-1.0 | Kapanma sırasında hız çarpanı. Düşük değerler takibin kapanma boyunca "yavaşlamasını" sağlar. |
active_occ_to_lost_thresh | >=1 | Aktif bir takibin kayıp olarak taşınmasından önceki maksimum ardışık kapanmış kare sayısı. |
occ_cover_thresh | 0.0-1.0 | Kapanma ilan etmek için bir takibin alanının başka bir aktif takip tarafından kapsanan oranı. |
occ_reappear_window | >=0 | Yakın zamanda kapanmış kayıp bir takibin öncelikli olarak yeniden bulunabilir kaldığı kareler. |
init_iou_suppress | 0.0-1.0 | Herhangi 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_threshdeğerini düşür (örn.0.5-0.6). - Çakışma etrafında yinelenen kimlikler:
init_iou_suppressdeğerini düşür (örn.0.5). - Uzun kapanmalar:
occ_reappear_windowvetrack_bufferdeğerlerini birlikte artır. - Hızlı hareket eden hedefler:
dampen_motion_occdeğerini artır (1.0değerine yakın); daha geniş bir arama bölgesi iyileştirme sağladığında yalnızcaenlarge_bbox_occdeğ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ı:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
iou_weight | 0.0-1.0 | ReID etkinleştirildiğinde HMIoU mesafesinin ağırlığı; aksi takdirde HMIoU doğrudan kullanılır. |
reid_weight | 0.0-1.0 | ReID etkinleştirildiğinde kosinüs ReID mesafesinin ağırlığı; aksi takdirde yoksayılır. |
conf_weight | 0.0-1.0 | Güven projeksiyon mesafesinin ağırlığı. |
angle_weight | 0.0-1.0 | Köşe açı mesafesinin ağırlığı. |
penalty_p | 0.0-1.0 | Düşük güven dereceli tespitler için maliyet cezası. |
penalty_q | 0.0-1.0 | İkincil NMS tarafından kurtarılan tespitler için maliyet cezası. |
reduce_step | 0.0-1.0 | İterasyon başına eşleşme eşiği esnekliği. |
tai_thr | 0.0-1.0 | Takip Farkındalı Başlatma NMS için IoU eşiği. |
min_track_len | >=0 | Yeni bir takibin onaylanmasından önceki minimum geçmiş uzunluğu. |
lost_match_thr | 0.0-1.0 | Esnetilmiş kayıp-yeniden bağlama geçişi için daha gevşek maliyet kapısı; 0 bunu devre dışı bırakır. |
with_reid | True, False | Kosinüs-ReID görünüm eşleştirmesini etkinleştir (yerel YOLO özelliklerini kullanır). Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID modeli yolu | auto, kullanılabilir olduğunda yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışarı aktarımlar olabilir. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket telafisi yöntemi. |
İnce ayar ipuçları:
- Kalabalık yayalar: Daha fazla yinelenen üretimi bastırmak için
tai_thrdeğerini düşür (örn.0.45); daha uzun kapanmalar içintrack_bufferdeğerini artır. - Hızlı kamera hareketi:
gmc_method: sparseOptFlowdeğerini etkin tut. - Küçük/hızlı nesneler:
angle_weightdeğerini biraz artır vemin_track_lendeğ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.
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.
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.
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.
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
.ptdosyaları YOLO model ağırlıklarını saklarken, izleyici çıkarım zamanındamodel.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=Trueilemodel.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 vetracker_typehariç parametreleri gerektiği gibi değiştirerek özel bir izleyici yapılandırabilirsin. Bu dosyayı takip modelinde şu şekilde kullanabilirsin:Örnekfrom 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
threadingmodü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ı Takipimport 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 çizdirmefrom 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.