Ultralytics YOLO27:
No license

VisDrone Veri Kümesi#

VisDrone Veri Kümesi, algılama alt kümesi (VisDrone2019-DET) nesne algılama için 8.629 hava görüntüsü (6.471 eğitim, 548 doğrulama ve 1.610 test-dev görüntüsü) sağlayan, 10 nesne sınıfıyla etiketlenmiş büyük ölçekli bir drone görüntüsü kıyaslama veri kümesidir. Çin'deki Tianjin Üniversitesi, Makine Öğrenimi ve [Veri Madenciliği](https://ultralytics-translation-2.invalid Laboratuvarı'ndaki AISKYEYE ekibi tarafından oluşturulmuştur.



Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀

Tam VisDrone kıyaslama veri kümesi, Çin genelindeki 14 farklı şehirde drone kameralarıyla çekilmiş 288 video klibi (261.908 kare) ve 10.209 statik görüntüden oluşur; kentsel ve kırsal ortamları, seyrek ve kalabalık sahneleri, farklı hava ve aydınlatma koşullarını kapsar. Karelerde, sahne görünürlüğü, nesne sınıfı ve örtülme gibi ek özelliklerle birlikte 2,6 milyondan fazla manuel olarak etiketlenmiş sınırlayıcı kutu bulunur. Ultralytics VisDrone.yaml yapılandırması, bu kıyaslama veri kümesinin VisDrone2019-DET statik görüntü alt kümesini kullanır.

Temel Özellikler#

  • Küçük ve yoğun nesneler: Hava perspektifi hedefleri küçük ve yoğun hâle getirir; yalnızca 548 doğrulama görüntüsünde 38.759 etiketli kutu bulunur ve görüntü başına ortalama yaklaşık 70 nesne düşer.
  • Sahne çeşitliliği: 14 Çin şehrinden alınan görüntüler kentsel ve kırsal konumları, gece ve gündüzü ve farklı hava koşullarını kapsar.
  • Zengin açıklamalar: Tam kıyaslama veri kümesinde, örtülme ve görünürlük özellikleriyle birlikte 2,6 milyondan fazla kutu bulunur.
  • Önceden tanımlanmış bölümler: Tutarlı değerlendirme için sabit eğitim / doğrulama / test-dev bölümleri (6.471 / 548 / 1.610 görüntü).

Veri Kümesi Yapısı#

Ultralytics VisDrone yapılandırması, üç bölüme ayrılmış VisDrone2019-DET görüntü alt kümesini kapsar:

BölümGörüntülerAçıklama
Eğit6,471Dedektörü eğitmek için kullanılan etiketli hava görüntüleri
Doğrulama548Geliştirme sırasında değerlendirme için kullanılan görüntüler
Test-dev1,610Eğitilmiş modelin son değerlendirmesi için ayrılan görüntüler

Dördüncü bir bölüm olan test-challenge (1.580 görüntü), VisDrone yarışması için ayrılmıştır ve indirilmez; tam DET veri kümesinin toplam 10.209 görüntüden oluşmasının nedeni budur.

Veri kümesinde 10 nesne sınıfı açıklanır: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus ve motor. VisDrone, pedestrian sınıfını (ayakta duran veya yürüyen kişi) people sınıfından (başka herhangi bir duruşta bulunan kişi) ayırt eder.

Otomatik YOLO dönüşümü

İlk kullanımda indirme betiği, özgün VisDrone açıklamalarını YOLO biçimine dönüştürür ve yok sayılacak olarak işaretlenen bölgeleri atlar; bu işlem kullanılmayan "others" kategorisini de dışlar.

Uygulamalar#

VisDrone'un yoğun sahneleri ve küçük hedefleri, onu hava perspektiflerinden küçük nesne algılama için standart bir kıyaslama veri kümesi hâline getirir. Yaygın uygulamalar şunlardır:

  • İHA'lardan trafik izleme ve araç sayımı
  • Kalabalık analizi ve kamu güvenliği gözetimi
  • Altyapı ve inşaat sahası denetimi
  • Dağınık sahnelerde küçük nesneleri algılamaya yönelik bilgisayarlı görü araştırmaları

Diğer hava görüntüsü kıyaslama veri kümeleri için uydu odaklı xView veri kümesine veya yönlendirilmiş kutular kullanan DOTA-v2 veri kümesine bakabilirsin.

