İçeriğe geç

VisDrone Veri Kümesi

VisDrone Veri Kümesi, Çin'deki Tianjin Üniversitesi Makine Öğrenimi ve Veri Madenciliği Laboratuvarı'ndaki AISKYEYE ekibi tarafından oluşturulan büyük ölçekli bir kıyaslama ölçütüdür. Drone tabanlı görüntü ve video analiziyle ilgili çeşitli bilgisayarla görme görevleri için dikkatlice açıklanmış temel gerçek verilerini içerir.

VisDrone, drone'a monte edilmiş çeşitli kameralar tarafından çekilen 261.908 kare ve 10.209 statik görüntü içeren 288 video klipten oluşmaktadır. Veri kümesi konum (Çin genelinde 14 farklı şehir), çevre (kentsel ve kırsal), nesneler (yayalar, araçlar, bisikletler vb.) ve yoğunluk (seyrek ve kalabalık sahneler) gibi çok çeşitli unsurları kapsamaktadır. Veri seti, farklı senaryolar, hava ve ışık koşulları altında çeşitli drone platformları kullanılarak toplanmıştır. Bu karelere yayalar, arabalar, bisikletler ve üç tekerlekli bisikletler gibi hedeflerin 2,6 milyondan fazla sınırlayıcı kutusu manuel olarak eklenmiştir. Daha iyi veri kullanımı için sahne görünürlüğü, nesne sınıfı ve oklüzyon gibi öznitelikler de sağlanmıştır.

Veri Kümesi Yapısı

VisDrone veri kümesi, her biri belirli bir göreve odaklanan beş ana alt küme halinde düzenlenmiştir:

  1. Görev 1: Görüntülerde nesne algılama
  2. Görev 2: Videolarda nesne algılama
  3. Görev 3: Tek nesne izleme
  4. Görev 4: Çoklu nesne takibi
  5. Görev 5: Kalabalık sayımı

Uygulamalar

VisDrone veri kümesi, nesne algılama, nesne izleme ve kalabalık sayma gibi drone tabanlı bilgisayarla görme görevlerinde derin öğrenme modellerini eğitmek ve değerlendirmek için yaygın olarak kullanılmaktadır. Veri setinin çok çeşitli sensör verileri, nesne açıklamaları ve öznitelikleri, onu drone tabanlı bilgisayarla görme alanındaki araştırmacılar ve uygulayıcılar için değerli bir kaynak haline getirmektedir.

Veri Kümesi YAML

Veri kümesi yapılandırmasını tanımlamak için bir YAML (Yet Another Markup Language) dosyası kullanılır. Veri kümesinin yolları, sınıfları ve diğer ilgili bilgiler hakkında bilgi içerir. Visdrone veri kümesi söz konusu olduğunda VisDrone.yaml dosyası şu adreste tutulur https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.

ultralytics/cfg/datasets/VisDrone.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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.3 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: ../datasets/VisDrone # dataset root dir
train: VisDrone2019-DET-train/images # train images (relative to 'path')  6471 images
val: VisDrone2019-DET-val/images # val images (relative to 'path')  548 images
test: VisDrone2019-DET-test-dev/images # test 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

  from ultralytics.utils.downloads import download

  def visdrone2yolo(dir):
      from PIL import Image
      from tqdm import tqdm

      def convert_box(size, box):
          # Convert VisDrone box to YOLO xywh box
          dw = 1. / size[0]
          dh = 1. / size[1]
          return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh

      (dir / 'labels').mkdir(parents=True, exist_ok=True)  # make labels directory
      pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
      for f in pbar:
          img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
          lines = []
          with open(f, 'r') as file:  # read annotation.txt
              for row in [x.split(',') for x in file.read().strip().splitlines()]:
                  if row[4] == '0':  # VisDrone 'ignored regions' class 0
                      continue
                  cls = int(row[5]) - 1
                  box = convert_box(img_size, tuple(map(int, row[:4])))
                  lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
                  with open(str(f).replace(f'{os.sep}annotations{os.sep}', f'{os.sep}labels{os.sep}'), 'w') as fl:
                      fl.writelines(lines)  # write label.txt


  # Download
  dir = Path(yaml['path'])  # dataset root dir
  urls = ['https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-train.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-val.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-dev.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-challenge.zip']
  download(urls, dir=dir, curl=True, threads=4)

  # Convert
  for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
      visdrone2yolo(dir / d)  # convert VisDrone annotations to YOLO labels

Kullanım

VisDrone veri kümesinde bir YOLOv8n modelini 640 görüntü boyutuyla 100 epok boyunca eğitmek için aşağıdaki kod parçacıklarını kullanabilirsiniz. Kullanılabilir bağımsız değişkenlerin kapsamlı bir listesi için Model Eğitimi sayfasına bakın.

Tren Örneği

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data='VisDrone.yaml', epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VisDrone.yaml model=yolov8n.pt epochs=100 imgsz=640

Örnek Veriler ve Açıklamalar

VisDrone veri kümesi, drone'a monte edilmiş kameralar tarafından çekilen çeşitli görüntü ve videoları içerir. İşte veri kümesinden bazı veri örnekleri ve bunlara karşılık gelen ek açıklamalar:

Veri kümesi örnek görüntüsü

  • Görev 1: Görüntülerde nesne tespiti - Bu görüntü, nesnelerin sınırlayıcı kutularla açıklandığı görüntülerde nesne tespitinin bir örneğini göstermektedir. Veri kümesi, bu görev için modellerin geliştirilmesini kolaylaştırmak üzere farklı konumlardan, ortamlardan ve yoğunluklardan alınan çok çeşitli görüntüler sunmaktadır.

Bu örnek VisDrone veri setindeki verilerin çeşitliliğini ve karmaşıklığını ortaya koymakta ve drone tabanlı bilgisayarla görme görevleri için yüksek kaliteli sensör verilerinin önemini vurgulamaktadır.

Atıflar ve Teşekkür

VisDrone veri setini araştırma veya geliştirme çalışmalarınızda kullanırsanız, lütfen aşağıdaki makaleye atıfta bulunun:

@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={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3119563}}

Drone tabanlı bilgisayarla görme araştırma topluluğu için değerli bir kaynak olarak VisDrone veri setini oluşturan ve sürdüren Çin'deki Tianjin Üniversitesi Makine Öğrenimi ve Veri Madenciliği Laboratuvarı'ndaki AISKYEYE ekibine teşekkür ederiz. VisDrone veri seti ve yaratıcıları hakkında daha fazla bilgi için VisDrone Veri Seti GitHub deposunu ziyaret edin.



Oluşturuldu 2023-11-12, Güncellendi 2023-11-22
Yazarlar: glenn-jocher (3), Laughing-q (1)

Yorumlar