YOLOV8识别小样本目标检测、空中目标识别非法入侵的无人机 空中飞行物,鸟 直升机 飞行物检测-无人机小目标检测数据集

whdahanh 发布于 2025-09-29 187 次阅读


使用 YOLOv8 训练和推理一个包含 4 种检测目标(飞机类型无人机、类飞行物体、直升机类型无人机、鸟)的飞行物-无人机目标检测数据集

文章目录

  • **飞行物-无人机目标检测数据集信息表**
  • **类别标签对照表**
  • **数据集特点总结**
  • **典型应用方向**
  • ✅ 一、环境配置
    • 1. 安装 CUDA 驱动(GPU 加速)
    • 2. 安装 Anaconda
    • 3. 创建 Python 虚拟环境
    • 4. 安装必要依赖
  • ✅ 二、数据集结构与 `data.yaml` 配置
    • 数据目录结构
    • 创建 `data.yaml`
  • ✅ 三、调用 YOLOv8 官方预训练模型进行训练
  • ✅ 四、推理代码(单图 / 批量 / 视频)
    • 1. 单张图像推理
    • 2. 批量图像推理
    • 3. 视频检测(如监控视频)
    • 4. 实时摄像头检测(OpenCV)
  • ✅ 五、模型评估(验证集 + 测试集)
    • 1. 在验证集上评估
    • 2. 在测试集上独立评估(推荐)
  • ✅ 六、可视化与分析
    • 1. 使用中文标签显示
    • 2. 查看训练曲线
  • ✅ 七、模型导出(ONNX / TensorRT / TFLite)


以下文字及代码仅供参考学习使用。
在这里插入图片描述

飞行物-无人机目标检测数据集信息表

项目内容
数据集名称飞行物-无人机目标检测数据集
总图像数量1,700 张
图像类型空中飞行物航拍或远距离拍摄图像
目标类别4 类飞行目标
标注格式.txt(YOLO 格式,归一化坐标)
适用模型YOLO 系列(YOLOv5、YOLOv8、YOLOv11等),可直接用于训练
应用场景无人机识别、低空安防、鸟群与飞行器区分、空中目标监控

类别标签对照表

类别编号英文名称中文名称说明
0Airplane type UAVs飞机类型无人机固定翼无人机,外形类似小型飞机
1FlyLike objects类飞行物体形状或运动类似飞行器的漂浮物(如风筝、塑料袋等)
2Helicopter type UAVs直升机类型无人机多旋翼或单旋翼无人机,类似直升机飞行方式
3bird自然飞行生物,用于区分真实鸟类与无人机

数据集特点总结

特点描述
✅ 高质量标注所有图像均已标注,标注文件为标准 YOLO .txt 格式
✅ 开箱即用支持直接导入 YOLO 框架进行训练与验证
✅ 真实场景覆盖包含远距离、小目标、天空背景下的飞行物图像
✅ 抗干扰设计包含“类飞行物体”和“鸟类”,有助于提升模型在复杂环境中的判别能力

在这里插入图片描述

典型应用方向

  • 低空安全监控:识别非法入侵的无人机。
  • 机场/敏感区域防护:自动区分鸟类与无人机,防止误判。
  • 智能巡检系统:用于反无人机系统(C-UAS)的目标检测模块。
  • 科研与教学:适用于小样本目标检测、空中目标识别等研究课题。

💡 提示:如需划分训练集/验证集,建议按 8:2 比例划分(训练集 1,360 张,验证集 340 张),可进一步提升模型评估可靠性。

在这里插入图片描述
1
在这里插入图片描述
1
使用 YOLOv8 训练和推理一个包含 4 种检测目标(飞机类型无人机、类飞行物体、直升机类型无人机、鸟)的飞行物-无人机目标检测数据集(共1700张图片),我们将从环境搭建、数据准备、模型训练、推理到评估提供完整的技术流程与代码。


✅ 一、环境配置

1. 安装 CUDA 驱动(GPU 加速)

确保你的 NVIDIA 显卡驱动已安装:

nvidia-smi

输出应显示 GPU 信息。推荐使用 CUDA 11.8 或 12.1


2. 安装 Anaconda

下载并安装 Anaconda(Python 3.9+ 推荐)。


3. 创建 Python 虚拟环境

conda create -n drone_yolo python=3.9
conda activate drone_yolo

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn

# 可选:TensorBoard 可视化
pip install tensorboard

# 图像查看工具
pip install pillow

验证 GPU 是否可用:

python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True

✅ 二、数据集结构与 data.yaml 配置

数据目录结构

drone_dataset/
├── images/
│   ├── train/      # 训练集图像
│   ├── val/        # 验证集图像
│   └── test/       # 测试集图像
├── labels/
│   ├── train/      # 对应的 .txt 文件 (YOLO 格式)
│   ├── val/
│   └── test/
└── data.yaml       # 数据配置文件

假设按照 8:1:1 的比例划分,即:https://wxa.wxs.qq.com/tmpl/oc/base_tmpl.html

  • 训练集:1360 张
  • 验证集:170 张
  • 测试集:170 张

创建 data.yaml

在项目根目录创建 data.yaml 文件:

