Bộ dữ liệu VisDrone#
Bộ dữ liệu VisDrone là một benchmark ảnh chụp từ drone quy mô lớn, trong đó tập con detection (VisDrone2019-DET) cung cấp 8.629 ảnh trên không — 6.471 ảnh train, 548 ảnh validation và 1.610 ảnh test-dev — được gắn nhãn với 10 lớp đối tượng cho object detection. Bộ dữ liệu này được tạo bởi nhóm AISKYEYE tại Phòng thí nghiệm Machine Learning và Khai phá dữ liệu, Đại học Thiên Tân, Trung Quốc.
Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀
Benchmark VisDrone đầy đủ bao gồm 288 video clip (261.908 frame) và 10.209 ảnh tĩnh được ghi lại bằng camera gắn trên drone tại 14 thành phố khác nhau ở Trung Quốc, bao phủ môi trường đô thị và nông thôn, các cảnh thưa và đông đúc, cùng nhiều điều kiện thời tiết và ánh sáng khác nhau. Các frame chứa hơn 2,6 triệu bounding box được gắn nhãn thủ công, cùng các thuộc tính bổ sung như độ rõ của cảnh, lớp đối tượng và mức độ che khuất. Cấu hình Ultralytics VisDrone.yaml sử dụng tập con ảnh tĩnh VisDrone2019-DET của benchmark này.
Tính năng chính#
- Đối tượng nhỏ và dày đặc: Góc nhìn trên không khiến các mục tiêu trở nên nhỏ và chen chúc — riêng 548 ảnh validation đã chứa 38.759 box được gắn nhãn, trung bình khoảng 70 đối tượng mỗi ảnh.
- Đa dạng cảnh: Hình ảnh từ 14 thành phố của Trung Quốc, bao phủ khu vực đô thị và nông thôn, ban ngày và ban đêm, cùng nhiều điều kiện thời tiết khác nhau.
- Chú thích phong phú: Hơn 2,6 triệu box trên toàn benchmark, kèm các thuộc tính về mức độ che khuất và độ rõ.
- Các tập phân chia được định nghĩa trước: Các tập train / val / test-dev cố định (6.471 / 548 / 1.610 ảnh) để đánh giá nhất quán.
Cấu trúc bộ dữ liệu#
Cấu hình VisDrone của Ultralytics bao phủ tập con ảnh VisDrone2019-DET, được chia thành ba phần:
| Split | Ảnh | Mô tả |
|---|---|---|
| Huấn luyện | 6,471 | Ảnh trên không đã gắn nhãn dùng để train detector |
| Validation | 548 | Ảnh dùng để đánh giá trong quá trình phát triển |
| Test-dev | 1,610 | Hình ảnh được giữ lại để đánh giá cuối cùng model đã train |
Một tập phân chia thứ tư, test-challenge (1.580 ảnh), được giữ lại cho cuộc thi VisDrone và không được tải xuống; đây là lý do tổng số ảnh của toàn bộ tập DET là 10.209.
Bộ dữ liệu gắn nhãn 10 lớp đối tượng: người đi bộ, người, xe đạp, ô tô, xe van, xe tải, xe ba bánh, xe ba bánh có mái che, xe buýt và xe máy. VisDrone phân biệt pedestrian (người đang đứng hoặc đi bộ) với people (người ở bất kỳ tư thế nào khác).
Trong lần sử dụng đầu tiên, script tải xuống sẽ chuyển đổi các annotation VisDrone gốc sang định dạng YOLO, đồng thời bỏ qua các vùng được đánh dấu là cần bỏ qua (qua đó cũng loại trừ category "others" không được sử dụng).
Ứng dụng#
Các cảnh dày đặc và mục tiêu nhỏ của VisDrone khiến bộ dữ liệu này trở thành benchmark tiêu chuẩn cho small-object detection từ góc nhìn trên không. Các ứng dụng phổ biến gồm:
- Giám sát giao thông và đếm phương tiện từ UAV
- Phân tích đám đông và giám sát an toàn công cộng
- Kiểm tra cơ sở hạ tầng và công trường xây dựng
- Nghiên cứu computer vision về phát hiện các đối tượng nhỏ trong cảnh lộn xộn
Để xem các benchmark ảnh chụp từ trên không khác, hãy tham khảo bộ dữ liệu xView tập trung vào ảnh vệ tinh hoặc bộ dữ liệu DOTA-v2 sử dụng oriented box.
YAML của bộ dữ liệu#
File VisDrone.yaml định nghĩa cấu hình bộ dữ liệu — các đường dẫn dataset, tên lớp và script tự động tải xuống và chuyển đổi. File này được duy trì trong repository Ultralytics tại 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 directoryCách sử dụng#
VisDrone được tự động tải xuống trong lần đầu tiên bạn train — ba archive có tổng dung lượng khoảng 2 GB — và cần khoảng 4 GB dung lượng đĩa trống trong quá trình giải nén và chuyển đổi.
Để train model YOLO26n trên bộ dữ liệu VisDrone trong 100 epoch với image size là 640, bạn có thể sử dụng các đoạn code sau. Để xem danh sách đầy đủ các argument khả dụng, hãy tham khảo trang Training model.
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)Để gắn nhãn các ảnh trên không bổ sung và quản lý các training run của VisDrone trong trình duyệt, hãy sử dụng Ultralytics Platform.
Dữ liệu mẫu và Annotation#
Mẫu bên dưới cho thấy một cảnh VisDrone điển hình: góc nhìn trên không bao quát một con đường đông đúc, nơi người đi bộ và phương tiện xuất hiện dưới dạng các mục tiêu nhỏ, dày đặc, nhiều mục tiêu bị che khuất một phần bởi nhau.

