VisDrone 데이터셋#
VisDrone 데이터셋은 대규모 드론 이미지 벤치마크입니다. 탐지 하위 세트(VisDrone2019-DET)는 객체 탐지를 위해 어노테이션된 항공 이미지 8,629장(학습 6,471장, 검증 548장, test-dev 1,610장)을 제공합니다. 이 데이터셋은 중국 톈진대학교의 머신러닝 및 데이터 마이닝 연구실 AISKYEYE 팀이 만들었습니다.
시청: VisDrone 데이터셋으로 Ultralytics YOLO를 학습하는 방법 | 항공 감지 | 전체 튜토리얼 🚀
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-dev | 1,610 | 학습된 모델의 최종 평가를 위해 분리해 둔 이미지 |
네 번째 분할인 test-challenge(이미지 1,580장)는 VisDrone 대회를 위해 공개되지 않으며 다운로드되지 않습니다. 따라서 전체 DET 세트는 총 10,209장입니다.
데이터셋에는 보행자, 사람, 자전거, 자동차, 밴, 트럭, 삼륜차, 지붕형 삼륜차, 버스, 오토바이의 10개 객체 클래스가 어노테이션되어 있습니다. VisDrone은 pedestrian(서 있거나 걷는 사람)과 people(그 밖의 자세를 취한 사람)을 구분합니다.
처음 사용할 때 다운로드 스크립트는 원본 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 🚀 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사용법#
VisDrone은 처음 학습할 때 자동으로 다운로드됩니다. 세 개의 아카이브를 합한 용량은 약 2GB이며, 압축 해제 및 변환 중에는 디스크 여유 공간이 약 4GB 필요합니다.
YOLO26n 모델을 이미지 크기 640으로 VisDrone 데이터셋에서 100 에폭 동안 학습하려면 다음 코드 예제를 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 학습 페이지를 참조하세요.
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n.pt") # 사전 학습된 모델을 불러옵니다(학습에 권장).
# 모델을 학습합니다 - 데이터셋은 첫 실행 시 자동으로 다운로드됩니다
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)항공 이미지를 추가로 레이블링하고 브라우저에서 VisDrone 학습 실행을 관리하려면 Ultralytics Platform을 사용하세요.
샘플 데이터 및 어노테이션#
아래 예시는 일반적인 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}}VisDrone 데이터셋을 만들고 유지 관리한 중국 톈진대학교 머신러닝 및 데이터 마이닝 연구실의 AISKYEYE 팀에 감사드립니다. 자세한 내용은 VisDrone 데이터셋 GitHub 저장소를 방문해 주세요.
자주 묻는 질문#
VisDrone은 객체가 작고 밀집되어 있으며 위에서 촬영된 드론 이미지로 검출기를 학습하고 벤치마크하는 데 사용됩니다. 항공 시점, 혼잡한 장면, 다양한 조건이 결합되어 UAV 기반 교통 모니터링, 군중 분석, 소형 객체 탐지 연구의 표준 테스트베드로 활용됩니다.
Ultralytics VisDrone 구성에는 이미지 8,629장이 포함됩니다. 학습용 6,471장, 검증용 548장, 테스트용(test-dev) 1,610장입니다. 모든 분할에는 보행자, 사람, 자전거, 자동차, 밴, 트럭, 삼륜차, 지붕형 삼륜차, 버스, 오토바이의 동일한 10개 클래스가 포함됩니다. 전체 구성은 데이터셋 구조를 참조하세요.
data="VisDrone.yaml"로 처음 학습할 때 VisDrone이 자동으로 다운로드되므로 별도의 수동 작업은 필요하지 않습니다. 스크립트는 Ultralytics GitHub 릴리스 에셋에서 아카이브 3개(약 2GB)를 가져와 어노테이션을 YOLO 형식으로 변환합니다. 대회용 비공개 test-challenge 분할은 포함되지 않습니다.VisDrone의 객체는 프레임에 비해 매우 작아 대개 수십 픽셀에 불과하며, 심하게 가려진 상태로 밀집해 나타나므로 지상에서 촬영한 사진에 맞춰 조정된 검출기에 부담을 줍니다. 더 높은 해상도(예: 배치 크기를 더 작게 설정한
imgsz=1280)로 학습하고 예측하면 작은 대상을 더 잘 복원할 수 있습니다. 또한 SAHI 타일 추론은 대형 이미지를 분할해 추론 창마다 작은 객체가 더 큰 비중을 차지하도록 합니다.전체 VisDrone 벤치마크는 이미지 객체 탐지, 동영상 객체 탐지, 단일 객체 추적, 다중 객체 추적, 군중 계수의 5개 작업으로 구성되며, 동영상 클립 288개와 정지 이미지 10,209장을 포함합니다. Ultralytics
VisDrone.yaml구성은 이미지 탐지 작업(VisDrone2019-DET)만 다루며, 학습 이미지 6,471장, 검증 이미지 548장, test-dev 이미지 1,610장을 다운로드합니다."Detection and Tracking Meet Drones Challenge" 논문(IEEE TPAMI, vol. 44, no. 11, 2022, DOI 10.1109/TPAMI.2021.3119563)을 인용하세요. 전체 BibTeX 항목은 위의 인용 및 감사의 말 섹션에 있습니다.



