Link to this sectionUltralytics YOLO ile Çoklu Nesne Takibi#
Video analitiği alanında nesne takibi, nesnelerin çerçeve içindeki konumunu ve sınıfını tanımlamakla kalmayıp, video ilerledikçe her bir algılanan nesne için benzersiz bir kimlik (ID) tutan kritik bir görevdir. Uygulama alanları sınırsızdır; gözetim ve güvenlikten gerçek zamanlı spor analitiğine kadar uzanır.
Link to this sectionNesne Takibi İçin Neden Ultralytics YOLO'yu Seçmelisin?#
Ultralytics takipçilerinden gelen çıktı, standart nesne algılama ile tutarlıdır ancak nesne kimlikleri (ID) gibi ek bir değere sahiptir. Bu, video akışlarındaki nesneleri takip etmeyi ve ardından analiz yapmayı kolaylaştırır. İşte nesne takibi ihtiyaçların için Ultralytics YOLO kullanmayı düşünmen için bazı nedenler:
- Verimlilik: Video akışlarını doğruluktan ödün vermeden gerçek zamanlı olarak işle.
- Esneklik: Birden fazla takip algoritmasını ve yapılandırmayı destekler.
- Kullanım Kolaylığı: Hızlı entegrasyon ve dağıtım için basit Python API ve CLI seçenekleri.
- Özelleştirilebilirlik: Özel olarak eğitilmiş YOLO modelleriyle kolayca kullanılabilir, böylece etki alanına özgü uygulamalara entegrasyon sağlar.
Watch: How to Run Multi-Object Tracking with Ultralytics YOLO26 | BoT-SORT & ByteTrack | VisionAI 🚀
Link to this sectionGerçek Dünya Uygulamaları#
| Ulaşım | Perakende | Su Ürünleri Yetiştiriciliği |
|---|---|---|
| Araç Takibi | İnsan Takibi | Balık Takibi |
Link to this sectionHızlı Başlangıç#
Varsayılan BoT-SORT takipçisi ile bir video üzerinde takip işlemini ç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 (BoT-SORT)
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 veya YOLO26n-pose gibi eğitilmiş bir Algılama (Detect), Bölütleme (Segment) veya Poz (Pose) modeli kullan. Ultralytics Platform aracılığıyla yerel olarak veya bulut GPU'larında özel modeller 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 ByteTrackYukarıdaki kullanımda görülebileceği gibi, takip özelliği videolarda veya akış kaynaklarında çalıştırılan tüm Algılama, Bölütleme ve Poz modelleri için kullanılabilir.
Link to this sectionDesteklenen Takipçiler#
Ultralytics YOLO, altı yerleşik takipçi ile 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 dengeleme | Tıkanma yönetimi |
|---|---|---|---|---|---|
| BoT-SORT | botsort.yaml | Doğrusal Kalman | İsteğe bağlı (with_reid) | Evet (sparseOptFlow / ECC) | İzleme arabelleği + ReID yeniden bağlama |
| ByteTrack | bytetrack.yaml | Doğrusal Kalman | Hiçbiri | Hayır | İki aşamalı düşük güvenilirlik kurtarma |
| OC-SORT | ocsort.yaml | Gözlem odaklı Kalman | Hiçbiri | Hayır | ORU, OCM, OCR son gözlemden yeniden güncelleme |
| Deep OC-SORT | deepocsort.yaml | Gözlem odaklı Kalman | İsteğe bağlı (with_reid) | İsteğe bağlı (gmc_method) | OC-SORT + uyarlanabilir görünüm EMA |
| FastTracker | fasttrack.yaml | Doğrusal Kalman + geri alma | Hiçbiri | Hayır | Kalman geri alma + tıkanmada bbox genişletme |
| TrackTrack | tracktrack.yaml | Doğrusal Kalman (NSA) | İsteğe bağlı (HMIoU geri dönüş) | Evet (sparseOptFlow / ECC) | Yinelemeli çok ipuçlu ilişkilendirme + TAI |
Link to this sectionHangi Takipçiyi Kullanmalıyım?#
Bir başlangıç noktası seçmek için bu akışı kullan:
- En hızlı, en basit temel modele mi ihtiyacın var? → ByteTrack (ReID yok, kamera hareketi dengeleme yok, minimum ek yük).
- Elde tutulan, drone veya hareketli kamera görüntüleri mi? → BoT-SORT (varsayılan; kamera hareketi dengeleme ve isteğe bağlı ReID ekler).
- Doğrusal olmayan hareket (spor, dans, ani dönüşler) ve ReID gerekmiyor mu? → OC-SORT (görünüm maliyeti olmadan gözlem odaklı düzeltmeler).
- Kimlik değişimlerinin ana sorun olduğu kalabalık hareketli kamera sahneleri mi? → Deep OC-SORT veya TrackTrack (her ikisi de uyarlanabilir görünüm füzyonu ekler; TrackTrack ayrıca çok ipuçlu ilişkilendirme ve yinelenen kimlik bastırma ekler).
- Gerçek zamanlı olarak sık kısmi örtüşme, ReID bütçesi yok mu? → FastTracker (Kalman geri alma özelliği ile tıkanma farkındalıklı ByteTrack varyantı).
Link to this sectionTakipçileri Değiştirme#
Takipçi yapılandırma dosya adını tracker= parametresine 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")Link to this sectionYapılandırma#
Link to this sectionTakip Argümanları#
Takip yapılandırması; conf, iou ve show gibi Tahmin modu ile ortak özelliklere sahiptir. Daha fazla yapılandırma için Tahmin modeli sayfasına bak.
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)Link to this sectionÖzel Takipçi Yapılandırması#
Ultralytics also allows you to use a modified tracker configuration file. To do this, simply make a copy of a tracker config file (for example, custom_tracker.yaml) from ultralytics/cfg/trackers and modify any configurations (except the tracker_type) as per your needs.
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")Link to this sectionPaylaşı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 bulunmaz:
Bir algılamanın güven puanı track_high_thresh değerinin altına düşerse, takipçi o nesneyi güncellemez, bu da aktif takip olmamasına neden olur.
| 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 değeri. Bir algılamanın mevcut bir takiple ne kadar güvenle eşleştirileceğini etkiler. |
track_low_thresh | 0.0-1.0 | Düşük güvenilirlikli algılamalar üzerinden ikinci ilişkilendirme için eşik değeri. OC-SORT ve Deep OC-SORT için bu, yalnızca use_byte: True olduğunda geçerlidir. |
new_track_thresh | 0.0-1.0 | Algılama mevcut takipçilerle eşleşmezse yeni bir takip başlatmak için eşik değeri. |
track_buffer | >=0 | Kayıp takipçilerin kaldırılmadan önce canlı tutulduğu kare sayısı. Daha yüksek değer, tıkanma için daha fazla tolerans anlamına gelir. |
match_thresh | 0.0-1.0 | Takipçileri eşleştirmek için eşik değeri. Daha yüksek değerler eşleştirmeyi daha esnek hale getirir. |
fuse_score | True, False | Eşleştirmeden önce güven puanlarının IoU mesafeleriyle birleştirilip birleştirilmeyeceği. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket dengeleme 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 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 dışa aktarılmış bir dosyanın yolu | ReID modeli. auto, mevcut olduğunda yerel YOLO omurga özelliklerini kullanır; aksi takdirde yolo26n-cls.pt modeline geri döner. Özel bir kodlayıcı için bir .torchscript, .onnx, .engine, .openvino, ... dosyası ilet. |
Link to this sectionTakipçi-spesifik Argümanlar#
Her algoritma, paylaşılan parametrelere ek olarak ilave ayarlar sunar. Açıklamalar ve ince ayar önerileri için aşağıdaki takipçi bazlı bölümlere göz at veya doğrudan yapılandırma dosyalarına başvur:
Link to this sectionYeniden Tanımlamayı (ReID) Etkinleştirme#
ReID, yükü en aza indirmek için varsayılan olarak devre dışıdır. Bir takipçi yapılandırma dosyasında with_reid: True ayarını yaparak etkinleştirebilirsin.
ReID model seçenekleri:
model: auto— Yerel YOLO dedektör özelliklerini kullanır, minimum yük ekler. Büyük bir performans kaybı yaşamadan ReID'ye ihtiyaç duyduğunda idealdir. Dedektör uyumlu özellikler sunmuyorsayolo26n-cls.ptdosyasına geri döner.- Dışa aktarılmış ReID modeli — Kırpma başına ekstra bir ileri geçiş maliyetiyle daha ayırt edici gömmeler (embeddings) elde etmek için
model:kısmını dışa aktarılmış bir dosyaya (.torchscript,.onnx,.engine,.openvinovb.) yönlendir. KodlayıcıAutoBackendaracılığıyla yüklendiğinden, Ultralytics tarafından desteklenen herhangi bir dışa aktarma formatı kod değişikliği gerekmeden çalışır.
Ayrı bir sınıflandırma modeliyle daha iyi performans için, modeli TensorRT gibi daha hızlı bir arka uca dışa 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", half=True, dynamic=True, batch=32)Dışa aktardıktan sonra, takipçi yapılandırmanda TensorRT model yolunu belirt.
Link to this sectionTakipçi Detayları#
Her takipçinin tasarımı, özel parametreleri ve ince ayar ipuçları için aşağıdaki bölümleri genişlet.
Link to this sectionBoT-SORT#
BoT-SORT (Aharon ve diğerleri, 2022) varsayılan takipçidir. ByteTrack'i kamera hareketi dengeleme ve isteğe bağlı ReID ile genişletir:
- Kamera Hareketi Dengeleme (CMC): IoU eşleştirmesinden önce Kalman durumlarına her karede tahmin edilen bir afin dönüşüm (varsayılan olarak seyrek optik akış; ayrıca ORB / ECC kullanılabilir) uygulanır.
- İsteğe bağlı ReID: Görünüm gömmeleri maliyet matrisine dahil edilebilir. Varsayılan olarak devre dışıdır;
with_reid: Trueile etkinleştir.
En iyi kullanım alanı: Genel amaçlı takip, özellikle hareketli kameralar. ReID'yi yalnızca birbirine benzeyen kalabalıklar kimlik değişimlerine (ID swap) yol açtığında ekle.
BoT-SORT-spesifik argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
gmc_method | sparseOptFlow, orb, sift, ecc, none | Kamera hareketi dengeleme arka ucu. sparseOptFlow varsayılandır. 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 bir ReID modeline giden yol | ReID modeli. auto, mevcut olduğunda yerel YOLO özelliklerini kullanır; aksi takdirde bir .torchscript / .onnx / .engine yolu gir. |
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 kosinüs benzerliği. Kimlik değişimlerini azaltmak için yükselt. |
İnce ayar ipuçları:
- Sabit kamera: Kare başına birkaç ms tasarruf etmek için
gmc_method: noneolarak ayarla. - Yoğun kamera hareketi:
sparseOptFlowkullanmaya devam et;eccdaha doğru sonuç verir ancak daha yavaştır. - Birbirine benzeyen kalabalıklar:
with_reid: Trueseçeneğini aç veappearance_threshdeğerini yükselt (örneğin0.85+).
Link to this sectionByteTrack#
ByteTrack (Zhang ve diğerleri, ECCV 2022) hafif bir temel modeldir. İki aşamalı bir ilişkilendirme ile lineer Kalman + IoU kullanır:
- Aşama 1: Yüksek puanlı tespitleri aktif takiplere göre eşleştir.
- Aşama 2: Kısa süreli kısmi tıkanıklıkları (occlusion) kurtarmak için eşleşmemiş takipleri düşük puanlı tespitlere karşı tekrar dene.
Bir görünüm modeli veya kamera hareketi dengeleme yoktur.
En iyi kullanım alanı: Dedektör maliyetinin baskın olduğu ve minimum takipçi yükü istediğin sabit veya sabit benzeri kameralar.
ByteTrack-spesifik 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 (high-recall) dedektörü: Parçalanmış kimlikleri azaltmak için
track_high_threshdeğerini yükselt. - Sık kimlik titremesi (flicker): Kısa süreliğine kaybolan takiplerin hayatta kalması için
track_bufferdeğerini yükselt.
Link to this sectionOC-SORT#
OC-SORT (Cao ve diğerleri, CVPR 2023), SORT'un gözlem odaklı bir genişletmesidir. SORT'un hafif tasarımını (görünüm özellikleri olmadan) korur ve üç düzeltme ekler:
- Gözlem Odaklı Yeniden Güncelleme (ORU): Son gözlem ile mevcut tespit arasında sanal bir yörüngeyi tekrar oynatarak, kayan hızı onarmak için Kalman güncellemesini yeniden çalıştırır.
- Gözlem Odaklı İvme (OCM): Hız tutarlılığı terimi aracılığıyla yanlış yönde hareket eden tespitleri cezalandırır.
- Gözlem Odaklı Kurtarma (OCR): Eşleşmemiş tespitleri, tahmin edilen durum yerine son gözlemlerini kullanarak yakın zamanda kaybolan takiplere karşı tekrar kontrol eder.
En iyi kullanım alanı: ReID modelinin maliyeti olmadan doğrusal olmayan hareket.
OC-SORT-spesifik 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 (kare). 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şimlerini cezalandırır. |
use_byte | True, False | Düşük güvenli tespitler üzerinde ByteTrack tarzı ikinci bir ilişkilendirme geçişini etkinleştir. |
İnce ayar ipuçları:
- Doğrusal olmayan hareket:
inertiadeğerini yükselt (örneğin0.3-0.4). - Seyrek tespitler:
use_byte: Trueayarını etkinleştir. - Uzun süreli tıkanıklıklar: OCR'nin yeniden bağlayabileceği daha fazla kayıp takip olması için
track_bufferdeğerini yükselt.
Link to this sectionDeep OC-SORT#
Deep OC-SORT, OC-SORT'u görünüm bilgisi ve kamera hareketi dengeleme ile geliştirir:
- Uyarlanabilir görünüm birleştirme: Tespit gömmeleri, tespit güveni ve örtüşme ile modüle edilen ağırlıklarla maliyet matrisine dahil edilir.
- Dinamik görünüm EMA: Takip gömmeleri, yumuşatma faktörü tespit güvenine uyum sağlayan bir EMA ile güncellenir.
- Kamera Hareketi Dengeleme: Kalman durumları, seyrek optik akış, ORB veya ECC aracılığıyla kareler arasında dengelenir.
En iyi kullanım alanı: 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-spesifik 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, dışa aktarılmış ReID model dosyası | ReID modeli. auto, yerel YOLO özelliklerini yeniden kullanır; aksi takdirde dışa aktarılmış bir dosya yolu (.torchscript, .onnx, .engine vb.) gir. |
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 kosinüs benzerliği. |
alpha_fixed_emb | 0.0-1.0 | Takip-gömme güncellemeleri için temel 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 dengeleme yöntemi. |
delta_t | >=1 | OCM'de hız-yön hesaplaması için zamansal pencere (kare) (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üvenli tespitler üzerinde ByteTrack tarzı ikinci bir ilişkilendirme geçişini etkinleştir (OC-SORT'tan miras alınmıştır). |
İnce ayar ipuçları:
- Kalabalıklarda kimlik değişimleri:
appearance_threshdeğerini yükselt (örneğin0.92-0.95) ve gömmelerin daha yavaş uyum sağlaması içinalpha_fixed_embdeğerini düşür. - Hareketli kamera:
gmc_method: sparseOptFlowolarak ayarla (Deep OC-SORT varsayılan olaraknonekullanır). - Daha düşük gecikme: Sadece hareket + CMC için
with_reid: False(varsayılan) seçeneğini koru; ReID'yi sadece kimlik değişimleri hatalara baskın geldiğinde etkinleştir.
Link to this sectionFastTracker#
FastTracker, görünüm modeli içermeyen, tıkanıklık farkındalığına sahip bir ByteTrack varyantıdır:
- Tıkanıklık algılama: Diğer aktif takipler tarafından kapsama oranı
occ_cover_threshdeğerini aştığında takipler tıkanmış olarak işaretlenir. - Tıkanıklıkta Kalman geri alma: Halka arabellekli geçmişi kullanarak Kalman durumunu tıkanıklık öncesi bir kareye geri döndürür.
- Hareket sönümleme ve arama genişletme: Tıkanıklık sırasında hız sönümlenir ve tahmin edilen bbox genişletilir.
- Init-IoU bastırma: Yeni takiplerin aktif takiplerin üzerinde oluşmasını engeller.
En iyi kullanım alanı: Sık hedef-hedef örtüşmesinin olduğu (kalabalıklar, kuyruklar, spor) gerçek zamanlı, sadece tespit odaklı hatlar.
FastTracker-spesifik argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
reset_velocity_offset_occ | >=0 | Tıkanıklık başlangıcında Kalman hızını geri yüklemek için geriye dönük geçmiş kareleri. |
reset_pos_offset_occ | >=0 | Tıkanıklık başlangıcında Kalman konumunu geri yüklemek için geriye dönük geçmiş kareleri. |
enlarge_bbox_occ | >=1.0 | Tıkanıklık 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_occ | 0.0-1.0 | Tıkanıklık sırasında hız çarpanı. Düşük değerler takibin tıkanıklık boyunca "yavaşlamasını" sağlar. |
active_occ_to_lost_thresh | >=1 | Aktif bir takibin kayıp olarak işaretlenmeden önceki maksimum ardışık tıkanıklık karesi. |
occ_cover_thresh | 0.0-1.0 | Bir tıkanıklığı beyan etmek için başka bir aktif iz tarafından kapsanan iz alanının oranı. |
occ_reappear_window | >=0 | Yakın zamanda tıkanmış kayıp bir izin tercihen yeniden bulunabilir durumda kaldığı kare sayısı. |
init_iou_suppress | 0.0-1.0 | Herhangi bir aktif iz ile olan IoU değeri bunu aşarsa yeni iz başlatmayı bastır. Devre dışı bırakmak için 1.0 olarak ayarla. |
İnce ayar ipuçları:
- Sık görülen kısmi tıkanıklıklar:
occ_cover_threshdeğerini düşür (örn.0.5-0.6). - Çakışma etrafındaki kopya kimlikler:
init_iou_suppressdeğerini düşür (örn.0.5). - Uzun süreli tıkanıklıklar:
occ_reappear_windowvetrack_bufferdeğerlerini birlikte yükselt. - Hızlı hareket eden hedefler:
dampen_motion_occdeğerini yükselt (1.0'a yakın) veenlarge_bbox_occdeğerini düşür.
Link to this sectionTrackTrack#
TrackTrack (Shim ve diğerleri, CVPR 2025), her bir izin bakış açısından çoklu ipuçlu yinelemeli ilişkilendirme ile mantık yürütür:
- İz Perspektifine Dayalı İlişkilendirme (TPA): HMIoU, kosinüs ReID mesafesi, güven-projeksiyon mesafesi ve köşe-açı mesafesini birleştirir. Atama, gevşetici bir eşik ile yinelemeli olarak çözülür.
- İz-Farkında Başlatma (TAI): Yeni bir kimlik oluşturulmadan önce kopya oluşumları bastırır.
En iyisi: Kopya kimliklerin sorun olduğu, sık tıkanıklık yaşanan kalabalık sahneler için.
TrackTrack'e özgü argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
iou_weight | 0.0-1.0 | Çoklu ipuçlu maliyet matrisindeki HMIoU mesafesinin ağırlığı. |
reid_weight | 0.0-1.0 | Kosinüs ReID mesafesinin ağırlığı. ReID devre dışıysa HMIoU'ya döner. |
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üvenli tespitler için maliyet cezası. |
penalty_q | 0.0-1.0 | İkincil NMS ile kurtarılan tespitler için maliyet cezası. |
reduce_step | 0.0-1.0 | İterasyon başına eşleşme-eşiği gevşetmesi. |
tai_thr | 0.0-1.0 | İz-Farkında Başlatma NMS için IoU eşiği. |
min_track_len | >=0 | Yeni bir izin doğrulanmasından önceki minimum başarılı güncelleme sayısı. |
lost_match_thr | 0.0-1.0 | Gevşetilmiş kayıp-yeniden bağlama geçişi için daha esnek maliyet geçidi; 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, ReID dosyası | ReID modeli; auto yerel YOLO özelliklerini kullanır, aksi takdirde dışa aktarılmış bir ReID dosyası kullanılır. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket dengeleme yöntemi. |
İnce ayar ipuçları:
- Kalabalık yaya grupları: daha fazla kopya oluşumu bastırmak için
tai_thrdeğerini düşür (örn.0.45); daha uzun tıkanıklıklar içintrack_bufferdeğerini yükselt. - Hızlı kamera hareketi:
gmc_method: sparseOptFlowseçeneğini etkin tut. - Küçük/hızlı nesneler:
angle_weightdeğerini biraz yükselt vemin_track_lendeğerini düşür. - ReID'yi sadece gerektiğinde etkinleştir: çıkarım maliyetini artırır; kısa tıkanıklıklar için varsayılan çoklu ipuçlu maliyet genellikle yeterlidir.
Link to this sectionPython Örnekleri#
Watch: How to Build Interactive Object Tracking with Ultralytics YOLO | Click to Crop & Display ⚡
Link to this sectionKalıcı İzleme Döngüsü#
İşte video karelerinde nesne takibi yapmak için OpenCV (cv2) ve YOLO26 kullanan bir Python betiği. Bu betik, gerekli paketlerin (opencv-python ve ultralytics) zaten kurulu olduğunu varsayar. persist=True argümanı, izleyiciye mevcut resim veya karenin bir dizideki bir sonraki kare olduğunu ve mevcut resimde önceki resimden gelen izleri beklemesi gerektiğini söyler.
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
results = model.track(frame, persist=True)
# 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()Lütfen model(frame) yerine model.track(frame) kullanımına geçildiğine dikkat et; bu, basit tespit yerine nesne takibini etkinleştirir. Bu değiştirilmiş betik, videonun her karesinde izleyiciyi çalıştıracak, sonuçları görselleştirecek ve bir pencerede görüntüleyecektir. Döngüden 'q' tuşuna basılarak çıkılabilir.
Link to this sectionİzleri Zaman İçinde Çizdirme#
Nesne izlerini ardışık kareler boyunca görselleştirmek, videodaki tespit edilen nesnelerin hareket modelleri ve davranışları hakkında değerli içgörüler 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 karesindeki hareketini çizdirmek için YOLO26'nın izleme yeteneklerinden nasıl yararlanılacağını gösteriyoruz. Bu betik, bir video dosyasını açmayı, onu kare kare okumayı ve çeşitli nesneleri tanımlamak ve takip etmek için YOLO modelini kullanmayı içerir. Tespit edilen sınırlayıcı kutuların merkez noktalarını tutarak ve bunları birleştirerek, 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(lambda: [])
# 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()Link to this sectionÇok İş parçacıklı İzleme#
Çok iş parçacıklı izleme, aynı anda birden fazla video akışında nesne takibi ç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 girişlerini işlerken özellikle yararlıdır.
Sağlanan Python betiğinde, izleyicinin birden fazla örneğini eşzamanlı olarak çalıştırmak için Python'un 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 eşzamanlı olarak çalışır.
Her iş parçacığının doğru parametreleri (video dosyası, kullanılacak model ve dosya indeksi) aldığından emin olmak için, bu parametreleri kabul eden ve ana izleme döngüsünü içeren run_tracker_in_thread fonksiyonunu 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ılır: yolo26n.pt ve yolo26n-seg.pt, her biri farklı bir video dosyasındaki nesneleri takip eder. Video dosyaları SOURCES içinde belirtilmiştir.
The daemon=True parameter in threading.Thread means that these threads will be closed as soon as the main program finishes. We then start the threads with start() and use join() to make the main thread wait until both tracker threads have finished.
Son olarak, tüm iş parçacıkları görevlerini 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): The YOLO26 model object.
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şturularak ve aynı metodoloji uygulanarak daha fazla video dosyası ve modeli işleyecek şekilde kolayca genişletilebilir.
Link to this sectionYeni İzleyicilere Katkıda Bulun#
Çoklu nesne takibinde yetkin misin ve Ultralytics YOLO ile bir izleme algoritmasını başarıyla uyguladın veya uyarladın mı? Seni ultralytics/cfg/trackers bölümümüzdeki İzleyiciler kısmına katkıda bulunmaya davet ediyoruz! Gerçek dünyadaki uygulamaların ve çözümlerin, izleme görevleri üzerinde çalışan kullanıcılar için paha biçilmez olabilir.
Bu bölüme katkıda bulunarak, Ultralytics YOLO çerçevesi içinde mevcut olan izleme çözümlerinin kapsamını genişletmeye yardımcı olur ve topluluk için başka bir işlevsellik ve fayda katmanı eklersin.
Katkını başlatmak için, bir Çekme İsteği (PR) göndermeye yönelik kapsamlı talimatlar için lütfen Katkıda Bulunma Kılavuzumuza bak 🛠️. Masaya ne getireceğini görmek için heyecanlıyız!
Birlikte, Ultralytics YOLO ekosisteminin izleme yeteneklerini geliştirelim 🙏!
Link to this sectionSSS#
Link to this sectionÇoklu Nesne Takibi nedir ve Ultralytics YOLO bunu nasıl destekler?#
Video analitiğinde çoklu nesne takibi, hem nesnelerin tanımlanmasını hem de video kareleri boyunca tespit edilen her nesne için benzersiz bir kimliğin korunmasını içerir. Ultralytics YOLO, nesne kimlikleriyle birlikte gerçek zamanlı izleme sağlayarak bunu destekler ve güvenlik gözetimi ve spor analitiği gibi görevleri kolaylaştırır. 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.
Link to this sectionUltralytics YOLO için özel bir izleyiciyi nasıl yapılandırırım?#
Mevcut bir izleyici yapılandırma dosyasını (örn. custom_tracker.yaml) Ultralytics izleyici yapılandırma dizininden kopyalayarak ve tracker_type hariç parametreleri gerektiği gibi değiştirerek özel bir izleyici yapılandırabilirsin. Bu dosyayı izleme modelinde şu şekilde kullan:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")Link to this sectionAynı anda birden fazla video akışında nesne takibini nasıl çalıştırabilirim?#
Aynı anda birden fazla video akışında nesne takibi çalıştırmak için Python'un threading modülünü kullanabilirsin. Her iş parçacığı ayrı bir video akışını işleyecektir. İşte bunu nasıl ayarlayabileceğine dair bir örnek:
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): The YOLO26 model object.
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()Link to this sectionUltralytics YOLO ile çoklu nesne takibinin gerçek dünya uygulamaları nelerdir?#
Ultralytics YOLO ile çoklu nesne takibi, aşağıdakiler dahil olmak üzere sayısız uygulamaya sahiptir:
- Ulaşım: Trafik yönetimi ve otonom sürüş için araç takibi.
- Perakende: Mağaza içi analitik ve güvenlik için insan takibi.
- Su Ürünleri Yetiştiriciliği: Su ortamlarını izlemek için balık takibi.
- Spor Analitiği: Performans analizi için oyuncu ve ekipman takibi.
- Güvenlik Sistemleri: Şüpheli aktiviteleri izleme ve güvenlik alarmları oluşturma.
Bu uygulamalar, Ultralytics YOLO'nun yüksek kare hızlı videoları gerçek zamanlı olarak ve olağanüstü doğrulukla işleme yeteneğinden faydalanır.
Link to this sectionUltralytics YOLO ile birden fazla video karesi üzerinde nesne izlerini nasıl görselleştirebilirim?#
Birden fazla video karesi üzerinde nesne izlerini görselleştirmek için, YOLO modelinin izleme özelliklerini OpenCV ile birlikte kullanarak tespit edilen nesnelerin yollarını çizebilirsin. İşte bunu gösteren bir örnek betik:
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(lambda: [])
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True)
boxes = results[0].boxes.xywh.cpu()
track_ids = results[0].boxes.id.int().cpu().tolist()
annotated_frame = results[0].plot()
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, takip edilen nesnelerin zaman içindeki hareket yollarını gösteren izleme çizgilerini çizecek ve nesne davranışı ve modelleri hakkında değerli içgörüler sağlayacaktır.