Bộ dữ liệu VisDrone#
Bộ dữ liệu VisDrone là benchmark quy mô lớn sử dụng ảnh từ drone; tập con phát hiện (VisDrone2019-DET) cung cấp 8,629 ảnh trên không — 6,471 ảnh huấn luyện, 548 ảnh validation và 1,610 ảnh test-dev — được gán nhãn với 10 lớp đối tượng để thực hiện phát hiện vật thể. Bộ dữ liệu do nhóm AISKYEYE tại Phòng thí nghiệm Học máy và Khai phá dữ liệu, Đại học Thiên Tân, Trung Quốc tạo ra.
Xem: Cách huấn luyện Ultralytics YOLO trên dataset VisDrone | Phát hiện từ trên không | Hướng dẫn đầy đủ 🚀
Benchmark VisDrone đầy đủ bao gồm 288 video clip (261,908 khung hình) và 10,209 ảnh tĩnh được chụp bằng camera gắn trên drone tại 14 thành phố khác nhau ở Trung Quốc, bao quát môi trường đô thị và nông thôn, cảnh thưa và đông đúc, cùng các điều kiện thời tiết và ánh sáng đa dạng. Các khung hình có hơn 2.6 triệu bounding box được gán nhãn thủ công, kèm các thuộc tính bổ sung như khả năng quan sát cảnh, lớp đối tượng và mức độ che khuất. Cấu hình VisDrone.yaml của Ultralytics sử dụng tập con ảnh tĩnh VisDrone2019-DET của benchmark này.
Tính năng chính#
- Vật thể nhỏ, dày đặc: Góc nhìn từ trên không khiến mục tiêu nhỏ và chen chúc — riêng 548 ảnh validation đã có 38,759 bounding box được gán nhãn, trung bình khoảng 70 vật thể mỗi ảnh.
- Đa dạng cảnh: Ảnh từ 14 thành phố Trung Quốc, bao gồm địa điểm đô thị và nông thôn, ngày và đêm, cùng nhiều điều kiện thời tiết khác nhau.
- Annotation phong phú: Hơn 2.6 triệu bounding box trong toàn bộ benchmark, cùng các thuộc tính về che khuất và khả năng quan sát.
- Các tập chia được xác định trước: Các tập train / val / test-dev cố định (6,471 / 548 / 1,610 ảnh) giúp đánh giá nhất quán.
Cấu trúc dataset#
Cấu hình VisDrone của Ultralytics bao gồm tập con ảnh VisDrone2019-DET, được chia thành ba phần:
| Tập dữ liệu | Hình ảnh | Mô tả |
|---|---|---|
| Huấn luyện | 6,471 | Ảnh trên không có nhãn dùng để huấn luyện bộ phát hiện |
| Validation | 548 | Ảnh dùng để đánh giá trong quá trình phát triển |
| Test-dev | 1,610 | Ảnh giữ lại để đánh giá cuối cùng model đã huấn luyện |
Tập thứ tư, test-challenge (1,580 ảnh), được giữ lại cho cuộc thi VisDrone và không được tải xuống; vì vậy toàn bộ tập DET có tổng cộng 10,209 ảnh.
Bộ dữ liệu gán nhãn 10 lớp đối tượng: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus và motor. VisDrone phân biệt pedestrian (người đang đứng hoặc đi bộ) với people (người ở mọi tư thế khác).
Trong lần sử dụng đầu tiên, script tải xuống chuyển annotation VisDrone gốc sang định dạng YOLO, bỏ qua các vùng được đánh dấu là không cần xét (đồng thời loại trừ danh mục "others" không được sử dụng).
Ứng dụng#
Cảnh dày đặc và mục tiêu rất nhỏ của VisDrone khiến bộ dữ liệu trở thành benchmark tiêu chuẩn cho phát hiện vật thể nhỏ từ góc nhìn trên không. Các ứng dụng phổ biến bao 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 thị giác máy tính về phát hiện vật thể nhỏ trong cảnh phức tạp
Để xem các benchmark ảnh 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 bounding box định hướng.
YAML của dataset#
Tệp VisDrone.yaml định nghĩa cấu hình bộ dữ liệu — đường dẫn bộ dữ liệu, tên lớp và script tự động tải xuống rồi chuyển đổi. Tệp đượ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 tự động tải xuống trong lần đầu huấn luyện — gồm ba archive với 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.
Để huấn luyện model YOLO26n trên bộ dữ liệu VisDrone trong 100 epoch với kích thước ảnh 640, bạn có thể sử dụng các đoạn mã sau. Để xem danh sách đầy đủ các tham số hiện có, hãy tham khảo trang Huấn luyện model.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt") # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
# Huấn luyện model - tập dữ liệu sẽ tự động tải xuống trong lần chạy đầu tiên
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)Để gán nhãn thêm ảnh trên không và quản lý các lượt huấn luyện VisDrone trên trình duyệt, hãy sử dụng Ultralytics Platform.
Dữ liệu mẫu và annotation#
Ví dụ bên dưới minh họa một cảnh VisDrone điển hình: góc nhìn trên không của 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à lời cảm ơn#
Nếu sử dụng bộ dữ liệu VisDrone trong nghiên cứu hoặc công việ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 nhóm AISKYEYE tại Phòng thí nghiệm Học máy và Khai phá dữ liệu, Đại học Thiên Tân, Trung Quố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.
Câu hỏi thường gặp#
VisDrone được sử dụng để huấn luyện và đánh giá benchmark các bộ phát hiện trên ảnh chụp từ drone, trong đó vật thể 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 môi trường thử nghiệm 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 phát hiện vật thể nhỏ.
Cấu hình VisDrone của Ultralytics có 8,629 ảnh: 6,471 ảnh huấn luyện, 548 ảnh validation và 1,610 ảnh kiểm thử (test-dev). Tất cả các tập đều có cùng 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 thông tin phân chia đầy đủ.
VisDrone tự động tải xuống trong lần đầu huấn luyện bằng
data="VisDrone.yaml"— không cần thao tác thủ công. Script lấy ba archive (khoảng 2 GB) từ các tài nguyên phát hành 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 đưa vào.Huấn luyện model YOLO26n trên VisDrone trong 100 epoch với kích thước ảnh 640:
Ví dụ huấn luyệnfrom ultralytics import YOLO # Tải model model = YOLO("yolo26n.pt") # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện) # Huấn luyện 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 Huấn luyện và mẹo huấn luyện model.
Vật thể trong VisDrone rất nhỏ so với khung hình — thường chỉ rộng vài chục pixel — và xuất hiện thành từng nhóm dày đặc, bị che khuất nhiều, gây khó khăn cho các bộ phát hiện vốn được tinh chỉnh trên ảnh chụp từ mặt đất. Huấn luyện và dự đoán ở độ phân giải cao hơn (chẳng hạn
imgsz=1280với batch nhỏ hơn) giúp nhận diện các mục tiêu nhỏ; suy luận SAHI theo ô chia ảnh lớn thành các phần để vật thể nhỏ chiếm tỷ lệ lớn hơn trong mỗi vùng suy luận.Benchmark VisDrone đầy đủ bao gồm năm tác vụ — phát hiện vật thể trong ảnh, phát hiện vật thể trong video, theo dõi một đối tượng, theo dõi nhiều đối tượng 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 gồm tác vụ phát hiện trong ảnh (VisDrone2019-DET), tải xuống 6,471 ảnh huấn luyện, 548 ảnh validation và 1,610 ảnh test-dev.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 ở trên có toàn bộ mục BibTeX.



