Link to this sectionTập dữ liệu VisDrone#
Tập dữ liệu VisDrone là một benchmark hình ảnh drone quy mô lớn, với tập con phát hiện (VisDrone2019-DET) cung cấp 8.629 hình ảnh trên không — 6.471 để huấn luyện, 548 để kiểm chứng và 1.610 để test-dev — được chú thích với 10 lớp đối tượng cho phát hiện đối tượng. Nó được tạo bởi nhóm AISKYEYE tại Phòng Học máy 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 clip video (261.908 khung hình) và 10.209 hình ảnh tĩnh được chụp bởi máy ảnh gắn trên drone tại 14 thành phố khác nhau trên khắp Trung Quốc, trải rộng trên các môi trường đô thị và nông thôn, các cảnh quan thưa thớt và đông đúc, cùng các điều kiện thời tiết và ánh sáng khác nhau. Các khung hình của nó mang hơn 2,6 triệu hộp bao được chú thích thủ công, với các thuộc tính bổ sung như tầm nhìn cảnh, lớp đối tượng và sự che khuất. Cấu hình VisDrone.yaml của Ultralytics sử dụng tập con hình ảnh tĩnh VisDrone2019-DET của benchmark này.
Link to this sectionTính năng chính#
- Đối tượng nhỏ và dày đặc: Góc nhìn trên không làm cho các mục tiêu trở nên nhỏ bé và đông đúc — riêng 548 hình ảnh kiểm chứng đã chứa 38.759 hộp được gán nhãn, trung bình khoảng 70 đối tượng trên mỗi hình ảnh.
- Sự đa dạng của cảnh: Hình ảnh từ 14 thành phố Trung Quốc bao gồm các địa điểm đô thị và nông thôn, ngày và đêm, và các điều kiện thời tiết khác nhau.
- Chú thích phong phú: Hơn 2,6 triệu hộp trên toàn bộ benchmark, với các thuộc tính che khuất và tầm nhìn.
- Các tập chia sẵn: Các tập chia train / val / test-dev cố định (6.471 / 548 / 1.610 hình ảnh) để đánh giá nhất quán.
Link to this sectionCấu trúc tập dữ liệu#
Cấu hình Ultralytics VisDrone bao gồm tập con hình ảnh VisDrone2019-DET, được chia thành ba phần:
| Split | Hình ảnh | Mô tả |
|---|---|---|
| Huấn luyện (Train) | 6.471 | Hình ảnh trên không được gán nhãn dùng để huấn luyện detector |
| Validation | 548 | Hình ảnh dùng cho đánh giá trong quá trình phát triển |
| Test-dev | 1.610 | Các hình ảnh tách biệt (held-out) dùng để đánh giá cuối cùng cho model đã huấn luyện |
Một tập chia thứ tư, test-challenge (1.580 hình ảnh), được giữ lại cho cuộc thi VisDrone và không được tải xuống, đó là lý do tại sao tập DET đầy đủ có tổng cộng 10.209 hình ảnh.
Tập dữ liệu chú thích 10 lớp đối tượng: pedestrian (người đi bộ), people (người), bicycle (xe đạp), car (xe hơi), van (xe tải nhỏ), truck (xe tải), tricycle (xe ba bánh), awning-tricycle (xe ba bánh có mái che), bus (xe buýt) và motor (xe máy). VisDrone phân biệt pedestrian (một người đang đứng hoặc đi bộ) với people (một người ở bất kỳ tư thế nào khác).
Trong lần sử dụng đầu tiên, tập lệnh tải xuống sẽ chuyển đổi các chú thích VisDrone gốc sang định dạng YOLO, bỏ qua các vùng được đánh dấu là bị bỏ qua (điều này cũng loại trừ danh mục "others" không sử dụng).
Link to this sectionỨng dụng#
Các cảnh dày đặc và mục tiêu nhỏ bé của VisDrone khiến nó trở thành một benchmark tiêu chuẩn cho phát hiện đối tượng 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 đối tượng nhỏ trong các cảnh lộn xộn
Đối với các benchmark hình ảnh trên không khác, hãy xem tập dữ liệu xView tập trung vào vệ tinh hoặc tập dữ liệu DOTA-v2 với hộp hướng.
Link to this sectionYAML tập dữ liệu#
Tệp VisDrone.yaml xác định cấu hình tập dữ liệu — các đường dẫn tập dữ liệu, tên lớp và tập lệnh tự động tải xuống và chuyển đổi. Nó được duy trì trong kho lưu trữ 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 directoryLink to this sectionCách sử dụng#
VisDrone tự động tải xuống trong lần đầu tiên bạn huấn luyện — ba tệp lưu trữ 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.
Để huấn luyện mô hình YOLO26n trên tập dữ liệu VisDrone trong 100 epoch với kích thước hình ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để có danh sách đầy đủ các đối số khả dụng, hãy tham khảo trang Huấn luyện mô hình.
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 hình ảnh trên không bổ sung và quản lý các lượt chạy huấn luyện VisDrone trong trình duyệt của bạn, hãy sử dụng Nền tảng Ultralytics.
Link to this sectionDữ liệu mẫu và Chú thích#
Mẫu dưới đây cho thấy một cảnh VisDrone điển hình: một góc nhìn trên không phía trên 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 những mục tiêu khác.