# data.yaml
train: ./drone_dataset/images/train
val: ./drone_dataset/images/val
test: ./drone_dataset/images/test  # 支持独立测试集评估

# 类别数量
nc:4

# 英文类别名称(与标签顺序一致)
names:
- Airplane type UAVs
- FlyLike objects
- Helicopter type UAVs
- bird

# 中文映射(用于可视化)
names_zh:
- 飞机类型无人机
- 类飞行物体
- 直升机类型无人机
- 鸟

⚠️ 注意:YOLOv8 要求 names 列表中的顺序与 .txt 标注中的类别 ID 完全对应(从 0 开始)。


✅ 三、调用 YOLOv8 官方预训练模型进行训练

由于数据量适中(1700张),建议使用 YOLOv8m 或 YOLOv8l 提升分类精度。

from ultralytics import YOLO

# 加载官方预训练模型(推荐使用 yolov8m.pt)
model = YOLO('yolov8m.pt')# 自动下载预训练权重

# 开始训练
results = model.train(
    data='data.yaml',# 数据配置文件
    epochs=150,# 训练轮数
    batch=32,# 根据显存调整(RTX 3090 可用 64)
    imgsz=640,# 输入尺寸(可尝试 800 提升小目标检测)
    optimizer='AdamW',# 更稳定优化器
    lr0=0.001,# 初始学习率
    weight_decay=0.0005,
    momentum=0.937,

# 数据增强(提升泛化能力)
    augment=True,
    hsv_h=0.015,# 色调扰动
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,# 随机旋转
    translate=0.1,
    scale=0.5,
    shear=0.0,
    flipud=0.0,
    fliplr=0.5,# 左右翻转
    mosaic=1.0,# Mosaic 增强
    mixup=0.1,# MixUp
    copy_paste=0.1,# Copy-Paste(对小目标有效)

# 正则化
    dropout=0.2,
    label_smoothing=0.1,# 标签平滑,防止过拟合

# 学习率调度
    cos_lr=True,# 余弦退火学习率

# 保存与日志
    project='runs/train',
    name='drone_yolov8m',
    save=True,
    save_period=10,
    exist_ok=False,

# 缓存(内存充足时开启)
    cache=False
)

💡 建议

  • 若显存不足,改用 yolov8s.pt 或降低 batch=16
  • 可尝试 imgsz=800 提升远处小目标检测能力
  • 使用 copy_paste 增强稀有类别(如 bird

✅ 四、推理代码(单图 / 批量 / 视频)

1. 单张图像推理

from ultralytics import YOLO
from PIL import Image

# 加载最佳模型
model = YOLO('runs/train/drone_yolov8m/weights/best.pt')

# 推理
results = model('test_drone.jpg', conf=0.4)# 设置置信度阈值

# 显示结果
for r in results:
    im_array = r.plot()# 绘制边界框和标签
    im = Image.fromarray(im_array[...,::-1])# BGR to RGB
    im.show()

2. 批量图像推理

results = model.predict(
    source='drone_dataset/images/test',
    save=True,
    project='runs/detect',
    name='drone_test_results',
    conf=0.4,
    imgsz=640
)
print("批量推理完成")

3. 视频检测(如监控视频)

results = model.predict(
    source='drone_video.mp4',
    save=True,
    project='runs/detect/video',
    name='drone_result',
    show=False,
    conf=0.4
)
print("视频检测完成")

4. 实时摄像头检测(OpenCV)

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
ifnot ret:
break

    results = model(frame, conf=0.4)
    annotated_frame = results[0].plot()

    cv2.imshow('Drone Detection', annotated_frame)
if cv2.waitKey(1)&0xFF==ord('q'):
break

cap.release()
cv2.destroyAllWindows()

✅ 五、模型评估(验证集 + 测试集)

1. 在验证集上评估

metrics = model.val(
    data='data.yaml',
    split='val',
    batch=32,
    imgsz=640,
    save_json=False,
    project='runs/val',
    name='drone_eval'
)

print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")

# 每类 AP
for i, name inenumerate(model.names):
print(f"{name} (AP@0.5): {metrics.box.ap[i]:.4f}")

2. 在测试集上独立评估(推荐)

# 使用 test split 进行最终性能评估
test_metrics = model.val(
    data='data.yaml',
    split='test',
    save_json=True,
    name='test_final'
)

print(f"Test mAP@0.5: {test_metrics.box.map50:.4f}")

✅ 六、可视化与分析

1. 使用中文标签显示

# 修改模型类名显示为中文
model.names =['飞机类型无人机','类飞行物体','直升机类型无人机','鸟']

results = model('test.jpg')
results[0].plot()# 显示中文标签

2. 查看训练曲线

tensorboard --logdir runs/train/drone_yolov8m

✅ 七、模型导出(ONNX / TensorRT / TFLite)

# 导出为 ONNX(通用部署)
model.export(format='onnx', dynamic=True, opset=13, imgsz=640)

# 导出为 TensorRT(NVIDIA GPU 加速)
model.export(format='engine', half=True, dynamic=True)

# 导出为 TFLite(移动端)
model.export(format='tflite', int8=True)

# 导出为 CoreML(iOS)
model.export(format='coreml')

在这里插入图片描述
以上文字及代码仅供参考学习使用。



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2025-09-29