YOLO Vision 2026:
No license

VisDrone 데이터셋#

VisDrone Dataset은 대규모 드론 촬영 이미지 벤치마크로, 그 중 detection 서브셋(VisDrone2019-DET)은 10개의 객체 클래스로 object detection 주석이 달린 8,629개의 항공 이미지(train 6,471개, validation 548개, test-dev 1,610개)를 제공합니다. 이 벤치마크는 중국 톈진 대학교 Machine Learning and Data Mining 연구실의 AISKYEYE 팀에 의해 제작되었습니다.



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

전체 VisDrone 벤치마크는 중국 내 14개 도시의 다양한 도시 및 농촌 환경, 희박 및 밀집된 장면, 그리고 다양한 날씨와 조명 조건을 아우르는 드론 탑재 카메라로 촬영된 288개의 비디오 클립(261,908개 프레임)과 10,209개의 정지 이미지로 구성되어 있습니다. 프레임에는 장면 가시성, 객체 클래스, 가림(occlusion)과 같은 추가 속성과 함께 260만 개가 넘는 수동 주석이 달린 bounding boxes가 포함되어 있습니다. Ultralytics VisDrone.yaml 설정은 이 벤치마크의 VisDrone2019-DET 정지 이미지 서브셋을 사용합니다.

주요 특징#

  • 작고 밀집된 객체: 항공 시점은 타겟을 매우 작고 밀집되게 만듭니다. 검증용 이미지 548개에만 38,759개의 라벨링된 박스가 포함되어 있으며, 이미지당 평균 약 70개의 객체가 존재합니다.
  • 장면의 다양성: 중국 14개 도시의 도심 및 농촌 지역을 포함하며, 주야간 및 다양한 기상 조건을 아우르는 이미지입니다.
  • 풍부한 어노테이션: 전체 벤치마크에 걸쳐 260만 개 이상의 박스가 있으며, 가려짐 및 가시성 속성이 포함되어 있습니다.
  • 사전 정의된 분할: 일관된 평가를 위해 고정된 훈련/검증/테스트-개발 분할(6,471/548/1,610 이미지)을 제공합니다.

데이터셋 구조#

Ultralytics VisDrone 구성은 VisDrone2019-DET 이미지 서브셋을 다루며 세 부분으로 나뉩니다:

Split이미지설명
학습(Train)6,471탐지기 훈련에 사용되는 라벨링된 항공 이미지
검증548개발 중 evaluation에 사용되는 이미지
Test-dev1,610학습된 모델의 최종 평가를 위한 보류(held-out) 이미지

네 번째 분할인 테스트-챌린지(1,580개 이미지)는 VisDrone 대회를 위해 별도로 보관되어 다운로드되지 않으며, 이 때문에 전체 DET 세트의 총합은 10,209개 이미지입니다.

이 데이터셋은 pedestrian(보행자), people(사람), bicycle(자전거), car(자동차), van(밴), truck(트럭), tricycle(삼륜차), awning-tricycle(덮개가 있는 삼륜차), bus(버스), motor(오토바이)의 10개 객체 클래스를 라벨링합니다. VisDrone은 pedestrian(서 있거나 걷는 사람)과 people(다른 자세를 취하고 있는 사람)을 구분합니다.

자동 YOLO 변환

처음 사용할 때 다운로드 스크립트는 원본 VisDrone 어노테이션을 YOLO 형식으로 변환하며, 무시됨으로 표시된 영역(사용되지 않는 "others" 카테고리 포함)은 건너뜁니다.

응용 분야#

VisDrone의 조밀한 장면과 매우 작은 타겟은 항공 시점에서의 small-object detection을 위한 표준 벤치마크로 만듭니다. 일반적인 응용 분야는 다음과 같습니다:

  • UAV를 통한 교통 모니터링 및 차량 집계
  • 군중 분석 및 공공 안전 감시
  • 인프라 및 건설 현장 검사
  • 잡동사니가 많은 장면에서 작은 객체를 감지하기 위한 Computer vision 연구

다른 항공 이미지 벤치마크에 대해서는 위성 중심의 xView dataset 또는 회전된 박스 기반의 DOTA-v2 dataset을 참조하세요.

데이터셋 YAML#

