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 video ilerledikçe algılanan her nesneye benzersiz bir kimlik atamayı da gerektiren kritik bir görevdir. Gözetim ve güvenlikten gerçek zamanlı spor analitiğine kadar sınırsız sayıda uygulama alanı vardır.
Planlanan takip desteği için yayımlanmamış YOLO27 önizlemesine göz at.
ultralytics 8.4.63 sürümünden itibaren OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack, BoT-SORT ve ByteTrack'in yanında kullanılabilir.
Nesne Takibi için Neden Ultralytics YOLO'yu Seçmelisin?#
Ultralytics takip algoritmalarının çıktısı standart nesne algılamayla tutarlıdır, ancak nesne kimlikleri de sağlar. Bu sayede video akışlarındaki nesneleri takip etmek ve sonraki analizleri gerçekleştirmek kolaylaşır. Nesne takibi ihtiyaçların için Ultralytics YOLO'yu kullanmayı düşünmen için bazı nedenler:
- Verimlilik: Doğruluktan ödün vermeden video akışlarını gerçek zamanlı işle.
- Esneklik: Birden fazla takip algoritmasını ve yapılandırmasını destekler.
- Kullanım Kolaylığı: Hızlı entegrasyon ve dağıtım için basit Python API'si ve CLI seçenekleri sunar.
- Özelleştirilebilirlik: Özel olarak eğitilmiş YOLO modelleriyle kolayca kullanılabilir ve belirli bir alana yönelik uygulamalara entegre edilebilir.
İzle: Ultralytics YOLO26 ile Çoklu Nesne Takibi Nasıl Yapılır | BoT-SORT ve ByteTrack | VisionAI 🚀
Gerçek Dünya Uygulamaları#
| Ulaşım | Perakende | Su ürünleri yetiştiriciliği |
|---|---|---|
| Araç Takibi | İnsan Takibi | Balık Takibi |
Hızlı Başlangıç#
Varsayılan TrackTrack takip algoritmasıyla bir videoda takibi başlat. tracker bağımsız değişkenini değiştirerek başka bir takip algoritmasına geç.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Varsayılan takip algoritması (TrackTrack)
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)
# ByteTrack'e geç
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")Video akışlarında takip algoritmasını çalıştırmak için YOLO26n, YOLO26n-seg, YOLO26n-pose veya YOLO26n-obb gibi eğitilmiş bir Detect, Segment, Pose ya da OBB modeli kullan. Özel modelleri yerel olarak veya Ultralytics Platform bulut eğitimiyle eğitebilirsin.
from ultralytics import YOLO
# Resmî veya özel bir model yükle
model = YOLO("yolo26n.pt") # Resmî bir Detect modeli yükle
model = YOLO("yolo26n-seg.pt") # Resmî bir Segment modeli yükle
model = YOLO("yolo26n-pose.pt") # Resmî bir Pose modeli yükle
model = YOLO("path/to/best.pt") # Özel olarak eğitilmiş bir model yükle
# Modelle takip gerçekleştir
results = model.track("https://youtu.be/LNwODJXcvt4", show=True) # Varsayılan takip algoritmasıyla takip
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml") # ByteTrack ileDesteklenen Takip Algoritmaları#
Ultralytics YOLO, yerleşik altı takip algoritmasıyla birlikte gelir. Birini etkinleştirmek için YAML yapılandırma dosyasını tracker bağımsız değişkenine geçir.
| Takip algoritması | Yapılandırma dosyası | Hareket modeli | Görünüş / ReID | Kamera hareketi telafisi | Örtüşme 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 ile yeniden eşleştirme |
| ByteTrack | bytetrack.yaml | Doğrusal Kalman | Yok | Hayır | Düşük güvenli algılamalar için iki aşamalı kurtarma |
| OC-SORT | ocsort.yaml | Gözlem odaklı Kalman | Yok | Hayır | Son gözlemden ORU, OCM, OCR yeniden güncellemesi |
| 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ı uyarlanabilir görünüş EMA'sı |
| FastTracker | fasttrack.yaml | Doğrusal Kalman + geri alma | Yok | Hayır | Kalman geri alma + örtüşme durumunda bbox genişletme |
| TrackTrack | tracktrack.yaml | Doğrusal Kalman (NSA) | İsteğe bağlı (with_reid) | Yapılandırılabilir (gmc_method) | Yinelemeli çoklu ipucu eşleştirmesi + TAI |
Hangi Takip Algoritmasını Kullanmalıyım?#
Başlangıç noktası seçmek için bu akıştan yararlan; tracker belirtmediğinde tracktrack.yaml kullanılır:
- En hızlı ve en basit temel çözümü mü arıyorsun? → ByteTrack (ReID yok, kamera hareketi telafisi yok, en düşük ek yük).
- Elde çekilmiş, drone veya hareketli kamerayla çekilmiş görüntüler mi kullanıyorsun? → BoT-SORT (kamera hareketi telafisi ve isteğe bağlı ReID ekler).
- Doğrusal olmayan hareket (spor, dans, ani dönüşler) var ve ReID kullanmıyor musun? → OC-SORT (görünüş eşleştirme maliyeti olmadan gözlem odaklı düzeltmeler yapar).
- Kimlik değişimlerinin başlıca sorun olduğu kalabalık ve hareketli kameralı sahneler mi var? → Deep OC-SORT veya TrackTrack (ikisi de isteğe bağlı görünüş eşleştirmesini destekler; TrackTrack ayrıca çoklu ipucu eşleştirmesi ve yinelenen kimlikleri bastırma özelliği sunar).
- Gerçek zamanlı kullanımda sık sık kısmi örtüşme oluyor ve ReID için bütçen yok mu? → FastTracker (Kalman geri alma özelliğine sahip, örtüşmeleri dikkate alan bir ByteTrack çeşidi).
Takip Algoritmalarını Değiştirme#
Takip algoritmasının yapılandırma dosyası adını tracker= bağımsız değişkenine geçir. Diğer tüm kodlar aynı kalır.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.track(source="path/to/video.mp4", tracker="bytetrack.yaml")
results = model.track(source="path/to/video.mp4", tracker="ocsort.yaml")
results = model.track(source="path/to/video.mp4", tracker="tracktrack.yaml")Yapılandırma#
Takip Bağımsız Değişkenleri#
Takip yapılandırması; conf, iou ve show gibi özellikleri Predict moduyla paylaşır. Diğer yapılandırmalar için Predict model sayfasına bak.
from ultralytics import YOLO
# Takip parametrelerini yapılandır ve takip algoritmasını çalıştır
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.1, iou=0.7, show=True)Özel Takip Algoritması Yapılandırması#
Ultralytics, değiştirilmiş bir takip algoritması yapılandırma dosyası kullanmana da olanak tanır. Bunun için ultralytics/cfg/trackers dizininden bir takip algoritması yapılandırma dosyasının (örneğin, custom_tracker.yaml) kopyasını oluştur ve ihtiyaçlarına göre tracker_type dışındaki tüm yapılandırmaları değiştir.
from ultralytics import YOLO
# Modeli yükle ve özel bir yapılandırma dosyasıyla takip algoritmasını çalıştır
model = YOLO("yolo26n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")Ortak Takip Algoritması Bağımsız Değişkenleri#
Aşağıdaki parametreler takip algoritmalarının YAML dosyalarının çoğunda ortaktır; her parametre her yapılandırma dosyasında bulunmayabilir:
track_high_thresh değerine eşit veya daha yüksek algılamalar ilk eşleştirme aşamasına girer. track_low_thresh ile track_high_thresh arasındaki algılamalar, seçilen takip algoritması düşük güvenli eşleştirmeyi etkinleştirmişse mevcut izleri kurtarabilir, ancak yeni izler başlatmaz. track_low_thresh değerine eşit veya daha düşük algılamalar yok sayılır.
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
tracker_type | botsort, bytetrack, ocsort, deepocsort, fasttrack, tracktrack | Takip algoritması türünü belirtir. |
track_high_thresh | 0.0-1.0 | İlk eşleştirme eşiği. Bir tespitin mevcut bir iz ile ne kadar güvenle eşleştirileceğini etkiler. |
track_low_thresh | 0.0-1.0 | Düşük güvenli kurtarma tespitleri için alt sınır. OC-SORT ve Deep OC-SORT bu tespitleri yalnızca use_byte: True durumunda kullanır; TrackTrack ise bunları cezalı eşleştirme havuzuna dahil eder. |
new_track_thresh | 0.0-1.0 | Tespit mevcut izlerden hiçbiriyle eşleşmezse yeni bir iz başlatmak için gereken eşik. |
track_buffer | >=0 | Kayıp izlerin kaldırılmadan önce kaç kare boyunca canlı tutulacağı. Daha yüksek değer, örtülmelere karşı daha fazla tolerans sağlar. |
match_thresh | 0.0-1.0 | İzleri eşleştirme eşiği. Daha yüksek değerler eşleştirmeyi daha esnek hale getirir. |
fuse_score | True, False | Eşleştirme öncesinde güven puanlarının IoU uzaklıklarıyla 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üş ipuçlarını kullanmadan önce nesnelerin uzamsal olarak yakın olmasını sağlar. |
appearance_thresh | 0.0-1.0 | ReID için gereken minimum normalize edilmiş görünüş benzerliği. |
with_reid | True, False | Örtülmeler boyunca takibi iyileştirmek için görünüş tabanlı eşleştirmeyi etkinleştir. BoT-SORT, Deep OC-SORT ve TrackTrack tarafından desteklenir. |
model | auto veya uyumlu ReID model yolu | ReID modeli. auto kullanılabiliyorsa yerel YOLO omurga özelliklerini kullanır; aksi durumda yolo26n-cls.pt seçeneğine geri döner. Özel bir kodlayıcı, .pt kontrol noktası veya .torchscript, .onnx, .engine gibi dışa aktarılmış bir model ya da bir OpenVINO model dizini olabilir. |
İzleyiciye Özgü Argümanlar#
Her algoritma, paylaşılan parametrelere ek olarak başka ayarlar da sunar. Açıklamalar ve ayarlama önerileri için aşağıdaki izleyici bölümlerine bak veya doğrudan yapılandırma dosyalarını incele:
Yeniden Kimlik Tanıma (ReID) Özelliğini Etkinleştirme#
Ek yükü en aza indirmek için ReID varsayılan olarak devre dışıdır. Bir izleyici yapılandırma dosyasında with_reid: True değerini ayarlayarak etkinleştir.
ReID modeli seçenekleri:
model: auto— Yerel YOLO algılayıcı özelliklerini kullanır ve ek yükü en aza indirir. Büyük bir performans kaybı yaşamadan ReID'den yararlanmak istediğinde idealdir. Algılayıcı uyumlu özellikler sunmuyorsayolo26n-cls.ptseçeneğine geri döner.- Özel ReID modeli —
model:değerini bir.ptkontrol noktasına veya.torchscript,.onnx,.enginegibi uyumlu, dışa aktarılmış bir gömme modeline ya da bir OpenVINO model dizinine yönlendir. Dışa aktarılmış modellerAutoBackendaracılığıyla yüklenir ve doğrudan bir gömme tensörü üretmelidir.
Her model boyutu için kullanıma hazır ONNX kodlayıcıları yayımlanmıştır. model: değerini bu adlardan birine ayarla; izleyici ilk kez çalıştığında dosya otomatik olarak indirilir (YOLO ağırlıklarının alınmasıyla aynı şekilde) — elle dışa aktarma veya indirme gerekmez:
# In your tracker config (e.g. tracktrack.yaml)
with_reid: True
model: yolo26n-reid.onnx # downloaded on first use; swap n→s/m/l/x for a larger encoder| Model | boyut (piksel) | parametre (M) | FLOPs (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 izleyicinin görünüş dalına yönelik ONNX ReID kodlayıcıları kullanılabilir. ReID train, val ve predict kipleri ile özel ReID dışa aktarma tarifleri hâlâ geliştirme aşamasındadır.
Ayrı bir sınıflandırma modeliyle daha iyi performans elde etmek için modeli TensorRT gibi daha hızlı bir arka uca dışa aktar:
from torch import nn
from ultralytics import YOLO
# Sınıflandırma modelini yükle
model = YOLO("yolo26n-cls.pt")
# Ortalama havuzlama katmanı ekle
head = model.model.model[-1]
pool = nn.Sequential(nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(start_dim=1))
pool.f, pool.i = head.f, head.i
model.model.model[-1] = pool
# TensorRT'ye dışa aktar
model.export(format="engine", quantize=16, dynamic=True, batch=32)Dışa aktarma tamamlandıktan sonra izleyici yapılandırmanda TensorRT model yolunu belirt.
İzleyici Ayrıntıları#
Aşağıdaki bölümlerde her izleyicinin tasarımı, belirli parametreleri ve ayarlama ipuçları açıklanır.
İzle: Hangi Nesne Takipçisi Daha İyi Performans Gösteriyor? | Hız, FPS ve ID Kararlılığı | Ultralytics YOLO26 📊
BoT-SORT#
BoT-SORT (Aharon ve diğerleri, 2022), ByteTrack'i kamera hareketi telafisi ve isteğe bağlı ReID ile genişletir:
- Kamera Hareketi Telafisi (CMC): Her karede tahmin edilen bir afin dönüşüm (varsayılan olarak seyrek optik akış; ORB / ECC de kullanılabilir), IoU eşleştirmesinden önce Kalman durumlarına uygulanır.
- İsteğe bağlı ReID: Görünüş gömmeleri maliyet matrisine dahil edilebilir. Varsayılan olarak devre dışıdır;
with_reid: Trueile etkinleştir.
En uygun kullanım: Genel amaçlı izleme, özellikle hareketli kameralar. Benzer görünen kalabalıklar kimlik değişimlerine yol açıyorsa ReID ekle.
BoT-SORT'a özgü argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
gmc_method | sparseOptFlow, orb, sift, ecc, none | Kamera hareketi telafisi arka ucu. Varsayılan değer sparseOptFlow'dır. none, CMC'yi devre dışı bırakır. |
with_reid | True, False | Görünüş tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID model yolu | auto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir. |
proximity_thresh | 0.0-1.0 | Görünüş özelliklerinin dikkate alınabilmesi için gereken minimum IoU. |
appearance_thresh | 0.0-1.0 | ReID eşleşmesi için gereken minimum normalize edilmiş görünüş benzerliği. Eşleştirmeyi sıkılaştırmak için değeri artır. |
Ayarlama ipuçları:
- Sabit kamera: Kare başına birkaç ms kazanmak için
gmc_method: nonedeğerini ayarla. - Yoğun kamera hareketi:
sparseOptFlowdeğerini koru;eccdaha doğrudur ancak daha yavaştır. - Benzer görünen kalabalıklar:
with_reid: Trueözelliğini etkinleştir veappearance_threshdeğerini artır (ör.0.85+).
ByteTrack#
ByteTrack (Zhang ve diğerleri, ECCV 2022), hafif bir temel yöntemdir. İki aşamalı eşleştirme için doğrusal Kalman + IoU kullanır:
- 1. Aşama: yüksek puanlı tespitleri etkin izlerle eşleştir.
- 2. Aşama: kısa süreli kısmi örtülmelerde izleri kurtarmak için eşleşmeyen izleri düşük puanlı tespitlerle yeniden eşleştirmeyi dene.
Görünüş modeli ve kamera hareketi telafisi yoktur.
En uygun kullanım: Algılayıcı maliyetinin baskın olduğu ve izleyici ek yükünü en aza indirmek istediğin sabit veya neredeyse sabit kameralar.
ByteTrack'e özgü argümanlar: paylaşılan izleyici argümanları dışında yoktur.
Ayarlama ipuçları:
- Gürültülü algılayıcı: İkinci aşamanın daha fazla aday bulması için
track_low_threshdeğerini düşür. - Yüksek duyarlılıklı algılayıcı: Parçalı kimlikleri azaltmak için
track_high_threshdeğerini artır. - Sık kimlik titreşimi: Kısa süreliğine kaçırılan izlerin korunması için
track_bufferdeğerini artır.
OC-SORT#
OC-SORT (Cao ve diğerleri, CVPR 2023), SORT'un gözlem merkezli bir uzantısıdır. SORT'un hafif tasarımını (görünüş özellikleri yoktur) korur ve üç düzeltme ekler:
- Gözlem Merkezli Yeniden Güncelleme (ORU): Son gözlem ile mevcut tespit arasında sanal bir yörüngeyi yeniden oynatır ve kaymış hızı düzeltmek için Kalman güncellemesini yeniden çalıştırır.
- Gözlem Merkezli Momentum (OCM): Hız tutarlılığı terimi aracılığıyla yanlış yönde hareket eden tespitleri cezalandırır.
- Gözlem Merkezli Kurtarma (OCR): Eşleşmeyen tespitleri, tahmin edilen durum yerine son gözlemlerini kullanarak yakın zamanda kaybolan izlerle yeniden kontrol eder.
En uygun kullanım: ReID modeli maliyetine katlanmadan doğrusal olmayan hareketleri izleme.
OC-SORT'a özgü argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
delta_t | >=1 | OCM'de hız yönünü hesaplamak için kullanılan zamansal pencere (kare). Daha büyük değerler daha fazla yumuşatma sağlar. |
inertia | 0.0-1.0 | Hız tutarlılığı maliyetinin ağırlığı. Daha yüksek değerler ani yön değişikliklerini daha fazla cezalandırır. |
use_byte | True, False | Düşük güvenli tespitler üzerinde ByteTrack tarzı ikinci bir eşleştirme turunu etkinleştir. |
Ayarlama ipuçları:
- Doğrusal olmayan hareket:
inertiadeğerini artır (ör.0.3-0.4). - Seyrek tespitler:
use_byte: Trueözelliğini etkinleştir. - Uzun örtülmeler: OCR'nin yeniden bağlayabileceği daha fazla kayıp iz olması için
track_bufferdeğerini artır.
OBB modellerinde, yönlendirilmiş son gözlem geçmişi tutulmadığı için OCR, Kalman tarafından tahmin edilen yönlendirilmiş kutuyu kullanır.
Deep OC-SORT#
Deep OC-SORT, OC-SORT'u görünüş bilgisi ve kamera hareketi telafisiyle genişletir:
- Görünüş eşleştirmesi: Kosinüs gömme uzaklığı örtüşmeye göre sınırlandırılır ve hareket maliyetiyle birleştirilir.
- Dinamik görünüş EMA'sı: İz gömmeleri, yumuşatma katsayısı tespit güvenine göre uyarlanan bir EMA ile güncellenir.
- Kamera Hareketi Telafisi: Kalman durumları, kareler arasında seyrek optik akış, ORB veya ECC aracılığıyla dönüştürülür.
En uygun kullanım: Görsel olarak farklı ancak uzamsal olarak yakın nesneler arasında kimlik değişimlerinin sık yaşandığı kalabalık veya hareketli kameralı sahneler.
Deep OC-SORT'a özgü argümanlar:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
with_reid | True, False | Görünüş tabanlı eşleştirmeyi etkinleştir. Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID model yolu | auto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir. |
proximity_thresh | 0.0-1.0 | Görünüş özelliklerinin dikkate alınabilmesi için gereken minimum IoU. |
appearance_thresh | 0.0-1.0 | ReID eşleşmesi için gereken minimum normalize edilmiş görünüş benzerliği. |
alpha_fixed_emb | 0.0-1.0 | İz gömme güncellemeleri için temel EMA katsayısı. Daha yüksek değerler eski gömmenin daha uzun süre korunmasını sağlar. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket telafisi yöntemi. |
delta_t | >=1 | OCM'de hız yönünü hesaplamak için kullanılan zamansal pencere (kare) (OC-SORT'tan devralınmıştır). |
inertia | 0.0-1.0 | Hız tutarlılığı maliyetinin ağırlığı (OC-SORT'tan devralınmıştır). |
use_byte | True, False | Düşük güvenli tespitler üzerinde ByteTrack tarzı ikinci bir eşleştirmeyi etkinleştir (OC-SORT'tan devralınmıştır). |
Ayarlama ipuçları:
- Kalabalıklarda kimlik değişimleri:
appearance_threshdeğerini artır (ör.0.92-0.95) ve gömmelerin daha yavaş uyum sağlaması içinalpha_fixed_embdeğerini yükselt. - Hareketli kamera:
gmc_method: sparseOptFlowdeğerini ayarla (Deep OC-SORT varsayılan olaraknonekullanır). - Daha düşük gecikme: Yalnızca hareket + CMC için
with_reid: Falsedeğerini (varsayılan) koru; ReID'yi yalnızca hatalarda kimlik değişimleri baskınsa etkinleştir.
FastTracker#
FastTracker, görünüş modeli içermeyen ve örtülmeleri dikkate alan bir ByteTrack çeşididir:
- Örtülme tespiti: Diğer etkin izlerin kapladığı alan
occ_cover_threshdeğerini aştığında izleri örtülmüş olarak işaretler. - Örtülme sırasında Kalman geri alma: Halka tamponunda tutulan geçmişi kullanarak Kalman durumunu örtülme öncesi bir kareye geri alır.
- Hareket azaltma ve arama alanını genişletme: Örtülme sırasında hız azaltılır ve tahmin edilen bbox büyütülür.
- Başlatma-IoU baskılama: Etkin izlerin üzerine yeni izlerin başlatılmasını önler.
En uygun kullanım: Hedeflerin sık sık üst üste bindiği (kalabalıklar, kuyruklar, spor) gerçek zamanlı, yalnızca algılamaya dayalı işlem hatları.
FastTracker'a özgü bağımsız değişkenler:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
reset_velocity_offset_occ | >=0 | Örtülme başladığında Kalman hızını geri yüklemek için geçmişteki kare sayısı. |
reset_pos_offset_occ | >=0 | Örtülme başladığında Kalman konumunu geri yüklemek için geçmişteki kare sayısı. |
enlarge_bbox_occ | >=1.0 | Örtülme sırasında tahmin edilen bbox'a uygulanan yükseklik ölçeklendirmesi (genişlik, XYAH en-boy oranına göre ölçeklenir). |
dampen_motion_occ | 0.0-1.0 | Örtülme sırasında kullanılan hız çarpanı. Daha düşük değerler, iz nesnesinin örtülme sırasında "yavaşlamasını" sağlar. |
active_occ_to_lost_thresh | >=1 | Etkin bir iz kayıp durumuna geçirilmeden önce izin art arda örtülü kalabileceği en fazla kare sayısı. |
occ_cover_thresh | 0.0-1.0 | Örtülme kararı vermek için başka bir etkin iz tarafından kaplanan iz alanı oranı. |
occ_reappear_window | >=0 | Yakın zamanda örtülmüş kayıp bir izin yeniden bulunabilir durumda öncelikli olarak tutulduğu kare sayısı. |
init_iou_suppress | 0.0-1.0 | IoU değeri herhangi bir etkin iz için bu eşiği aşarsa yeni iz başlatmayı engelle. Devre dışı bırakmak için 1.0 olarak ayarla. |
Ayarlama ipuçları:
- Sık kısmi örtülmeler:
occ_cover_threshdeğerini düşür (ör.0.5-0.6). - Örtüşme çevresinde yinelenen kimlikler:
init_iou_suppressdeğerini düşür (ör.0.5). - Uzun süreli örtülmeler:
occ_reappear_windowvetrack_bufferdeğerlerini birlikte artır. - Hızlı hareket eden hedefler:
dampen_motion_occdeğerini artır (1.0değerine yaklaştır); daha geniş bir arama bölgesi kurtarmayı iyileştiriyorsa yalnızcaenlarge_bbox_occdeğerini artır.
TrackTrack#
TrackTrack (Shim ve diğerleri, CVPR 2025) varsayılan izleyicidir. Çoklu ipucuyla yinelemeli eşleştirme yaparken her izin bakış açısından değerlendirme gerçekleştirir:
- İz Perspektifine Dayalı Eşleştirme (TPA): HMIoU'yu, isteğe bağlı kosinüs ReID mesafesini, güven projeksiyonu mesafesini ve köşe açısı mesafesini birleştirir. Atama, gevşetilen bir eşikle yinelemeli olarak çözülür.
- İz Farkındalıklı Başlatma (TAI): yeni bir kimlik oluşturulmadan önce yinelenen iz oluşumlarını engeller.
En uygun kullanım: yinelenen kimliklerin sorun olduğu, sık örtülmelerin yaşandığı kalabalık sahneler.
TrackTrack'e özgü bağımsız değişkenler:
| Parametre | Geçerli Değerler veya Aralıklar | Açıklama |
|---|---|---|
iou_weight | 0.0-1.0 | ReID etkin olduğunda HMIoU mesafesinin ağırlığı; aksi durumda doğrudan HMIoU kullanılır. |
reid_weight | 0.0-1.0 | ReID etkin olduğunda kosinüs ReID mesafesinin ağırlığı; aksi durumda yok sayılır. |
conf_weight | 0.0-1.0 | Güven projeksiyonu mesafesinin ağırlığı. |
angle_weight | 0.0-1.0 | Köşe açısı 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 tarafından kurtarılan tespitler için maliyet cezası. |
reduce_step | 0.0-1.0 | Her yinelemede eşleştirme eşiğinin gevşetilme miktarı. |
tai_thr | 0.0-1.0 | İz Farkındalıklı Başlatma NMS'si için IoU eşiği. |
min_track_len | >=0 | Yeni bir izin doğrulanmasından önce gereken en kısa geçmiş uzunluğu. |
lost_match_thr | 0.0-1.0 | Gevşetilmiş kayıp izi yeniden bağlama adımı için daha esnek maliyet eşiği; 0 bu özelliği devre dışı bırakır. |
with_reid | True, False | Kosinüs ReID görünüş eşleştirmesini etkinleştir (yerel YOLO özelliklerini kullanır). Varsayılan olarak kapalıdır. |
model | auto veya uyumlu ReID model yolu | auto, kullanılabiliyorsa yerel YOLO özelliklerini kullanır; özel modeller .pt kontrol noktaları veya uyumlu dışa aktarımlar olabilir. |
gmc_method | sparseOptFlow, orb, sift, ecc, none | Küresel hareket telafisi yöntemi. |
Ayarlama ipuçları:
- Kalabalık yaya grupları: yinelenen iz oluşumlarını daha fazla engellemek için
tai_thrdeğerini düşür (ör.0.45); daha uzun örtülmeler içintrack_bufferdeğerini artır. - Hızlı kamera hareketi:
gmc_method: sparseOptFlowözelliğini 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 maliyetini artırır; kısa süreli örtülmelerde varsayılan çoklu ipucu maliyeti genellikle yeterlidir.
Segment ve Pose modellerinde TrackTrack, maskelerin ve anahtar noktaların tespitleriyle hizalı kalması için gevşek NMS tespit kurtarmayı atlar.
Python Örnekleri#
İzle: Ultralytics YOLO ile Etkileşimli Nesne Takibi Nasıl Oluşturulur | Kırpmak ve Görüntülemek İçin Tıkla ⚡
İzleri Korumalı Döngü#
Burada, video karelerinde nesne izleme gerçekleştirmek için OpenCV (cv2) ve YOLO26 kullanan bir Python betiği yer alıyor. Bu betik, gerekli paketlerin (opencv-python ve ultralytics) önceden yüklü olduğunu varsayar. persist=True bağımsız değişkeni, izleyiciye geçerli görüntünün veya karenin bir dizideki sonraki kare olduğunu ve geçerli görüntüde önceki görüntüdeki izleri beklemesi gerektiğini bildirir.
persist=True seçeneğini yalnızca aynı video akışından art arda gelen kareleri model.track() öğesine aktarırken kullan. Böylece izleyici önceki karelerdeki durumu yeniden kullanabilir ve zaman içinde tutarlı iz kimliklerini koruyabilir. Önceki iz durumu aktarılabileceği için persist=True seçeneğini alakasız görüntülerde veya farklı bir akışta kullanma.
tracker="botsort.yaml", tracker="bytetrack.yaml" veya tracker="tracktrack.yaml" gibi bir izleyici yapılandırma dosyası aktararak da izleyici arka ucunu seçebilirsin.
import cv2
from ultralytics import YOLO
# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")
# Video dosyasını aç
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
# Video kareleri üzerinde döngü oluştur
while cap.isOpened():
# Videodan bir kare oku
success, frame = cap.read()
if success:
# Karede YOLO26 ile izleme yap ve kareler arasında izleri koru
# ve BoT-SORT izleyici arka ucunu kullan
results = model.track(frame, persist=True, tracker="botsort.yaml")
# Sonuçları kare üzerinde görselleştir
annotated_frame = results[0].plot()
# Açıklama eklenmiş kareyi görüntüle
cv2.imshow("YOLO26 Tracking", annotated_frame)
# 'q' tuşuna basılırsa döngüyü sonlandır
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Videonun sonuna ulaşılırsa döngüyü sonlandır
break
# Video yakalama nesnesini serbest bırak ve görüntüleme penceresini kapat
cap.release()
cv2.destroyAllWindows()Basit tespit yerine nesne izlemeyi etkinleştiren model(frame) ile model.track(frame) arasındaki değişikliğe dikkat et. Bu değiştirilmiş betik, videonun her karesinde izleyiciyi çalıştırır, sonuçları görselleştirir ve bir pencerede gösterir. 'q' tuşuna basarak döngüden çıkabilirsin.
İzleri Zaman İçinde Çizme#
Art arda gelen karelerdeki nesne izlerini görselleştirmek, bir videoda tespit edilen nesnelerin hareket örüntüleri ve davranışları hakkında değerli bilgiler sağlayabilir. Ultralytics YOLO26 ile bu izleri çizmek kolay ve verimli bir işlemdir.
Aşağıdaki örnekte, tespit edilen nesnelerin birden fazla video karesindeki hareketini çizmek için YOLO26'nın izleme özelliklerinden nasıl yararlanabileceğini gösteriyoruz. Bu betik; bir video dosyasını açar, kareleri sırayla okur ve çeşitli nesneleri belirleyip izlemek için YOLO modelini kullanır. Tespit edilen bbox'ların merkez noktalarını kaydedip bunları birleştirerek, izlenen nesnelerin izlediği yolları gösteren çizgiler çizebiliriz.
from collections import defaultdict
import cv2
import numpy as np
from ultralytics import YOLO
# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")
# Video dosyasını aç
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
# İz geçmişini sakla
track_history = defaultdict(list)
# Video kareleri üzerinde döngü oluştur
while cap.isOpened():
# Videodan bir kare oku
success, frame = cap.read()
if success:
# Karede YOLO26 ile izleme yap ve kareler arasında izleri koru
result = model.track(frame, persist=True)[0]
# Kutuları ve iz kimliklerini al
if result.boxes and result.boxes.is_track:
boxes = result.boxes.xywh.cpu()
track_ids = result.boxes.id.int().cpu().tolist()
# Sonucu karede görselleştir
frame = result.plot()
# İzleri çiz
for box, track_id in zip(boxes, track_ids):
x, y, w, h = box
track = track_history[track_id]
track.append((float(x), float(y))) # x, y merkez noktası
if len(track) > 30: # 30 kare boyunca 30 izi tut
track.pop(0)
# İzleme çizgilerini çiz
points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
cv2.polylines(frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
# Açıklama eklenmiş kareyi görüntüle
cv2.imshow("YOLO26 Tracking", frame)
# 'q' tuşuna basılırsa döngüyü sonlandır
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Videonun sonuna ulaşılırsa döngüyü sonlandır
break
# Video yakalama nesnesini serbest bırak ve görüntüleme penceresini kapat
cap.release()
cv2.destroyAllWindows()Çok İş Parçacıklı İzleme#
Çok iş parçacıklı izleme, aynı anda birden fazla video akışında nesne izleme olanağı sağlar. Bu özellik, birden fazla güvenlik kamerasından gelenler gibi çok sayıda video girdisiyle çalışırken özellikle kullanışlıdır; eşzamanlı işleme, verimliliği ve performansı önemli ölçüde artırabilir.
Sağlanan Python betiğinde, izleyicinin birden fazla örneğini eşzamanlı çalıştırmak için Python'ın threading modülünü kullanıyoruz. Her iş parçacığı bir video dosyasında izleyiciyi çalıştırmaktan sorumludur ve tüm iş parçacıkları arka planda aynı anda çalışır.
Her iş parçacığının doğru parametreleri (video dosyası, kullanılacak model ve dosya dizini) almasını sağlamak için bu parametreleri kabul eden ve ana izleme döngüsünü içeren run_tracker_in_thread işlevini tanımlıyoruz. Bu işlev videoyu kare kare okur, izleyiciyi çalıştırır ve açıklama eklenmiş sonuçları kaydeder.
Bu örnekte iki farklı model kullanılıyor: yolo26n.pt ve yolo26n-seg.pt; her biri farklı bir video dosyasındaki nesneleri izliyor. Video dosyaları SOURCES içinde belirtilir.
threading.Thread içindeki daemon=True parametresi, ana program biter bitmez bu iş parçacıklarının kapatılacağı anlamına gelir. Ardından iş parçacıklarını start() ile başlatır ve her iki izleyici iş parçacığı da tamamlanana kadar ana iş parçacığının beklemesi için join() kullanırız.
Son olarak, tüm iş parçacıkları görevlerini tamamladıktan sonra sonuçları gösteren pencereler cv2.destroyAllWindows() kullanılarak kapatılır.
import threading
import cv2
from ultralytics import YOLO
# Model adlarını ve video kaynaklarını tanımla
MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"] # yerel video, web kamerası için 0
def run_tracker_in_thread(model_name, filename):
"""Run YOLO tracker in its own thread for concurrent processing.
Args:
model_name (str): Model checkpoint name or path loaded inside the thread.
filename (str): The path to the video file or the identifier for the webcam/external camera source.
"""
model = YOLO(model_name)
results = model.track(filename, save=True, stream=True)
for r in results:
pass
# Bir for döngüsüyle izleyici iş parçacıkları oluştur ve başlat
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
tracker_threads.append(thread)
thread.start()
# Tüm izleyici iş parçacıklarının tamamlanmasını bekle
for thread in tracker_threads:
thread.join()
# Temizle ve pencereleri kapat
cv2.destroyAllWindows()Bu örnek, daha fazla iş parçacığı oluşturup aynı yöntemi uygulayarak daha fazla video dosyası ve model işleyecek şekilde kolayca genişletilebilir.
Yeni İzleyicilere Katkıda Bulun#
Çoklu nesne izleme konusunda yetkin misin ve Ultralytics YOLO ile bir izleme algoritmasını başarıyla uyguladın ya da uyarladın mı? Seni ultralytics/cfg/trackers bölümümüze katkıda bulunmaya davet ediyoruz! Gerçek dünyadaki uygulamaların ve çözümlerin, izleme görevleri üzerinde çalışan kullanıcılara büyük değer sağlayabilir.
Bu bölüme katkıda bulunarak Ultralytics YOLO çerçevesindeki izleme çözümlerinin kapsamını genişletmeye, topluluk için yeni işlevler ve kullanım alanları eklemeye yardımcı olursun.
Katkıda bulunmaya başlamak için Pull Request (PR) gönderme talimatlarının tamamı için Katkıda Bulunma Kılavuzumuza başvur. Katkılarını görmek için sabırsızlanıyoruz!
Gelin, Ultralytics YOLO ekosisteminin izleme yeteneklerini birlikte geliştirelim 🙏!
Sık Sorulan Sorular#
Video analitiğinde çoklu nesne izleme, nesneleri belirlemeyi ve tespit edilen her nesne için video kareleri boyunca benzersiz bir kimliği korumayı kapsar. Ultralytics YOLO; gerçek zamanlı izleme ve nesne kimlikleri sağlayarak güvenlik gözetimi ve spor analitiği gibi görevleri kolaylaştırır. Sistem, YAML dosyaları üzerinden yapılandırılabilen BoT-SORT, ByteTrack, OC-SORT, Deep OC-SORT, FastTracker ve TrackTrack gibi izleyiciler kullanır.
Hayır. Standart Ultralytics
.ptdosyaları YOLO model ağırlıklarını saklarken izleyici, çıkarım sırasındamodel.track()tarafından oluşturulur. İz kimlikleri art arda gelen karelerdeki izleyici durumuna bağlıdır. Bu nedenle tek bir bağımsız görüntü kutular, sınıflar ve güven değerleri gibi tespit sonuçları döndürebilir; ancak tek başına anlamlı ve kalıcı izleme kimlikleri üretemez.Dağıtım için tespit modelini ve izleyiciyi uygulamanda birlikte paketle; kareler aynı video akışından geliyorsa
model.track()öğesini kare kare,persist=Trueile çağır. Videolar arasında durum aktarımını önlemek için alakasız akışlarda ayrı model veya izleyici örnekleri kullan.Var olan bir izleyici yapılandırma dosyasını (ör.
custom_tracker.yaml) Ultralytics izleyici yapılandırma dizininden kopyalayıptracker_typedışında gerekli parametreleri değiştirerek özel bir izleyici yapılandırabilirsin. Bu dosyayı izleme modelinde şöyle kullan:Ö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 aynı anda nesne izlemek için Python'ın
threadingmodülünü kullanabilirsin. Her iş parçacığı ayrı bir video akışını işler. Bunu nasıl ayarlayabileceğine dair bir örnek:Çok İş Parçacıklı İzlemeimport threading import cv2 from ultralytics import YOLO # Model adlarını ve video kaynaklarını tanımla MODEL_NAMES = ["yolo26n.pt", "yolo26n-seg.pt"] SOURCES = ["path/to/video.mp4", "0"] # yerel video, web kamerası için 0 def run_tracker_in_thread(model_name, filename): """Run YOLO tracker in its own thread for concurrent processing. Args: model_name (str): Model checkpoint name or path loaded inside the thread. filename (str): The path to the video file or the identifier for the webcam/external camera source. """ model = YOLO(model_name) results = model.track(filename, save=True, stream=True) for r in results: pass # Bir for döngüsüyle izleyici iş parçacıkları oluştur ve başlat tracker_threads = [] for video_file, model_name in zip(SOURCES, MODEL_NAMES): thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True) tracker_threads.append(thread) thread.start() # Tüm izleyici iş parçacıklarının tamamlanmasını bekle for thread in tracker_threads: thread.join() # Temizle ve pencereleri kapat cv2.destroyAllWindows()Ultralytics YOLO ile çoklu nesne izlemenin aşağıdakiler de dahil olmak üzere birçok uygulaması vardır:
- Ulaşım: Trafik yönetimi ve otonom sürüş için araç izleme.
- Perakende: Mağaza içi analiz ve güvenlik için insanları izleme.
- Su Ürünleri Yetiştiriciliği: Su ortamlarını izlemek için balıkları takip etme.
- Spor Analitiği: Performans analizi için oyuncuları ve ekipmanları izleme.
- Güvenlik Sistemleri: Şüpheli etkinlikleri izleme ve güvenlik alarmları oluşturma.
Bu uygulamalar, Ultralytics YOLO'nun yüksek kare hızlı videoları olağanüstü doğrulukla gerçek zamanlı işleyebilme özelliğinden yararlanır.
Birden fazla video karesindeki nesne izlerini görselleştirmek için tespit edilen nesnelerin yollarını çizmede YOLO modelinin izleme özelliklerini OpenCV ile birlikte kullanabilirsin. Bunu gösteren örnek bir betik:
Birden fazla video karesi boyunca izleri çizmefrom collections import defaultdict import cv2 import numpy as np from ultralytics import YOLO model = YOLO("yolo26n.pt") video_path = "path/to/video.mp4" cap = cv2.VideoCapture(video_path) track_history = defaultdict(list) while cap.isOpened(): success, frame = cap.read() if success: result = model.track(frame, persist=True)[0] annotated_frame = result.plot() if result.boxes and result.boxes.is_track: boxes = result.boxes.xywh.cpu() track_ids = result.boxes.id.int().cpu().tolist() for box, track_id in zip(boxes, track_ids): x, y, w, h = box track = track_history[track_id] track.append((float(x), float(y))) if len(track) > 30: track.pop(0) points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2)) cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10) cv2.imshow("YOLO26 Tracking", annotated_frame) if cv2.waitKey(1) & 0xFF == ord("q"): break else: break cap.release() cv2.destroyAllWindows()Bu betik, izlenen nesnelerin zaman içindeki hareket yollarını gösteren izleme çizgilerini çizer ve nesne davranışları ile örüntüleri hakkında değerli bilgiler sağlar.