Veri Kümesi YAML'i#

VisDrone.yaml dosyası veri kümesi yapılandırmasını, yani veri kümesi yollarını, sınıf adlarını ve otomatik indirme-dönüştürme betiğini tanımlar. Dosya, Ultralytics deposunda https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml konumunda tutulur.

ultralytics/cfg/datasets/VisDrone.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset by Tianjin University
# Documentation: https://docs.ultralytics.com/datasets/detect/visdrone
# Example usage: yolo train data=VisDrone.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── VisDrone ← downloads here (~2 GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: VisDrone # dataset root dir
train: images/train # train images (relative to 'path') 6471 images
val: images/val # val images (relative to 'path') 548 images
test: images/test # test-dev images (optional) 1610 images

# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
  import os
  from pathlib import Path
  import shutil

  from ultralytics.utils.downloads import download
  from ultralytics.utils import ASSETS_URL, TQDM

  def visdrone2yolo(dir, split, source_name=None):
      """Convert VisDrone annotations to YOLO format with images/{split} and labels/{split} structure."""
      from PIL import Image

      source_dir = dir / (source_name or f"VisDrone2019-DET-{split}")
      images_dir = dir / "images" / split
      labels_dir = dir / "labels" / split
      labels_dir.mkdir(parents=True, exist_ok=True)

      # Move images to new structure
      if (source_images_dir := source_dir / "images").exists():
          images_dir.mkdir(parents=True, exist_ok=True)
          for img in source_images_dir.glob("*.jpg"):
              img.rename(images_dir / img.name)

      for f in TQDM((source_dir / "annotations").glob("*.txt"), desc=f"Converting {split}"):
          img_size = Image.open(images_dir / f.with_suffix(".jpg").name).size
          dw, dh = 1.0 / img_size[0], 1.0 / img_size[1]
          lines = []

          with open(f, encoding="utf-8") as file:
              for row in [x.split(",") for x in file.read().strip().splitlines()]:
                  if row[4] != "0":  # Skip ignored regions
                      x, y, w, h = map(int, row[:4])
                      cls = int(row[5]) - 1
                      # Convert to YOLO format
                      x_center, y_center = (x + w / 2) * dw, (y + h / 2) * dh
                      w_norm, h_norm = w * dw, h * dh
                      lines.append(f"{cls} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n")

          (labels_dir / f.name).write_text("".join(lines), encoding="utf-8")

  # Download (ignores test-challenge split)
  dir = Path(yaml["path"])  # dataset root dir
  urls = [
      f"{ASSETS_URL}/VisDrone2019-DET-train.zip",
      f"{ASSETS_URL}/VisDrone2019-DET-val.zip",
      f"{ASSETS_URL}/VisDrone2019-DET-test-dev.zip",
      # f"{ASSETS_URL}/VisDrone2019-DET-test-challenge.zip",
  ]
  download(urls, dir=dir, threads=4)

  # Convert
  splits = {"VisDrone2019-DET-train": "train", "VisDrone2019-DET-val": "val", "VisDrone2019-DET-test-dev": "test"}
  for folder, split in splits.items():
      visdrone2yolo(dir, split, folder)  # convert VisDrone annotations to YOLO labels
      shutil.rmtree(dir / folder)  # cleanup original directory

Kullanım#

~2 GB indirme

VisDrone, eğitimi ilk kez başlattığında otomatik olarak indirilir — toplamda yaklaşık 2 GB olan üç arşiv — ve ayıklama ile dönüştürme sırasında yaklaşık 4 GB boş disk alanı gerektirir.

VisDrone veri kümesi üzerinde 640 görüntü boyutuyla 100 epoch boyunca bir YOLO26n modeli eğitmek için aşağıdaki kod parçacıklarını kullanabilirsin. Kullanılabilir bağımsız değişkenlerin kapsamlı listesi için modelin Eğitim sayfasına bakabilirsin.

Eğitim Örneği
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model - dataset will auto-download on first run
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

Ek hava görüntülerini etiketlemek ve VisDrone eğitim çalışmalarını tarayıcında yönetmek için Ultralytics Platform'u kullanabilirsin.

Örnek Veriler ve Açıklamalar#

