NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测
NWPU VHR-10数据集 遥感数据集

NWPU VHR-10数据集是 10个类别地理空间目标检测的挑战性数据集,共650张图片。
YOLO和COCO格式
数据集按默认划分比例:390张训练集、130张验证集、130张测试集。
手动标注了757架飞机、302艘船只、655个储罐、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和598辆车辆。

📊 一、数据集总体信息
| 项目 | 描述 |
|---|---|
| 数据集名称 | NWPU VHR-10(Northwestern Polytechnical University Very High Resolution 10-class Dataset) |
| 任务类型 | 遥感图像中的地理空间目标检测(Object Detection in Remote Sensing Images) |
| 图像总数 | 650 张(均为高分辨率遥感图像,源自 Google Earth 等平台) |
| 图像分辨率 | 约 600×600 至 1000×1000 像素,空间分辨率高 |
| 标注格式 | ✅ YOLO TXT 格式 ✅ COCO JSON 格式(开箱即用,无需转换) |
| 数据划分 | - 训练集:390 张 - 验证集:130 张 - 测试集:130 张 (比例 ≈ 6:2:2) |
| 应用场景 | 军事侦察、城市规划、灾害评估、智能遥感解译等 |
🏷️ 二、类别定义与实例数量统计
| 类别 ID | 类别名称(英文) | 类别名称(中文) | 标注实例数量 |
|---|---|---|---|
| 0 | Airplane | 飞机 | 757 |
| 1 | Ship | 船只 | 302 |
| 2 | Storage Tank | 储罐 | 655 |
| 3 | Baseball Diamond | 棒球场 | 390 |
| 4 | Tennis Court | 网球场 | 524 |
| 5 | Basketball Court | 篮球场 | 159 |
| 6 | Ground Track Field | 田径场 | 163 |
| 7 | Harbor | 港口 | 224 |
| 8 | Bridge | 桥梁 | 124 |
| 9 | Vehicle | 车辆 | 598 |
🔢 总标注目标数:3,896 个
📌 所有目标均以 水平边界框(Axis-Aligned Bounding Box) 标注。
📁 三、推荐使用方式
| 用途 | 建议 |
|---|---|
| 模型训练 | 直接使用提供的 YOLO 或 COCO 格式,适配 YOLOv5/v8、MMDetection、Detectron2 等主流框架 |
| 评估指标 | 通常采用 [email protected](IoU=0.5)作为主指标 |
| 挑战点 | • 小目标(如车辆、飞机) • 类间尺度差异大(港口 vs 车辆) • 背景复杂(城市、水域、农田混合) |
| 扩展建议 | 可结合 DIOR、DOTA 等遥感数据集进行跨域泛化研究 |
📁 一、项目结构建议
nwpu_vhr10_yolo/ ├── dataset.yaml # 数据集配置文件 ├── train.py # 主训练脚本 ├── predict_demo.py # 推理演示 ├── export_model.py # 模型导出脚本 └── data/ ├── images/ │ ├── train/ # 390 张训练图像 │ ├── val/ # 130 张验证图像 │ └── test/ # 130 张测试图像 └── labels/ ├── train/ # 对应 .txt 标注(YOLO格式) ├── val/ └── test/ ✅ 假设你已将官方提供的 YOLO 格式数据按上述结构组织。
📄 二、数据集配置文件 dataset.yaml
# dataset.yamlpath: ./data train: images/train val: images/val test: images/test nc:10names:['airplane','ship','storage_tank','baseball_diamond','tennis_court','basketball_court','ground_track_field','harbor','bridge','vehicle']🚀 三、详细训练代码 train.py
# train.pyfrom ultralytics import YOLO import torch defmain(): device ='cuda'if torch.cuda.is_available()else'cpu'print(f"🚀 使用设备: {device}")# 选择模型(遥感小目标多,推荐 yolov8m 或 yolov8l) model_name ="yolov8m.pt"# 可选: yolov8s / yolov8l / yolov8x project_name ="nwpu_vhr10_detection"# 加载预训练模型 model = YOLO(model_name)# 开始训练 results = model.train( data='dataset.yaml', epochs=150,# 遥感数据复杂,建议充分训练 imgsz=640,# NWPU 图像较小,640 足够;若需更高精度可用 1024 batch=16,# 640 分辨率下 batch=16(32G 显存可设 32) name=project_name, device=device, patience=30,# 早停机制(验证集 mAP 不升则停) save=True, plots=True,# 自动生成 PR 曲线、混淆矩阵、样本可视化 exist_ok=False, workers=8, optimizer='AdamW', lr0=0.01, lrf=0.01,# 数据增强(关键!提升小目标和尺度变化鲁棒性) augment=True, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=15.0,# ±15° 旋转(遥感视角多样) translate=0.1, scale=0.5, flipud=0.0,# 不上下翻转(地理目标方向敏感) fliplr=0.5,# 左右翻转安全 mosaic=1.0,# Mosaic 增强(对小目标如 vehicle/airplane 极有效) mixup=0.1)# 在测试集上评估最终性能 metrics = model.val(data='dataset.yaml', split='test')print("\n✅ NWPU VHR-10 测试集结果:")print(f" [email protected] (all): {metrics.box.map50:.5f}")print(f" [email protected]:0.95: {metrics.box.map:.5f}")print(f" Precision: {metrics.box.mp:.5f}")print(f" Recall: {metrics.box.mr:.5f}")if __name__ =='__main__': main()运行命令:
python train.py 🔍 四、推理演示 predict_demo.py
# predict_demo.pyfrom ultralytics import YOLO model = YOLO('runs/detect/nwpu_vhr10_detection/weights/best.pt') results = model.predict( source='test_image.jpg', conf=0.25,# 遥感小目标建议降低阈值 iou=0.45, save=True, show=True, line_width=2, font_size=12)# 打印检测结果 class_names =['Airplane','Ship','Storage Tank','Baseball Diamond','Tennis Court','Basketball Court','Ground Track Field','Harbor','Bridge','Vehicle']for result in results: boxes = result.boxes print(f"检测到 {len(boxes)} 个目标")for box in boxes: cls_id =int(box.cls.item()) conf =float(box.conf.item())print(f" → {class_names[cls_id]} (置信度: {conf:.3f})")📤 五、模型导出(用于部署)
# export_model.pyfrom ultralytics import YOLO model = YOLO('runs/detect/nwpu_vhr10_detection/weights/best.pt')# 导出为 ONNX(通用) model.export(format='onnx', imgsz=640, simplify=True)# 导出为 TensorRT(NVIDIA GPU / Jetson) model.export(format='engine', imgsz=640, half=True, device=0)# 导出为 OpenVINO(Intel CPU) model.export(format='openvino', imgsz=640)⚙️ 六、训练优化建议
| 挑战 | 解决方案 |
|---|---|
| 小目标漏检(如车辆、飞机) | 启用 mosaic=1.0,使用 imgsz=1024(若显存允许) |
| 类别不平衡(如桥梁仅124个) | YOLOv8 内置 Focal Loss 变体,通常无需额外处理;也可对稀有类过采样 |
| 背景复杂干扰 | 增加 hsv_v 和 degrees 增强,提升光照与角度鲁棒性 |
| 实时遥感分析 | 若部署于边缘设备(如无人机),可改用 yolov8s + TensorRT |