当前位置: 首页 > news >正文

基于 YOLOv11 的无人机航拍小目标检测系统 基于 YOLOv11 的无人机小目标检测系统,基于 VisDrone 2019 数据集,实现从模型训练、验证、推理到 PyQt6 桌面应用的完整流程。

智慧巡检-基于 YOLOv11 的无人机小目标检测系统,基于 VisDrone 2019 数据集,实现从模型训练、验证、推理到 PyQt6 桌面应用的完整流程。

【核心亮点】
1、小目标优化:针对无人机航拍目标小、密集、多尺度等特点,支持 1280 高分辨率、多尺度训练、mosaic 数据增强
2、模型:YOLO11
3、完整流程:训练脚本(train/val/predict)→ 模型权重 → 桌面应用(图片/视频/摄像头检测)
4、指标可视化:训练曲线、混淆矩阵、PR 曲线、F1 曲线等自动生成并保存
5、可直接演示:PyQt6 桌面应用,支持图片拖拽、视频逐帧、摄像头实时检测,可导出结果图与 CSV
6、登录与权限:登录/注册 + Token 校验,便于答辩展示系统化设计

【核心功能清单】
1、训练:VisDrone 数据加载、自动路径配置、多模型尺寸(yolo11n/s/m/l/x)、多尺度训练、早停
2、检测:图片识别(JPG/PNG/BMP)、视频识别(MP4/AVI/MOV)、摄像头实时检测
3、管理:模型路径管理、置信度/IoU 阈值配置、检测历史查看与导出
4、可视化:训练曲线、指标汇总、混淆矩阵、PR 曲线等图表展示

【核心技术】
1、深度学习框架:PyTorch,主流开源深度学习框架
2、目标检测:Ultralytics YOLO11,单阶段目标检测
3、GUI 框架:PyQt6,跨平台桌面应用开发
4、图像处理:OpenCV、Pillow
5、数据集:VisDrone 2019-DET,面向无人机视角的检测基准

【附】
1、完整源码(结构清晰,便于二次开发)
2、训练产物:模型权重、日志、指标与图表
3、可运行演示:训练脚本 + PyQt6 桌面应用

1

这是一套基于YOLOv11的无人机航拍小目标检测系统完整解决方案。针对 VisDrone 数据集目标小、密集的特点,我为你设计了高分辨率训练策略和 PyQt6 桌面应用架构。

1. 数据集配置 (visdrone.yaml)

针对无人机视角,我们需要配置 VisDrone 的 10 个类别。

# visdrone.yamlpath:./datasets/VisDrone2019# 数据集根目录train:./datasets/VisDrone2019/images/train# 训练集val:./datasets/VisDrone2019/images/val# 验证集test:./datasets/VisDrone2019/images/test# 测试集# VisDrone 类别定义 (10类)nc:10names:-pedestrian# 行人-people# 人群-bicycle# 自行车-car# 小汽车-van# 面包车-truck# 卡车-tricycle# 三轮车-awning-tricycle# 遮阳篷三轮车-bus# 公交车-motor# 摩托车

2. 模型训练代码 (train.py)

核心策略:针对小目标,必须开启高分辨率 (imgsz=1280)Mosaic 数据增强,并适当延长训练周期。

fromultralyticsimportYOLOdeftrain_visdrone():# 1. 加载 YOLOv11 模型 (n/s/m/l/x)# 推荐使用 m 或 l 版本以提取更丰富的小目标特征model=YOLO('yolo11m.pt')# 2. 开始训练results=model.train(data='visdrone.yaml',# 数据集配置epochs=300,# 训练轮数 (VisDrone较难,建议多训)imgsz=1280,# 输入尺寸 (关键:小目标需高分辨率)batch=8,# 批次大小 (根据显存调整,1280尺寸显存消耗大)name='yolo11m_visdrone',# 任务名称project='runs/train',# 保存路径device=0,# 使用 GPU 0workers=4,# 数据加载线程# 针对小目标的优化参数mosaic=1.0,# Mosaic 增强比例 (默认1.0,增加小目标上下文)close_mosaic=10,# 最后10轮关闭 Mosaic 以稳定收敛hsv_h=0.015,# 色调增强 (模拟不同光照)hsv_s=0.7,# 饱和度增强hsv_v=0.4,# 明度增强flipud=0.5,# 上下翻转 (无人机视角适用)fliplr=0.5,# 左右翻转)if__name__=='__main__':train_visdrone()