Aşağıdaki örnek tipik bir VisDrone sahnesini gösterir: Yayaların ve araçların küçük, yoğun biçimde kümelenmiş hedefler olarak göründüğü, birçoğunun birbirini kısmen örttüğü yoğun bir yolun hava perspektifi.

Nesne algılamalı VisDrone veri kümesi hava drone görüntüsü

Atıflar ve Teşekkürler#

VisDrone veri kümesini araştırma veya geliştirme çalışmalarında kullanıyorsan lütfen aşağıdaki makaleye atıf yap:

Alıntı
@ARTICLE{9573394,
  author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Fan, Heng and Hu, Qinghua and Ling, Haibin},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title={Detection and Tracking Meet Drones Challenge},
  year={2022},
  volume={44},
  number={11},
  pages={7380-7399},
  doi={10.1109/TPAMI.2021.3119563}}

VisDrone veri kümesini oluşturan ve sürdüren Çin, Tianjin Üniversitesi, Makine Öğrenimi ve Veri Madenciliği Laboratuvarı'ndaki AISKYEYE ekibine teşekkür ederiz. Daha fazla bilgi için VisDrone Veri Kümesi GitHub deposunu ziyaret edebilirsin.

SSS#

  • VisDrone, nesnelerin küçük ve yoğun olduğu, yukarıdan görülen drone görüntüleri üzerinde dedektörleri eğitmek ve kıyaslamak için kullanılır. Hava perspektifleri, kalabalık sahneler ve değişken koşulların birleşimi, onu İHA tabanlı trafik izleme, kalabalık analizi ve küçük nesne algılama araştırmaları için standart bir test ortamı hâline getirir.

  • Ultralytics VisDrone yapılandırması 8.629 görüntü içerir: 6.471 eğitim, 548 doğrulama ve 1.610 test (test-dev) görüntüsü. Tüm bölümler aynı 10 sınıfı paylaşır: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus ve motor. Ayrıntılı döküm için Veri Kümesi Yapısı sayfasına bakabilirsin.

  • VisDrone, data="VisDrone.yaml" ile ilk kez eğitim yaptığında otomatik olarak indirilir; manuel işlem gerekmez. Betik, Ultralytics GitHub sürüm varlıklarından üç arşivi (yaklaşık 2 GB) indirir ve açıklamaları YOLO biçimine dönüştürür. Yarışmanın ayrılan test-challenge bölümü dahil değildir.

  • VisDrone üzerinde 640 görüntü boyutuyla 100 epoch boyunca bir YOLO26n modeli eğit:

    Eğitim Örneği
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

    Ayrıntılı yapılandırmalar için Eğitim sayfasına ve model eğitimi ipuçlarına bakabilirsin.

  • VisDrone'daki nesneler kareye göre çok küçüktür; çoğu zaman yalnızca birkaç düzine piksel boyutundadır ve yoğun, büyük ölçüde örtülmüş gruplar hâlinde görünür. Bu durum, yer seviyesinden çekilmiş fotoğraflar üzerinde ayarlanmış dedektörleri zorlar. Daha yüksek çözünürlükte eğitim yapmak ve tahmin gerçekleştirmek (örneğin daha küçük bir batch ile imgsz=1280 kullanmak) küçük hedefleri geri kazandırır; SAHI döşemeli çıkarımı ise büyük görüntüleri dilimleyerek küçük nesnelerin her çıkarım penceresinin daha büyük bir bölümünü kaplamasını sağlar.

  • Tam VisDrone kıyaslama veri kümesi, 288 video klibi ve 10.209 statik görüntü üzerinde beş görevi kapsar: görüntülerde nesne algılama, videolarda nesne algılama, tek nesne takibi, çoklu nesne takibi ve kalabalık sayımı. Ultralytics VisDrone.yaml yapılandırması yalnızca görüntü algılama görevini (VisDrone2019-DET) kapsar ve 6.471 eğitim, 548 doğrulama ve 1.610 test-dev görüntüsünü indirir.

  • "Detection and Tracking Meet Drones Challenge" makalesine (IEEE TPAMI, cilt 44, sayı 11, 2022, DOI 10.1109/TPAMI.2021.3119563) atıf yap; tam BibTeX girdisi yukarıdaki Atıflar ve Teşekkürler bölümünde bulunur.

Yorumlar