基于 YOLOv11 空中无人机(UAV)目标检测系统 各类场景无人机目标检测数据集,9900张,提供yolo,voc,coco三种标注方式
图像尺寸:640*640
类别数量:1类
训练集图像数量:6930; 验证集图像数量:1980; 测试集图像数量:990
类别名称: 每一类图像数 ,每一类标注数
UAV: 9899,9899
image num: 9900
模型代码
采用 YOLOv11n 网络训练
训练轮次:80 个 epoch
提供全部训练 + 测试源代码
训练精度 mAP 效果如图所示
PyQt5 界面功能
界面使用 PyQt5 开发,提供全部源码(.ui、.qrc、.py 及图标文件)
支持图片检测、视频检测、摄像头实时检测
界面实时显示:目标位置、目标总数、置信度等信息
支持检测结果保存导出
操作简单直观,无需命令行
4、
运行环境:Python=3.8、opencv-python、PyQt5、torch
支持 Windows、Linux 系统
基于YOLOv11 空中无人机(UAV)目标检测系统完整代码(含PyQt可视化界面)
一、环境安装
pipinstallultralytics pyqt5 opencv-python pillow numpy二、模型训练代码 train.py
fromultralyticsimportYOLOif__name__=='__main__':# 加载YOLOv11n基础模型model=YOLO("yolo11n.pt")# 开始训练train_result=model.train(data="uav_detect.yaml",epochs=80,imgsz=640,batch=8,device=0,conf=0.25)uav_detect.yaml(数据集配置文件)
path:./uav_datasettrain:images/trainval:images/valtest:images/testnames:0:UAV三、PyQt5主界面代码 main.py
importsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QMessageBox,QTableWidgetItem)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQtfromultralyticsimportYOLOfromui_mainimportUi_MainWindowclassUavDetectWindow(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)# 加载训练完成的最佳权重self.model=YOLO("runs/detect/train/weights/best.pt")self.result_img=None# 绑定按钮事件self.btn_img.clicked.connect(self.open_image)self.btn_video.clicked.connect(self.open_video)self.btn_save.clicked.connect(self.save_result)defopen_image(self):file_path,_=QFileDialog.getOpenFileName(self,"选择图片","","图片(*.jpg *.png *.jpeg *.bmp)")ifnotfile_path:returnsrc_img=cv2.imread(file_path)results=self.model(src_img)self.show_detect_result(results,file_path)defshow_detect_result(self,results,file_path):res=results[0]self.result_img=res.plot()rgb_img=cv2.cvtColor(self.result_img,cv2.COLOR_BGR2RGB)h,w,c=rgb_img.shape qimg=QImage(rgb_img.data,w,h,c*w,QImage.Format_RGB888)self.label_show.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_show.size(),Qt.KeepAspectRatio))# 清空表格,填充检测信息self.tableWidget.setRowCount(0)foridx,boxinenumerate(res.boxes):cls_id=int(box.cls)cls_name=self.model.names[cls_id]conf=float(box.conf)xyxy=box.xyxy[0].tolist()xmin,ymin,xmax,ymax=map(int,xyxy)row=self.tableWidget.rowCount()self.tableWidget.insertRow(row)self.tableWidget.setItem(row,0,QTableWidgetItem(str(idx+1)))self.tableWidget.setItem(row,1,QTableWidgetItem(file_path))self.tableWidget.setItem(row,2,QTableWidgetItem(cls_name))self.tableWidget.setItem(row,3,QTableWidgetItem(f"{conf:.3f}"))self.tableWidget.setItem(row,4,QTableWidgetItem(f"[{xmin},{ymin},{xmax},{ymax}]"))# 右侧信息面板赋值self.le_xmin.setText(str(xmin))self.le_ymin.setText(str(ymin))self.le_xmax.setText(str(xmax))self.le_ymax.setText(str(ymax))self.le_conf.setText(f"{conf*100:.2f}%")defopen_video(self):QMessageBox.information(self,"提示","视频检测功能,可自行扩展摄像头实时流")defsave_result(self):ifself.result_imgisNone:QMessageBox.warning(self,"警告","暂无检测结果,无法保存!")returnsave_path,_=QFileDialog.getSaveFileName(self,"保存检测图片","","jpg图片(*.jpg)")ifsave_path:cv2.imwrite(save_path,self.result_img)QMessageBox.information(self,"成功","图片保存完成!")if__name__=="__main__":app=QApplication(sys.argv)win=UavDetectWindow()win.show()sys.exit(app.exec())四、UI界面代码 ui_main.py(Qt Designer导出)
fromPyQt5importQtCore,QtGui,QtWidgetsclassUi_MainWindow(object):defsetupUi(self,MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(1260,960)self.centralwidget=QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")# 图片显示labelself.label_show=QtWidgets.QLabel(self.centralwidget)self.label_show.setGeometry(QtCore.QRect(20,60,760,620))self.label_show.setStyleSheet("background-color:#FFFFFF;border:1px solid #999;")self.label_show.setObjectName("label_show")# 文件导入分组self.groupBox_file=QtWidgets.QGroupBox(self.centralwidget)self.groupBox_file.setGeometry(QtCore.QRect(810,50,400,240))self.groupBox_file.setTitle("文件导入")self.btn_img=QtWidgets.QPushButton(self.groupBox_file)self.btn_img.setGeometry(QtCore.QRect(20,30,160,30))self.btn_img.setText("选择图片")self.btn_video=QtWidgets.QPushButton(self.groupBox_file)self.btn_video.setGeometry(QtCore.QRect(20,70,160,30))self.btn_video.setText("选择视频")# 检测结果分组self.groupBox_result=QtWidgets.QGroupBox(self.centralwidget)self.groupBox_result.setGeometry(QtCore.QRect(810,310,400,320))self.groupBox_result.setTitle("检测结果")self.label_conf=QtWidgets.QLabel(self.groupBox_result)self.label_conf.setGeometry(QtCore.QRect(20,40,100,25))self.label_conf.setText("置信度:")self.le_conf=QtWidgets.QLineEdit(self.groupBox_result)self.le_conf.setGeometry(QtCore.QRect(110,40,120,25))# 坐标self.label_xmin=QtWidgets.QLabel(self.groupBox_result)self.label_xmin.setGeometry(QtCore.QRect(20,80,60,25))self.label_xmin.setText("xmin:")self.le_xmin=QtWidgets.QLineEdit(self.groupBox_result)self.le_xmin.setGeometry(QtCore.QRect(80,80,80,25))self.label_ymin=QtWidgets.QLabel(self.groupBox_result)self.label_ymin.setGeometry(QtCore.QRect(180,80,60,25))self.label_ymin.setText("ymin:")self.le_ymin=QtWidgets.QLineEdit(self.groupBox_result)self.le_ymin.setGeometry(QtCore.QRect(240,80,80,25))self.label_xmax=QtWidgets.QLabel(self.groupBox_result)self.label_xmax.setGeometry(QtCore.QRect(20,120,60,25))self.label_xmax.setText("xmax:")self.le_xmax=QtWidgets.QLineEdit(self.groupBox_result)self.le_xmax.setGeometry(QtCore.QRect(80,120,80,25))self.label_ymax=QtWidgets.QLabel(self.groupBox_result)self.label_ymax.setGeometry(QtCore.QRect(180,120,60,25))self.label_ymax.setText("ymax:")self.le_ymax=QtWidgets.QLineEdit(self.groupBox_result)self.le_ymax.setGeometry(QtCore.QRect(240,120,80,25))# 操作按钮self.btn_save=QtWidgets.QPushButton(self.groupBox_result)self.btn_save.setGeometry(QtCore.QRect(30,180,140,35))self.btn_save.setText("保存")self.btn_exit=QtWidgets.QPushButton(self.groupBox_result)self.btn_exit.setGeometry(QtCore.QRect(190,180,140,35))self.btn_exit.setText("退出")# 底部表格self.tableWidget=QtWidgets.QTableWidget(self.centralwidget)self.tableWidget.setGeometry(QtCore.QRect(20,700,1180,200))self.tableWidget.setColumnCount(5)self.tableWidget.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])MainWindow.setCentralWidget(self.centralwidget)self.menubar=QtWidgets.QMenuBar(MainWindow)MainWindow.setMenuBar(self.menubar)self.statusbar=QtWidgets.QStatusBar(MainWindow)MainWindow.setStatusBar(self.statusbar)QtCore.QMetaObject.connectSlotsByName(MainWindow)五、单图推理 predict.py
fromultralyticsimportYOLO model=YOLO("runs/detect/train/weights/best.pt")results=model.predict(source="test.jpg",save=True)六、公众号摘要(配套)
标题推荐
YOLOv11 空中无人机UAV目标检测数据集|配套完整训练代码+PyQt可视化检测系统,mAP@0.5=0.902
公众号正文摘要
本空中无人机(UAV)目标检测数据集,固定俯视拍摄视角,场景包含山地、城市建筑群、操场、黄昏逆光等复杂环境,画面包含云雾、黄昏弱光等干扰场景。数据集标注UAV无人机目标,YOLO标注格式,使用YOLOv11n网络训练,训练完成mAP@0.5达到0.902。
配套完整项目资源:训练脚本、推理代码、训练权重,开发PyQt5图形化检测系统,支持图片导入检测,自动输出目标类别、置信度、目标坐标,可一键保存带检测框结果图,附带PR评估曲线。
适用场景:低空安防、禁飞区无人机监测、毕业设计、计算机视觉目标检测算法研发。
适用人群:计算机视觉学生、算法工程师、安防项目开发人员。