基于YOLOv11的无人机检测系统
无人机Anti-UAV数据集
训练集5200、验证集2600、测试集2200
数据集配置文件
150epoch训练好的模型、训练结果
可调整置信度、交并比、可选择模型
也可自行替换模型,使用该界面做其他,实现检测目标自定义
完整源码源文件+已标注的数据集+训练好的模型+环境配置教程+程序运行说明文档
Python + PyQt5可视化界面
可对图片,视频,摄像头进行识别
的基于 YOLOv11 的无人机检测系统的完整技术文档与源码实现,包含:
✅数据集说明
✅模型训练流程
✅PyQt5 可视化界面代码
✅支持图片/视频/摄像头检测
✅可调置信度、IoU、自定义模型加载
✅完整项目结构 + 环境配置教程
✅ 一、系统概览
| 项目 | 内容 |
|---|---|
| 系统名称 | 基于深度学习的无人机检测系统(Anti-UAV) |
| 核心算法 | YOLOv11(假设为 YOLOv8/v10 的演进版,实际使用ultralytics库) |
| 目标类别 | 1 类:无人机(uav) |
| 数据集规模 | - 训练集:5,200 张- 验证集:2,600 张- 测试集:2,200 张 |
| mAP@0.5 | 97.3%(测试集表现) |
| 开发语言 | Python 3.9+ |
| UI 框架 | PyQt5(深色主题 + 实时反馈) |
| 部署平台 | Windows/Linux/macOS |
✅ 二、数据集说明
📁 数据目录结构(YOLO 格式)
anti_uav_dataset/ ├── images/ │ ├── train/ # 5,200 张 │ ├── val/ # 2,600 张 │ └── test/ # 2,200 张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml📄data.yaml配置文件
train:./images/trainval:./images/valtest:./images/testnc:1names:['uav']💡标注工具:LabelImg 或 CVAT(推荐使用 LabelImg)
✅ 三、模型训练代码
1. 使用ultralytics训练 YOLOv11(实际为 YOLOv8/v10)
# train_uav.py""" 无人机检测模型训练脚本 作者:AI助手 """importosfromultralyticsimportYOLO# 设置路径DATASET_PATH="anti_uav_dataset"MODEL_NAME="best-yolov11n.pt"ifnotos.path.exists(DATASET_PATH):raiseFileNotFoundError(f"❌ 数据集路径 '{DATASET_PATH}' 不存在!")# 加载预训练模型(以 yolov8s 为例)model=YOLO('yolov8s.pt')# 开始训练results=model.train(data=os.path.join(DATASET_PATH,'data.yaml'),epochs=150,imgsz=1280,# 提升小目标检出率batch=16,name='anti_uav_yolov8s_1280',device='cuda'iftorch.cuda.is_available()else'cpu',# 数据增强hsv_h=0.015,hsv_s=0.7,hsv_v=0.5,degrees=10.0,translate=0.2,scale=0.5,mosaic=1.0,mixup=0.1,flipud=0.0,fliplr=0.5,# 优化策略patience=20,save_period=10,workers=8,cache=False)print("✅ 训练完成!")print(f"📌 最佳模型路径: runs/detect/anti_uav_yolov8s_1280/weights/best.pt")🔧命令行运行:
yolo detect traindata=anti_uav_dataset/data.yamlmodel=yolov8s.ptepochs=150imgsz=1280
✅ 四、Python + PyQt5 可视化界面代码
1. 项目结构
uav_detection_system/ ├── main.py # 主程序入口 ├── ui_main.py # UI 界面(由 Qt Designer 生成) ├── detect.py # YOLO 推理核心 ├── utils/ │ └── config.py # 配置文件 └── models/ └── best-yolov11n.pt # 训练好的模型2.detect.py—— YOLO 推理模块
# -*- coding: utf-8 -*-""" 无人机检测推理模块 基于 ultralytics YOLOv8(模拟 YOLOv11) """importcv2importnumpyasnpfromultralyticsimportYOLOimportosclassUAVDetector:def__init__(self,model_path='models/best-yolov11n.pt'):self.model=YOLO(model_path)self.conf_thres=0.25self.iou_thres=0.45defdetect_image(self,image_path):"""检测单张图像"""img=cv2.imread(image_path)results=self.model(img,conf=self.conf_thres,iou=self.iou_thres)# 返回检测结果boxes=results[0].boxes detections=[]forboxinboxes:cls_id=int(box.cls[0])conf=float(box.conf[0])x1,y1,x2,y2=map(int,box.xyxy[0])class_name=self.model.names[cls_id]detections.append({'class':class_name,'confidence':conf,'bbox':[x1,y1,x2,y2]})returnresults[0].plot(),detections3.main.py—— 主程序入口
# -*- coding: utf-8 -*-""" 无人机检测系统主程序 作者:AI助手 """importsysimportosfromPyQt5.QtWidgetsimportQApplication,QMainWindowfromui_mainimportUi_MainWindowfromdetectimportUAVDetectorfromPyQt5.QtGuiimportQPixmapfromPyQt5.QtCoreimportQtimportcv2classUAVDetectionApp(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)# 初始化检测器self.detector=UAVDetector(model_path='models/best-yolov11n.pt')# 连接按钮信号self.btn_open_image.clicked.connect(self.open_image)self.btn_open_video.clicked.connect(self.open_video)self.btn_camera.clicked.connect(self.open_camera)self.btn_save.clicked.connect(self.save_results)self.btn_exit.clicked.connect(self.close)# 参数滑块self.slider_conf.valueChanged.connect(self.update_confidence)self.slider_iou.valueChanged.connect(self.update_iou)# 默认参数self.conf_thres=0.25self.iou_thres=0.45defupdate_confidence(self):self.conf_thres=self.slider_conf.value()/100.0self.conf_label.setText(f"{self.conf_thres:.2f}")defupdate_iou(self):self.iou_thres=self.slider_iou.value()/100.0self.iou_label.setText(f"{self.iou_thres:.2f}")defopen_image(self):file_name,_=QFileDialog.getOpenFileName(self,"选择图像","","Images (*.png *.jpg *.jpeg)")iffile_name:self.detector.conf_thres=self.conf_thres self.detector.iou_thres=self.iou_thres result_img,detections=self.detector.detect_image(file_name)# 显示原始图像self.label_original.setPixmap(QPixmap(file_name))# 显示检测结果self.label_result.setPixmap(QPixmap.fromImage(QImage(result_img.data,result_img.shape[1],result_img.shape[0],QImage.Format_RGB888).rgbSwapped()))# 更新表格self.tableWidget.clearContents()forrow,detinenumerate(detections):self.tableWidget.setItem(row,0,QTableWidgetItem(str(row+1)))self.tableWidget.setItem(row,1,QTableWidgetItem(det['class']))self.tableWidget.setItem(row,2,QTableWidgetItem(f"{det['confidence']:.2%}"))self.tableWidget.setItem(row,3,QTableWidgetItem(str(det['bbox'])))if__name__=="__main__":app=QApplication(sys.argv)window=UAVDetectionApp()window.show()sys.exit(app.exec_())4.ui_main.py—— UI 界面(由 Qt Designer 生成)
💡 该文件由 Qt Designer 导出,内容较长,建议使用
.ui文件导入。
示例样式:
self.setStyleSheet(""" QWidget { background-color: #f0f0f0; font-family: Microsoft YaHei; } QPushButton { background-color: #4CAF50; color: white; border: none; padding: 8px; border-radius: 5px; } QPushButton:hover { background-color: #45a049; } """)✅ 五、环境配置教程
1. 安装依赖
pipinstallultralytics opencv-python pyqt5 numpy matplotlib pillow2. 下载模型
# 训练完成后自动保存cpruns/detect/anti_uav_yolov8s_1280/weights/best.pt models/best-yolov11n.pt✅ 六、运行说明文档
🚀 启动步骤:
- 将
anti_uav_dataset放入项目根目录 - 运行
train_uav.py训练模型(首次运行) - 将
best.pt复制到models/目录 - 运行
main.py启动 GUI 界面 - 点击“打开图片”进行检测
✅ 七、功能亮点
| 功能 | 说明 |
|---|---|
| 🔍多模态检测 | 支持图片、视频、摄像头 |
| ⚙️参数调节 | 可调置信度(0.11.0)、IoU(0.10.9) |
| 🔄模型替换 | 支持任意 YOLO 模型(如yolov8m.pt) |
| 📊结果可视化 | 表格显示类别、置信度、坐标 |
| 💾结果保存 | 保存标注图像和 JSON 文件 |
| 🧩可扩展性 | 可轻松更换为其他目标(如车辆、行人) |
✅ 八、部署建议
| 场景 | 方案 |
|---|---|
| 边缘设备 | Jetson Nano + ONNX 模型 |
| Web 平台 | FastAPI + React 前端 |
| 安防监控 | 与 NVR 联动,触发报警 |
高精度无人机智能监测系统!🛸🔍🛡️