Link to this sectionTrích dẫn và Ghi nhận#
Nếu bạn sử dụng tập dữ liệu VisDrone trong nghiên cứu hoặc công việc phát triển của mình, 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 muốn gửi lời cảm ơn đến nhóm AISKYEYE tại Phòng Học máy và Khai phá dữ liệu, Đại học Thiên Tân, Trung Quốc, vì đã tạo và duy trì tập dữ liệu VisDrone. Để biết thêm thông tin, hãy truy cập kho lưu trữ GitHub của Tập dữ liệu VisDrone.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionTập dữ liệu VisDrone được sử dụng để làm gì?#
VisDrone được sử dụng để huấn luyện và đánh giá các detector trên hình ảnh do drone chụp, nơi các đối tượng nhỏ, dày đặc và được nhìn 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 làm cho nó trở thành một nền tảng thử nghiệm tiêu chuẩn cho giám sát giao thông dựa trên UAV, phân tích đám đông và nghiên cứu phát hiện đối tượng nhỏ.
Link to this sectionVisDrone có bao nhiêu hình ảnh và lớp?#
Cấu hình VisDrone của Ultralytics chứa 8.629 hình ảnh: 6.471 cho huấn luyện, 548 cho kiểm chứng và 1.610 cho kiểm thử (test-dev). Tất cả các tập chia đều có chung 10 lớp: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus và motor. Xem Cấu trúc tập dữ liệu để biết phân tích đầy đủ.
Link to this sectionLàm cách nào để tải xuống tập dữ liệu VisDrone?#
VisDrone tự động tải xuống trong lần đầu tiên bạn huấn luyện với data="VisDrone.yaml" — không cần thực hiện các bước thủ công. Tập lệnh lấy ba tệp lưu trữ (khoảng 2 GB) từ tài sản phát hành GitHub của Ultralytics và chuyển đổi các chú thích sang định dạng YOLO. Tập chia test-challenge bị giữ lại của cuộc thi không được bao gồm.
Link to this sectionLàm cách nào để huấn luyện mô hình YOLO26 trên tập dữ liệu VisDrone?#
Huấn luyện mô hình YOLO26n trên VisDrone trong 100 epoch với kích thước ảnh là 640:
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)Để biết cấu hình chi tiết, hãy xem trang Training và mẹo huấn luyện model.
Link to this sectionTại sao VisDrone khó đối với các bộ phát hiện đối tượng, và làm thế nào tôi có thể cải thiện độ chính xác?#
Các đối tượng trong VisDrone rất nhỏ so với khung hình — thường chỉ vài chục pixel — và xuất hiện trong các nhóm dày đặc, bị che khuất nặng nề, gây khó khăn cho các detector được tinh chỉnh trên ảnh chụp ở mặt đất. Huấn luyện và dự đoán ở độ phân giải cao hơn (ví dụ: imgsz=1280 với batch nhỏ hơn) giúp khôi phục các mục tiêu nhỏ, và suy luận lát cắt SAHI cắt các hình ảnh lớn để các đối tượng nhỏ chiếm nhiều không gian hơn trong mỗi cửa sổ suy luận.
Link to this sectionSự khác biệt giữa VisDrone-DET và benchmark VisDrone đầy đủ là gì?#
Benchmark VisDrone đầy đủ bao gồm năm tác vụ — phát hiện đối tượng trong hình ảnh, phát hiện đối tượng trong video, theo dõi đối tượng đơn lẻ, theo dõi đa đối tượng và đếm đám đông — trên 288 clip video và 10.209 hình ảnh tĩnh. Cấu hình VisDrone.yaml của Ultralytics chỉ bao gồm tác vụ phát hiện hình ảnh (VisDrone2019-DET), tải xuống 6.471 hình ảnh huấn luyện, 548 hình ảnh kiểm chứng và 1.610 hình ảnh test-dev của nó.
Link to this sectionLàm cách nào để trích dẫn VisDrone trong nghiên cứu của tôi?#
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 BibTeX đầy đủ nằm trong phần Trích dẫn và Ghi nhận ở trên.