Skip to main content

VisDrone 데이터셋

VisDrone 데이터셋은 중국 텐진대학교 머신러닝 및 데이터 마이닝 연구실의 AISKYEYE 팀이 만든 대규모 벤치마크입니다. 드론 기반 이미지 및 비디오 분석과 관련된 다양한 컴퓨터 비전 작업을 위한 세심하게 주석이 달린 정답 데이터를 포함합니다.



시청: VisDrone 데이터셋에서 Ultralytics YOLO26 학습 방법 | 항공 감지 | 완전 튜토리얼 🚀

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

데이터셋 구조

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

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

활용 분야

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

데이터셋 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 에폭 동안 VisDrone 데이터셋에서 YOLO26n 모델을 학습하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 학습 페이지를 참조하세요.

학습 예시
from ultralytics import YOLO

# 모델 로드
model = YOLO("yolo26n.pt")  # 사전 학습된 모델 로드 (학습에 권장)

# 모델 학습
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

샘플 데이터 및 주석

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

객체 감지가 포함된 VisDrone 데이터셋 항공 드론 이미지

  • Task 1: 이미지에서 객체 감지 - 이 이미지는 객체가 바운딩 박스로 주석이 달린 이미지에서의 객체 감지 예시를 보여줍니다. 데이터셋은 이 작업을 위한 모델 개발을 촉진하기 위해 다양한 위치, 환경, 밀도에서 촬영된 광범위한 이미지를 제공합니다.

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

인용 및 감사

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

Quote
@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 데이터셋을 만들고 유지 관리한 중국 텐진대학교 머신러닝 및 데이터 마이닝 연구실의 AISKYEYE 팀에 감사드립니다. VisDrone 데이터셋과 그 제작자들에 대한 자세한 정보는 VisDrone 데이터셋 GitHub 저장소를 방문하세요.

자주 묻는 질문

VisDrone 데이터셋이란 무엇이며 주요 특징은 무엇인가요?

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

  • 구성: 261,908개의 프레임과 10,209개의 정적 이미지가 포함된 288개의 비디오 클립.
  • 주석: 보행자, 자동차, 자전거, 삼륜차 등의 객체에 대한 260만 개 이상의 바운딩 박스.
  • 다양성: 다양한 날씨 및 조명 조건에서 도시 및 농촌 환경의 14개 도시에 걸쳐 수집.
  • 작업: 이미지 및 비디오에서의 객체 감지, 단일 객체 및 다중 객체 추적, 군중 계수의 5가지 주요 작업으로 구분.

Ultralytics를 사용하여 VisDrone 데이터셋으로 YOLO26 모델을 학습하려면 어떻게 해야 하나요?

이미지 크기 640으로 100 에폭 동안 VisDrone 데이터셋에서 YOLO26 모델을 학습하려면 다음 단계를 따르세요:

학습 예시
from ultralytics import YOLO

# 사전 학습된 모델 로드
model = YOLO("yolo26n.pt")

# 모델 학습
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

추가 구성 옵션에 대해서는 모델 학습 페이지를 참조하세요.

VisDrone 데이터셋의 주요 하위 집합과 그 활용 분야는 무엇인가요?

VisDrone 데이터셋은 각각 특정 컴퓨터 비전 작업을 위해 맞춤화된 5가지 주요 하위 집합으로 나뉩니다:

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

이러한 하위 집합들은 감시, 교통 모니터링, 공공 안전 등의 드론 기반 애플리케이션에서 딥러닝 모델을 학습하고 평가하는 데 광범위하게 사용됩니다.

Ultralytics에서 VisDrone 데이터셋 구성 파일은 어디에서 찾을 수 있나요?

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

연구에서 VisDrone 데이터셋을 사용한 경우 어떻게 인용해야 하나요?

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

Quote
@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}
}

댓글