VisDrone.yaml 파일은 데이터셋 구성(데이터셋 경로, 클래스 이름, 자동 다운로드 및 변환 스크립트)을 정의합니다. 이 파일은 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml의 Ultralytics 저장소에서 유지 관리됩니다.

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

사용법#

~2 GB 다운로드

VisDrone은 처음 훈련할 때 자동으로 다운로드되며, 약 2GB 크기의 아카이브 3개를 내려받습니다. 압축 해제 및 변환 과정에서 약 4GB의 여유 디스크 공간이 필요합니다.

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

훈련 예제
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)

추가 항공 이미지에 레이블을 지정하고 브라우저에서 VisDrone 학습 실행을 관리하려면 Ultralytics Platform을 사용하세요.

샘플 데이터 및 주석#

아래 샘플은 전형적인 VisDrone 장면을 보여줍니다. 바쁜 도로를 내려다보는 항공 시점에서 보행자와 차량들이 작고 밀집된 타겟으로 나타나며, 많은 객체가 서로 부분적으로 가려져 있습니다.

VisDrone dataset aerial drone imagery with object detection

인용 및 감사의 글#

연구 또는 개발 작업에 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={2022},
  volume={44},
  number={11},
  pages={7380-7399},
  doi={10.1109/TPAMI.2021.3119563}}

VisDrone 데이터셋을 만들고 유지 관리해 준 중국 톈진 대학교 Machine Learning and Data Mining 연구실의 AISKYEYE 팀에 감사를 표합니다. 자세한 내용은 VisDrone Dataset GitHub repository를 방문하세요.

FAQ#

  • VisDrone은 객체가 작고 밀집되어 있으며 위에서 내려다보는 드론 촬영 이미지에서 탐지기를 훈련하고 벤치마킹하는 데 사용됩니다. 항공 시점, 혼잡한 장면, 다양한 조건의 조합으로 인해 UAV 기반 교통 모니터링, 군중 분석 및 소형 객체 탐지 연구를 위한 표준 테스트베드가 되었습니다.

  • Ultralytics VisDrone 설정은 8,629개의 이미지(학습용 6,471개, 검증용 548개, 테스트용(test-dev) 1,610개)를 포함합니다. 모든 분할은 pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus, motor의 동일한 10개 클래스를 공유합니다. 전체 세부 사항은 Dataset Structure를 참조하세요.

  • data="VisDrone.yaml"을 사용하여 처음 학습할 때 VisDrone이 자동으로 다운로드됩니다. 수동 단계는 필요하지 않습니다. 스크립트는 Ultralytics GitHub 릴리스 자산에서 세 개의 아카이브(약 2 GB)를 가져와 주석을 YOLO 형식으로 변환합니다. 대회의 비공개 테스트 챌린지 분할은 포함되어 있지 않습니다.

  • 이미지 크기 640으로 100 에포크 동안 VisDrone에서 YOLO26n 모델을 훈련하는 방법은 다음과 같습니다:

    훈련 예제
    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)

    상세한 설정은 Training 페이지와 model training tips를 참조하세요.

  • VisDrone의 객체는 프레임에 비해 매우 작으며(대개 수십 픽셀에 불과함) 조밀하고 심하게 가려진 그룹으로 나타나므로 지상 사진에 최적화된 검출기에 무리를 줍니다. 더 높은 해상도(예: 더 작은 배치 크기의 imgsz=1280)에서 학습 및 예측을 수행하면 작은 타겟을 복구할 수 있으며, SAHI tiled inference는 큰 이미지를 분할하여 작은 객체가 각 추론 창에서 더 많은 공간을 차지하도록 합니다.

  • 전체 VisDrone 벤치마크는 288개의 비디오 클립과 10,209개의 정지 이미지에 걸쳐 이미지 객체 감지, 비디오 객체 감지, 단일 객체 추적, multi-object tracking, 군중 카운팅의 5가지 작업을 다룹니다. Ultralytics VisDrone.yaml 설정은 이미지 감지 작업(VisDrone2019-DET)만 다루며, 6,471개의 학습, 548개의 검증, 1,610개의 test-dev 이미지를 다운로드합니다.

  • "Detection and Tracking Meet Drones Challenge" 논문(IEEE TPAMI, vol. 44, no. 11, 2022, DOI 10.1109/TPAMI.2021.3119563)을 인용하세요. 전체 BibTeX 항목은 위의 Citations and Acknowledgments 섹션에 있습니다.

댓글