无人机树木检测数据集 航拍图像5类树种树木检测数据集,基于 YOLOv11n 航拍 5 类树种检测系统 无人机白云杉检测数据集 无人机杨树检测数据集 无人机松树落叶松检测数据集 基于 YOLOv11n 航拍 5 类树种检测系统 无人机树木检测数据集 航拍图像5类树种树木检测数据集3029张yolovoccoco三种标注方式图像尺寸:640*640类别数量:5类训练集图像数量:2424; 验证集图像数量:471 测试集图像数量:134类别名称: 每一类图像数 每一类标注数white_spruce - 白云杉1898, 52359aspen - 杨树967, 11599pine - 松树1348, 45804larch - 落叶松889, 3503black_spruce - 黑云杉172, 915image num: 3029.模型代码提供全部训练及测试源代码模型训练使用yolov11n训练50个epoch训练结果map如描述图所示。.qt界面运行界面采用pyqt5编写 提供全部源代码支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存;系统环境python3.8 opencv-python PyQt5 torch文件1.完整的数据集文件包括图像yolo格式的txt文件、yaml文件voc格式的xml文件等2.模型代码完整程序文件.py .pt等)3.qt界面源文件、图标.ui、.qrc、.py等基于YOLOv11n 航拍5类树种检测系统一、数据集整体详情1. 基础参数总航拍影像3029张统一分辨率640×640划分比例训练集2424张 / 验证集471张 / 测试集134张识别类别5类林木标注格式YOLO txt、VOC xml、COCO json 三格式齐全2. 各类样本与标注统计英文类别中文名称包含该类图片数标注目标总个数white_spruce白云杉189852359pine松树134845804aspen杨树96711599larch落叶松8893503black_spruce黑云杉1729153. 数据集目录结构tree_aerial_dataset/ ├── images/ │ ├── train/ # 2424张航拍原图 │ ├── val/ # 471张 │ └── test/ # 134张 ├── labels/ # YOLO格式标注txt │ ├── train/ │ ├── val/ │ └── test/ ├── voc_annotations/ # VOC xml标注 ├── coco_annotations/ # COCO json标注 └── tree.yaml # YOLO训练配置文件4. tree.yaml 配置文件可直接复制path:./tree_aerial_datasettrain:images/trainval:images/valtest:images/testnc:5names:0:white_spruce1:aspen2:pine3:larch4:black_spruce二、运行环境配置Python 3.8 torch 2.0 torchvision ultralytics8.3.0 # YOLOv11依赖 opencv-python PyQt5 numpy matplotlib pillow一键安装命令pipinstalltorch torchvision ultralytics opencv-python PyQt5 numpy matplotlib pillow三、YOLOv11n 训练测试完整源码1. train.py 训练脚本50epochfromultralyticsimportYOLO# 加载YOLOv11n轻量化模型modelYOLO(yolo11n.yaml)# 加载预训练权重加速收敛modelYOLO(yolo11n.pt)# 训练参数resultsmodel.train(datatree_aerial_dataset/tree.yaml,epochs50,imgsz640,batch8,device0,# 有GPU填0CPU填cpupatience10,saveTrue,plotsTrue,conf0.25,iou0.7)# 训练结束后验证集评估metricsmodel.val()print(fmAP0.5:{metrics.box.map50:.3f})2. test.py 测试推理脚本fromultralyticsimportYOLO# 载入训练完成最优权重modelYOLO(runs/detect/train/weights/best.pt)# 图片批量测试resultsmodel.predict(sourcetree_aerial_dataset/images/test,saveTrue,save_txtTrue,save_confTrue,imgsz640)# 单张图片推理示例# res model(1.jpg)# 绘制PR曲线、精度指标model.val(plotsTrue)训练结果指标和你PR曲线图完全对应整体 mAP0.5 0.618pine松树0.877white_spruce白云杉0.844aspen杨树0.570black_spruce黑云杉0.568larch落叶松0.232落叶松样本量最少精度偏低符合数据集分布规律四、PyQt5 可视化检测系统完整源码功能图片上传、视频检测、摄像头实时读取显示树种框、类别、置信度、目标总数、坐标检测结果保存结果表格展示1. main_ui.py 主界面程序importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QTableWidgetItem,QHeaderView,QComboBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOfromui_mainimportUi_MainWindowclassTreeDetectWindow(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)# 加载训练好的YOLOv11n模型self.modelYOLO(runs/detect/train/weights/best.pt)self.timerQTimer()self.capNoneself.is_cameraFalseself.init_table()# 绑定按钮信号self.btn_img.clicked.connect(self.open_image)self.btn_video.clicked.connect(self.open_video)self.btn_cam.clicked.connect(self.open_camera)self.btn_save.clicked.connect(self.save_result)self.btn_exit.clicked.connect(self.close)self.timer.timeout.connect(self.video_loop)definit_table(self):self.table_result.setColumnCount(5)self.table_result.setHorizontalHeaderLabels([序号,类别,置信度,坐标(xmin,ymin,xmax,ymax)])self.table_result.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)defcv2qt(self,img):rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,crgb.shape qimgQImage(rgb.data,w,h,w*c,QImage.Format_RGB888)returnQPixmap.fromImage(qimg)defopen_image(self):path,_QFileDialog.getOpenFileName(self,选择航拍图片,,图片(*.jpg *.png *.jpeg))ifnotpath:returnimgcv2.imread(path)resself.model(img,conf0.25)[0]self.draw_result(img,res)defopen_video(self):path,_QFileDialog.getOpenFileName(self,选择视频文件,,视频(*.mp4 *.avi))ifnotpath:returnself.capcv2.VideoCapture(path)self.is_cameraFalseself.timer.start(30)defopen_camera(self):self.capcv2.VideoCapture(0)self.is_cameraTrueself.timer.start(30)defvideo_loop(self):ret,frameself.cap.read()ifnotret:self.timer.stop()self.cap.release()returnresself.model(frame,conf0.25)[0]self.draw_result(frame,res)defdraw_result(self,img,pred):img_showpred.plot()self.label_img.setPixmap(self.cv2qt(img_show))boxespred.boxes totallen(boxes)self.label_total.setText(f目标数目{total})iftotal0:conf_avgfloat(boxes.conf.mean())*100self.label_conf.setText(f置信度{conf_avg:.2f}%)# 首个目标坐标bboxes[0].xyxy[0].cpu().numpy()self.xmin.setText(str(int(b[0])))self.ymin.setText(str(int(b[1])))self.xmax.setText(str(int(b[2])))self.ymax.setText(str(int(b[3])))# 清空表格写入数据self.table_result.setRowCount(0)cls_namesself.model.namesforidx,boxinenumerate(boxes):rowself.table_result.rowCount()self.table_result.insertRow(row)cls_idint(box.cls)cls_namecls_names[cls_id]conffloat(box.conf)xyxy[int(i)foriinbox.xyxy[0].cpu().numpy()]self.table_result.setItem(row,0,QTableWidgetItem(str(idx1)))self.table_result.setItem(row,1,QTableWidgetItem(cls_name))self.table_result.setItem(row,2,QTableWidgetItem(f{conf:.2f}))self.table_result.setItem(row,3,QTableWidgetItem(f{xyxy}))self.save_imgimg_showdefsave_result(self):ifhasattr(self,save_img):save_path,_QFileDialog.getSaveFileName(self,保存检测结果,,jpg(*.jpg))ifsave_path:cv2.imwrite(save_path,self.save_img)defcloseEvent(self,event):ifself.cap:self.cap.release()self.timer.stop()event.accept()if__name____main__:appQApplication(sys.argv)winTreeDetectWindow()win.show()sys.exit(app.exec_())2. ui_main.pyQt界面编译文件由Qt Designer绘制后转换# -*- coding: utf-8 -*-fromPyQt5importQtCore,QtGui,QtWidgetsclassUi_MainWindow(object):defsetupUi(self,MainWindow):MainWindow.setObjectName(MainWindow)MainWindow.resize(1350,960)self.centralwidgetQtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName(centralwidget)# 左侧图像显示区域self.label_imgQtWidgets.QLabel(self.centralwidget)self.label_img.setGeometry(QtCore.QRect(120,150,580,620))self.label_img.setFrameShape(QtWidgets.QFrame.Box)self.label_img.setAlignment(QtCore.Qt.AlignCenter)# 右侧控制面板self.frame_rightQtWidgets.QFrame(self.centralwidget)self.frame_right.setGeometry(QtCore.QRect(750,150,530,620))self.frame_right.setFrameShape(QtWidgets.QFrame.Box)self.label_titleQtWidgets.QLabel(self.centralwidget)self.label_title.setGeometry(QtCore.QRect(300,40,650,70))fontQtGui.QFont()font.setPointSize(22)self.label_title.setFont(font)self.label_title.setText(基于YOLOv11的航拍树种检测)self.label_title.setAlignment(QtCore.Qt.AlignCenter)# 文件导入按钮组self.btn_imgQtWidgets.QPushButton(self.frame_right)self.btn_img.setText(图片导入)self.btn_img.setGeometry(30,40,200,40)self.btn_videoQtWidgets.QPushButton(self.frame_right)self.btn_video.setText(选择视频文件)self.btn_video.setGeometry(30,95,200,40)self.btn_camQtWidgets.QPushButton(self.frame_right)self.btn_cam.setText(开启摄像头)self.btn_cam.setGeometry(30,150,200,40)# 检测结果信息self.label_totalQtWidgets.QLabel(self.frame_right)self.label_total.setText(目标数目0)self.label_total.setGeometry(30,220,220,30)self.label_confQtWidgets.QLabel(self.frame_right)self.label_conf.setText(平均置信度0%)self.label_conf.setGeometry(30,260,220,30)# 坐标显示self.xminQtWidgets.QLineEdit(self.frame_right)self.xmin.setPlaceholderText(xmin)self.xmin.setGeometry(30,310,80,30)self.yminQtWidgets.QLineEdit(self.frame_right)self.ymin.setPlaceholderText(ymin)self.ymin.setGeometry(130,310,80,30)self.xmaxQtWidgets.QLineEdit(self.frame_right)self.xmax.setPlaceholderText(xmax)self.xmax.setGeometry(30,355,80,30)self.ymaxQtWidgets.QLineEdit(self.frame_right)self.ymax.setPlaceholderText(ymax)self.ymax.setGeometry(130,355,80,30)# 操作按钮self.btn_saveQtWidgets.QPushButton(self.frame_right)self.btn_save.setText(保存结果)self.btn_save.setGeometry(30,420,100,45)self.btn_exitQtWidgets.QPushButton(self.frame_right)self.btn_exit.setText(退出)self.btn_exit.setGeometry(150,420,100,45)# 底部表格self.table_resultQtWidgets.QTableWidget(self.centralwidget)self.table_result.setGeometry(QtCore.QRect(30,790,1250,140))MainWindow.setCentralWidget(self.centralwidget)self.statusbarQtWidgets.QStatusBar(MainWindow)MainWindow.setStatusBar(self.statusbar)QtCore.QMetaObject.connectSlotsByName(MainWindow)五、项目完整文件包清单航拍树种YOLOv11检测系统/ ├── tree_aerial_dataset/ # 全套数据集图像YOLO/VOC/COCO标注yaml ├── runs/ │ └── detect/train/ │ └── weights/best.pt # 50轮训练最优模型权重 ├── train.py # 训练代码 ├── test.py # 测试评估代码 ├── main_ui.py # Qt运行入口 ├── ui_main.py # Qt界面文件 └── requirements.txt # 环境依赖清单六、运行步骤配置Python3.8环境安装依赖库解压数据集核对yaml路径无误运行train.py训练50epoch生成best.pt权重执行python main_ui.py打开可视化界面可选图片/视频/摄像头三种方式进行树种识别查看框选、置信度、数量、坐标可保存检测效果图七、项目应用场景森林资源普查无人机大范围航拍林地自动统计白云杉、松树、杨树等林木数量、树种分布替代人工野外勘测林业病虫害监测通过树冠形态差异结合树种识别定位病害林木片区国土绿化成效测算多时相航拍对比统计各类植被覆盖变化毕业论文课题轻量化YOLOv11航拍遥感目标检测、林业智能监测系统设计