使用 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等),可直接用于训练 |
| 应用场景 | 无人机识别、低空安防、鸟群与飞行器区分、空中目标监控 |
类别标签对照表
| 类别编号 | 英文名称 | 中文名称 | 说明 |
|---|---|---|---|
| 0 | Airplane type UAVs | 飞机类型无人机 | 固定翼无人机,外形类似小型飞机 |
| 1 | FlyLike objects | 类飞行物体 | 形状或运动类似飞行器的漂浮物(如风筝、塑料袋等) |
| 2 | Helicopter type UAVs | 直升机类型无人机 | 多旋翼或单旋翼无人机,类似直升机飞行方式 |
| 3 | bird | 鸟 | 自然飞行生物,用于区分真实鸟类与无人机 |
数据集特点总结
| 特点 | 描述 |
|---|---|
| ✅ 高质量标注 | 所有图像均已标注,标注文件为标准 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')
以上文字及代码仅供参考学习使用。
微信扫描下方的二维码阅读本文

Comments NOTHING