Ultralytics YOLO27:
No license

VisDrone 데이터셋#

VisDrone 데이터셋은 대규모 드론 이미지 벤치마크로, 검출 서브셋(VisDrone2019-DET)은 객체 검출을 위해 10개 객체 클래스로 어노테이션된 항공 이미지 8,629장(학습 6,471장, 검증 548장, test-dev 1,610장)을 제공합니다. 이 데이터셋은 중국 톈진대학교의 머신러닝 및 데이터 마이닝 연구실에서 AISKYEYE 팀이 제작했습니다.



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

전체 VisDrone 벤치마크는 중국 전역 14개 도시에서 드론 장착 카메라로 촬영한 288개 동영상 클립(261,908개 프레임)과 10,209장의 정적 이미지로 구성되며, 도시 및 농촌 환경, 한산하고 붐비는 장면, 다양한 날씨와 조명 조건을 포함합니다. 해당 프레임에는 260만 개가 넘는 수동 주석 바운딩 박스가 있으며, 장면 가시성, 객체 클래스, 가림과 같은 추가 속성도 포함됩니다. Ultralytics VisDrone.yaml 구성은 이 벤치마크의 VisDrone2019-DET 정적 이미지 하위 집합을 사용합니다.

주요 기능#

  • 작고 밀집된 객체: 항공 시점에서는 대상이 작고 밀집되어 나타납니다. 검증 이미지 548장에만 38,759개의 라벨링된 박스가 포함되어 있으며, 이미지당 평균 약 70개의 객체에 해당합니다.
  • 장면 다양성: 중국 14개 도시에서 촬영한 이미지로, 도시 및 농촌 지역, 주간 및 야간, 다양한 날씨 조건을 포함합니다.
  • 풍부한 주석: 전체 벤치마크에 260만 개가 넘는 박스가 있으며, 가림 및 가시성 속성도 포함합니다.
  • 사전 정의된 분할: 일관된 평가를 위해 학습 / 검증 / test-dev 분할(이미지 6,471 / 548 / 1,610장)이 고정되어 있습니다.

데이터셋 구조#

Ultralytics VisDrone 구성은 VisDrone2019-DET 이미지 하위 집합을 다루며, 다음 세 부분으로 분할됩니다.

분할이미지설명
학습6,471검출기 학습에 사용되는 라벨링된 항공 이미지
검증548개발 중 평가에 사용되는 이미지
Test-dev1,610학습된 모델의 최종 평가를 위해 보류된 이미지

네 번째 분할인 test-challenge(이미지 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의 밀집된 장면과 작은 대상은 항공 시점의 소형 객체 탐지를 위한 표준 벤치마크로 활용됩니다. 일반적인 응용 분야는 다음과 같습니다.

  • UAV를 이용한 교통 모니터링 및 차량 수 측정
  • 군중 분석 및 공공 안전 감시
  • 인프라 및 건설 현장 검사
  • 복잡한 장면에서 작은 객체를 탐지하는 컴퓨터 비전 연구

다른 항공 영상 벤치마크는 위성 영상에 중점을 둔 xView 데이터셋 또는 방향성 박스를 사용하는 DOTA-v2 데이터셋을 참조하십시오.

데이터셋 YAML#

VisDrone.yaml 파일은 데이터셋 구성(데이터셋 경로, 클래스 이름, 자동 다운로드 및 변환 스크립트)을 정의합니다. 이 파일은 Ultralytics 저장소의 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 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

사용법#

약 2GB 다운로드

VisDrone은 처음 학습할 때 자동으로 다운로드됩니다. 세 개의 아카이브가 총 약 2GB이며, 압축 해제 및 변환 중에는 약 4GB의 디스크 여유 공간이 필요합니다.

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

학습 예제
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 데이터셋 항공 드론 영상

인용 및 감사의 글#

연구 또는 개발 작업에서 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}}

중국 톈진대학교 Machine Learning and Data Mining 연구실의 AISKYEYE 팀이 VisDrone 데이터셋을 제작하고 유지 관리한 데 대해 감사를 표합니다. 자세한 내용은 VisDrone 데이터셋 GitHub 저장소를 참조하십시오.

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개 클래스를 공유합니다. 전체 구성은 데이터셋 구조를 참조하십시오.

  • data="VisDrone.yaml"으로 처음 학습할 때 VisDrone이 자동으로 다운로드되므로 수동 단계가 필요하지 않습니다. 스크립트는 Ultralytics GitHub 릴리스 에셋에서 세 개의 아카이브(약 2GB)를 가져와 주석을 YOLO 형식으로 변환합니다. 대회를 위해 제공되지 않는 test-challenge 분할은 포함되지 않습니다.

  • 이미지 크기 640으로 VisDrone에서 YOLO26n 모델을 100 에포크 동안 학습합니다.

    학습 예제
    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의 객체는 프레임에 비해 매우 작아 대개 수십 픽셀에 불과하며, 심하게 가려진 밀집된 그룹으로 나타납니다. 따라서 지상 수준 사진에 맞게 조정된 검출기에 부담을 줍니다. 더 높은 해상도(예: 더 작은 배치와 함께 imgsz=1280)로 학습하고 예측하면 작은 대상을 복원할 수 있으며, SAHI 타일 추론은 큰 이미지를 분할하여 각 추론 창에서 작은 객체가 더 많은 영역을 차지하도록 합니다.

  • 전체 VisDrone 벤치마크는 288개 동영상 클립과 10,209장의 정적 이미지에서 이미지 객체 탐지, 동영상 객체 탐지, 단일 객체 추적, 다중 객체 추적, 군중 수 측정의 5개 작업을 다룹니다. Ultralytics VisDrone.yaml 구성은 이미지 탐지 작업(VisDrone2019-DET)만 다루며, 학습 이미지 6,471장, 검증 이미지 548장, test-dev 이미지 1,610장을 다운로드합니다.

  • "Detection and Tracking Meet Drones Challenge" 논문(IEEE TPAMI, 44권, 11호, 2022년, DOI 10.1109/TPAMI.2021.3119563)을 인용하십시오. 전체 BibTeX 항목은 위의 인용 및 감사의 글 섹션에 있습니다.

댓글