3. PyQt6 桌面应用核心架构 (main_app.py)

这是系统的界面部分,实现了你截图中展示的图片检测、实时统计、历史记录等功能。

importsysimportcv2importtorchimportnumpyasnpfromPyQt6.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QLabel,QPushButton,QTableWidget,QTableWidgetItem,QFileDialog,QMessageBox)fromPyQt6.QtGuiimportQPixmap,QImage,QIconfromPyQt6.QtCoreimportQt,QTimer,QThread,pyqtSignal# 加载训练好的模型# 确保路径指向你训练生成的 best.ptmodel=torch.hub.load('ultralytics/yolov11','custom',path='runs/train/yolo11m_visdrone/weights/best.pt')classDetectionThread(QThread):change_pixmap_signal=pyqtSignal(np.ndarray)stats_signal=pyqtSignal(dict)def__init__(self):super().__init__()self.running=Falseself.source=0# 0 for webcamdefrun(self):cap=cv2.VideoCapture(self.source)self.running=Truewhileself.running:ret,frame=cap.read()ifret:# YOLOv11 推理results=model(frame,imgsz=1280,conf=0.4)# 解析结果annotated_frame=results[0].plot()# 绘制边框和标签# 统计逻辑 (示例)names=results[0].names counts={}forboxinresults[0].boxes:cls_id=int(box.cls[0])name=names[cls_id]counts[name]=counts.get(name,0)+1self.stats_signal.emit(counts)self.change_pixmap_signal.emit(annotated_frame)else:breakcap.release()defstop(self):self.running=Falseself.wait()classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("无人机航拍小目标检测系统")self.setGeometry(100,100,1200,800)# 主布局central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧:视频显示区self.video_label=QLabel("等待检测...")self.video_label.setFixedSize(800,600)self.video_label.setStyleSheet("background-color: #000; color: #fff;")main_layout.addWidget(self.video_label,3)# 右侧:控制面板与统计right_layout=QVBoxLayout()# 控制按钮self.btn_start=QPushButton("启动摄像头")self.btn_start.clicked.connect(self.start_detection)right_layout.addWidget(self.btn_start)self.btn_stop=QPushButton("停止检测")self.btn_stop.clicked.connect(self.stop_detection)right_layout.addWidget(self.btn_stop)# 统计表格self.table=QTableWidget()self.table.setColumnCount(2)self.table.setHorizontalHeaderLabels(["类别","数量"])right_layout.addWidget(self.table)main_layout.addLayout(right_layout,1)# 线程初始化self.thread=DetectionThread()self.thread.change_pixmap_signal.connect(self.update_image)self.thread.stats_signal.connect(self.update_stats)defstart_detection(self):ifnotself.thread.isRunning():self.thread.start()defstop_detection(self):self.thread.stop()defupdate_image(self,cv_img):"""将 OpenCV 图像转换为 Qt 格式并显示"""rgb_image=cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format.Format_RGB888)p=convert_to_Qt_format.scaled(800,600,Qt.AspectRatioMode.KeepAspectRatio)self.video_label.setPixmap(QPixmap.fromImage(p))defupdate_stats(self,counts):"""更新右侧统计表"""self.table.setRowCount(len(counts))row=0forcls,cntincounts.items():self.table.setItem(row,0,QTableWidgetItem(cls))self.table.setItem(row,1,QTableWidgetItem(str(cnt)))row+=1if__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec())