Trích dẫn và ghi nhận đóng góp#
Nếu bạn sử dụng bộ dữ liệu VisDrone trong công việc nghiên cứu hoặc phát triển, vui lòng trích dẫn bài báo sau:
@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}}Chúng tôi xin ghi nhận công sức của nhóm AISKYEYE tại Phòng thí nghiệm Machine Learning và Khai phá dữ liệu, Đại học Thiên Tân, Trung Quốc, trong việc tạo và duy trì bộ dữ liệu VisDrone. Để biết thêm thông tin, hãy truy cập repository GitHub của bộ dữ liệu VisDrone.
FAQ#
VisDrone được sử dụng để train và benchmark các detector trên hình ảnh ghi lại từ drone, trong đó các đối tượng nhỏ, dày đặc và được quan sát từ trên cao. Sự kết hợp giữa góc nhìn trên không, cảnh đông đúc và các điều kiện đa dạng khiến bộ dữ liệu này trở thành testbed tiêu chuẩn cho giám sát giao thông bằng UAV, phân tích đám đông và nghiên cứu small-object detection.
Cấu hình VisDrone của Ultralytics chứa 8.629 ảnh: 6.471 ảnh dùng để train, 548 ảnh validation và 1.610 ảnh testing (test-dev). Tất cả các tập đều sử dụng chung 10 lớp: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus và motor. Xem Cấu trúc bộ dữ liệu để biết phân tích đầy đủ.
VisDrone được tự động tải xuống trong lần đầu tiên bạn train với
data="VisDrone.yaml"— không cần thực hiện thủ công. Script sẽ lấy ba archive (khoảng 2 GB) từ các release asset trên GitHub của Ultralytics và chuyển đổi annotation sang định dạng YOLO. Tập test-challenge bị giữ lại cho cuộc thi không được bao gồm.Train model YOLO26n trên VisDrone trong 100 epoch với image size là 640:
Ví dụ huấn luyệnfrom 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)Để xem cấu hình chi tiết, hãy tham khảo trang Training và mẹo train model.
Các đối tượng trong VisDrone rất nhỏ so với toàn bộ frame — thường chỉ rộng vài chục pixel — và xuất hiện trong các nhóm dày đặc, bị che khuất nhiều, gây khó khăn cho các detector được tối ưu trên ảnh chụp từ mặt đất. Train và predict ở độ phân giải cao hơn (ví dụ
imgsz=1280với batch nhỏ hơn) giúp khôi phục các mục tiêu nhỏ, còn SAHI tiled inference sẽ chia ảnh lớn thành các tile để đối tượng nhỏ chiếm nhiều diện tích hơn trong mỗi cửa sổ inference.Benchmark VisDrone đầy đủ bao gồm năm tác vụ — object detection trong ảnh, object detection trong video, single-object tracking, multi-object tracking và đếm đám đông — trên 288 video clip và 10.209 ảnh tĩnh. Cấu hình
VisDrone.yamlcủa Ultralytics chỉ bao phủ tác vụ image detection (VisDrone2019-DET), tải xuống 6.471 ảnh train, 548 ảnh validation và 1.610 ảnh test-dev của tập này.Hãy trích dẫn bài báo "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI, tập 44, số 11, 2022, DOI 10.1109/TPAMI.2021.3119563); mục Trích dẫn và Ghi nhận ở phía trên có đầy đủ mục BibTeX.



