VisDrone 데이터셋

VisDrone Dataset은 중국 톈진 대학교의 Machine Learning 및 데이터 마이닝 연구소의 AISKYEYE 팀이 구축한 대규모 벤치마크입니다. 이 데이터셋은 드론 기반 이미지 및 비디오 분석과 관련된 다양한 컴퓨터 비전 작업을 위해 세심하게 주석이 달린 그라운드 트루스 데이터를 포함합니다.



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

VisDrone은 다양한 드론 탑재 카메라로 촬영된 261,908개의 프레임으로 구성된 288개의 비디오 클립과 10,209개의 정적 이미지로 이루어져 있습니다. 이 데이터셋은 위치(중국 내 14개 도시), 환경(도심 및 농촌), 객체(보행자, 차량, 자전거 등), 밀도(희소 및 혼잡 장면)를 포함한 광범위한 측면을 다룹니다. 데이터셋은 다양한 드론 플랫폼을 사용하여 서로 다른 시나리오와 기상 및 조명 조건 하에서 수집되었습니다. 이 프레임들에는 보행자, 자동차, 자전거, 삼륜차와 같은 대상의 260만 개 이상의 BBox가 수동으로 주석 처리되어 있습니다. 또한 더 나은 데이터 활용을 위해 장면 가시성, 객체 클래스, 폐색과 같은 속성도 제공됩니다.

데이터셋 구조

VisDrone 데이터셋은 각각 특정 작업에 초점을 맞춘 5개의 주요 하위 집합으로 구성됩니다:

  1. Task 1: 이미지 내 객체 탐지
  2. Task 2: 비디오 내 객체 탐지
  3. Task 3: 단일 객체 추적
  4. Task 4: 다중 객체 추적
  5. Task 5: 군중 계수

응용 분야

VisDrone 데이터셋은 드론 기반 computer vision 작업(객체 탐지, 객체 추적, 군중 계수 등)에서 딥러닝 모델을 학습하고 평가하는 데 널리 사용됩니다. 데이터셋의 다양한 센서 데이터, 객체 주석, 속성은 드론 기반 컴퓨터 비전 분야의 연구자와 실무자들에게 귀중한 자원이 됩니다.

데이터셋 YAML

데이터셋 구성을 정의하기 위해 YAML(Yet Another Markup Language) 파일이 사용됩니다. 여기에는 데이터셋 경로, 클래스 및 기타 관련 정보가 포함되어 있습니다. Visdrone 데이터셋의 경우, VisDrone.yaml 파일은 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml에서 관리됩니다.

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.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: 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

사용법

이미지 크기 640으로 100 epochs 동안 VisDrone 데이터셋에서 YOLO26n 모델을 학습시키려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 Training 페이지를 참조하십시오.

학습 예제
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)

샘플 데이터 및 주석

VisDrone 데이터셋은 드론 탑재 카메라로 촬영된 다양한 이미지 및 비디오 세트를 포함합니다. 다음은 해당 주석과 함께 데이터셋에서 가져온 몇 가지 예시입니다:

VisDrone 데이터셋 항공 드론 이미지 및 객체 탐지

  • Task 1: 이미지 내 Object detection - 이 이미지는 객체가 bounding boxes로 주석 처리된 이미지 내 객체 탐지 예시를 보여줍니다. 데이터셋은 이 작업을 위한 모델 개발을 촉진하기 위해 다양한 위치, 환경 및 밀도에서 촬영된 방대한 이미지를 제공합니다.

이 예시는 VisDrone 데이터셋 데이터의 다양성과 복잡성을 보여주며, 드론 기반 컴퓨터 비전 작업을 위한 고품질 센서 데이터의 중요성을 강조합니다.

인용 및 감사의 글

연구 또는 개발 작업에 VisDrone 데이터셋을 사용하는 경우, 다음 논문을 인용해 주십시오:

인용
@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}}

드론 기반 컴퓨터 비전 연구 커뮤니티를 위한 귀중한 자원으로서 VisDrone 데이터셋을 구축하고 유지 관리해 준 중국 톈진 대학교의 Data Mining 및 머신러닝 연구소의 AISKYEYE 팀에 감사드립니다. VisDrone 데이터셋과 제작자에 대한 자세한 내용은 VisDrone Dataset GitHub repository를 방문하십시오.

FAQ

VisDrone 데이터셋이란 무엇이며 주요 특징은 무엇입니까?

VisDrone Dataset은 중국 톈진 대학교의 AISKYEYE 팀이 구축한 대규모 벤치마크입니다. 드론 기반 이미지 및 비디오 분석과 관련된 다양한 컴퓨터 비전 작업을 위해 설계되었습니다. 주요 특징은 다음과 같습니다:

  • 구성: 261,908개의 프레임이 포함된 288개의 비디오 클립과 10,209개의 정적 이미지.
  • 주석: 보행자, 자동차, 자전거, 삼륜차와 같은 객체에 대한 260만 개 이상의 BBox.
  • 다양성: 14개 도시, 도심 및 농촌 환경에서 서로 다른 기상 및 조명 조건 하에 수집됨.
  • 작업: 5가지 주요 작업으로 나뉨(이미지 및 비디오 내 객체 탐지, 단일 및 다중 객체 추적, 군중 계수).

Ultralytics를 사용하여 YOLO26 모델을 학습시키기 위해 VisDrone 데이터셋을 어떻게 사용할 수 있습니까?

이미지 크기 640으로 100 에포크 동안 VisDrone 데이터셋에서 YOLO26 모델을 학습시키려면 다음 단계를 따르십시오:

학습 예제
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n.pt")

# Train the model
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

추가 구성 옵션은 모델 Training 페이지를 참조하십시오.

VisDrone 데이터셋의 주요 하위 집합과 그 응용 분야는 무엇입니까?

VisDrone 데이터셋은 특정 컴퓨터 비전 작업에 맞춰진 5개의 주요 하위 집합으로 나뉩니다:

  1. Task 1: 이미지 내 객체 탐지.
  2. Task 2: 비디오 내 객체 탐지.
  3. Task 3: 단일 객체 추적.
  4. Task 4: 다중 객체 추적.
  5. Task 5: 군중 계수.

이러한 하위 집합은 감시, 교통 모니터링, 공공 안전과 같은 드론 기반 애플리케이션에서 deep learning 모델을 학습하고 평가하는 데 널리 사용됩니다.

Ultralytics에서 VisDrone 데이터셋의 구성 파일을 어디에서 찾을 수 있습니까?

VisDrone 데이터셋의 구성 파일인 VisDrone.yaml은 다음 링크의 Ultralytics 저장소에서 찾을 수 있습니다: VisDrone.yaml.

연구에 VisDrone 데이터셋을 사용할 경우 어떻게 인용합니까?

연구 또는 개발 작업에 VisDrone 데이터셋을 사용하는 경우, 다음 논문을 인용해 주십시오:

인용
@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}
}

댓글