4. 指标可视化说明

训练完成后,runs/train/yolo11m_visdrone/目录下会自动生成你截图中展示的图表:

  1. Loss 曲线(train/box_loss,val/box_loss):用于判断模型是否收敛,是否过拟合。
  2. mAP 曲线(metrics/mAP50(B)):衡量检测精度的核心指标。对于 VisDrone,mAP50 达到 0.45-0.55 属于正常水平。
  3. 混淆矩阵(confusion_matrix.png):查看类别是否混淆(例如:三轮车是否被误检为摩托车)。
  4. PR 曲线(results.png):精确率与召回率的平衡关系。

5. 运行指南

  1. 准备数据:下载 VisDrone2019 数据集并解压,修改visdrone.yaml中的路径。
  2. 训练模型:运行python train.py。等待训练结束,获取best.pt
  3. 运行系统:将best.pt路径填入main_app.py,运行python main_app.py即可启动界面。

该方案完整覆盖了你要求的训练、验证、推理及可视化全流程。

http://www.jsqmd.com/news/675434/

相关文章:

  • Phi-3-mini-4k-instruct-gguf多场景应用:写邮件/解题/写SQL/生成测试用例实战演示
  • 2026年展会展台设计策划公司推荐,靠谱品牌等你选 - mypinpai
  • Bidili Generator效果对比:不同LoRA强度下风格迁移的真实案例展示
  • 通过复制粘贴,就可以写出优秀的提示词
  • 分钟搞懂深度学习AI:实操篇:VGG
  • Golang怎么实现跳表数据结构_Golang如何用Skip List实现有序数据的快速查找【方法】
  • g4f给出JavaScript调用的例子代码,让用户只要能点开网页,就能用ai
  • 分享资质齐全的美术集训画室机构,口碑不错的画室价格多少钱 - 工业推荐榜
  • NaViL-9B企业落地实践:金融文档OCR理解+摘要生成全流程
  • 深聊美术集训实力机构怎么收费,推荐靠谱的画室公司 - myqiye
  • 细聊深圳艾克斯振动盘,维修成本及行业口碑排名究竟怎样 - mypinpai
  • TLPI 第9章 读书笔记:Process Credentials
  • 8.原理图为什么看不到具体的电路(比如STM32的晶振等)
  • 【大模型应用开发】—— Context Engineering:从提示词到上下文工程:LLM应用落地的核心思维跃迁
  • 2026市面上比较实用的互联网行业证书。
  • React 与 GraphQL 碎片(Fragments):利用数据局部性原则优化组件级数据的声明式获取
  • Windows右键菜单终极清理指南:用ContextMenuManager告别菜单臃肿
  • PRD文档中生成符合技术规范和业务逻辑的图表
  • RoadDefectNet 系统采用前后端分离架构,结合了计算机视觉(YOLO)与Web 业务逻辑(Django + Vue3) 智慧交通道-路缺陷检测系统 Django+Vue3 巡检维修管理平台
  • 知识图谱(BILSTM+CRF项目完整实现)【第六章】
  • nli-MiniLM2-L6-H768参数详解:Position Embedding截断长度对长句NLI的影响实测
  • WeChatPad终极指南:3步破解微信平板模式限制,实现安卓多设备登录
  • 传统 on-call 的 5 个致命问题——从人肉值班到 AI Agent 自动排障
  • 学习记录 健脾祛湿方收集
  • vulhub系列-73-RA1NXing Bots(超详细)
  • 基于麒麟V11、昇腾300i Duo安装torch、torch_npu
  • LLM应用缓存设计范式重构,Dify 2026新增Context-Aware TTL引擎与动态驱逐策略
  • NEURAL MASK视觉重构实验室参数详解:BIREFNET引擎输入尺寸/格式/显存占用
  • 终极指南:如何使用JDspyder实现京东商品自动化预约与抢购
  • vulhub系列-74-Hackable III(超详细)