如何构建基于深度学习YOLOV8草原无人机牛羊检测系统 YOLOV8预训练模型如何训练无人机牛羊目标检测数据集 无人机牛羊识别系统
智慧无人机巡检-无人机牛羊目标检测yolo数据集
【数据内容】
无人机视角,2万多张图片,6g包含牛和羊两种动物,图片清晰标注,适合目标检测模型训练
【格式支持】
数据集已标注好,支持多种格式输出,直接可用
【适用场景】
科研、项目开发、模型训练等
无人机牛羊目标检测YOLO数据集 — 结构化信息表
| 字段 | 内容描述 |
|---|---|
| 数据集名称 | 无人机牛羊目标检测数据集 |
| 图像数量 | 超过 20,000 张 |
| 数据大小 | 约 6 GB |
| 目标类别 | 牛、羊(共2类) |
| 数据来源 | 无人机航拍视角,覆盖多种牧场、山地、草地等真实放牧环境 |
| 图像质量 | 图片清晰,分辨率高,标注精准,包含不同光照、天气、遮挡和密度场景,适合复杂条件下的模型训练 |
| 标注情况 | 每张图像均已进行专业标注,边界框准确,无漏标、错标 |
| 标注格式 | 支持多种格式输出(如 YOLO.txt、COCO、PASCAL VOC 等),默认提供 YOLO 格式,可直接用于模型训练 |
| 坐标格式 | YOLO格式:每行class_id center_x center_y width height(归一化坐标) |
| 数据用途 | 适用于牛羊识别、放牧监测、野生动物管理、农业智能化等目标检测任务 |
| 适用场景 | -科研研究:动物行为分析、小目标检测算法对比-项目开发:智慧畜牧系统、无人机巡检平台-模型训练:目标检测、迁移学习、域适应研究等 |
| 使用建议 | 可直接用于 YOLO 系列(如 YOLOv5/v8/v11)及其他主流检测框架训练;建议结合 Mosaic、多尺度训练等策略提升在低空小目标上的检测性能 |
| 扩展潜力 | 数据结构规范,支持新增动物类别或与其他农业视觉数据集融合使用 |
说明:该数据集专为无人机视角下的牲畜检测任务设计,具有样本量大、场景丰富、标注规范等特点,能够有效支撑从算法研发到实际落地的全流程需求,尤其适用于解决高空拍摄下目标小、密度高、遮挡严重等挑战性问题。
1
1
分为环境准备、数据预处理、模型训练、系统开发四个核心步骤。
以下是完整的构建指南:
🛠️ 第一步:环境搭建与依赖安装
首先,确保您的电脑有NVIDIA显卡(推荐显存8GB以上),并安装必要的Python库。
创建虚拟环境(推荐)
conda create-nsheep_cattlepython=3.9conda activate sheep_cattle安装 PyTorch 和 YOLOv8
# 安装 PyTorch (请根据您的CUDA版本去官网查询对应命令,例如 CUDA 11.8)pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装 Ultralytics YOLOv8pipinstallultralytics opencv-python PyQt5 matplotlib
📂 第二步:数据集整理
您的数据集包含2万张图片,规模很大,需要规范目录结构。
假设您的原始数据已经转换为了YOLO格式(.txt),请整理成如下结构:
SheepCattle_Dataset/ ├── images/ │ ├── train/ (约1.6万张图片) │ └── val/ (约4000张图片) ├── labels/ │ ├── train/ (对应的txt标签) │ └── val/ └── data.yaml (配置文件)编写data.yaml文件:
path:./SheepCattle_Datasettrain:images/trainval:images/valnc:2# 类别数量names:['sheep','cattle']# 类别名称:0为羊,1为牛🚀 第三步:模型训练
由于是无人机视角,目标(牛羊)可能较小且密集,建议使用YOLOv8m或YOLOv8l以获得更好的特征提取能力,而不是最小的 YOLOv8n。
编写训练脚本train.py:
fromultralyticsimportYOLOimportosdeftrain_model():# 1. 加载模型# 使用预训练权重 'yolov8m.pt' 进行迁移学习,收敛更快,精度更高model=YOLO('yolov8m.pt')# 2. 开始训练results=model.train(data='SheepCattle_Dataset/data.yaml',# 数据配置文件路径epochs=100,# 训练轮数,2万张图建议跑100轮imgsz=640,# 输入图片尺寸batch=16,# 批大小,根据显存调整device=0,# 使用GPU 0workers=4,# 数据加载线程数name='sheep_cattle_v1',# 实验名称optimizer='AdamW',# 优化器lr0=0.001,# 初始学习率hsv_h=0.015,# 数据增强:色调hsv_s=0.7,# 数据增强:饱和度hsv_v=0.4,# 数据增强:明度degrees=30,# 数据增强:旋转角度 (无人机视角多变,增加旋转增强)scale=0.5,# 数据增强:缩放mosaic=0.5,# 马赛克增强 (0.5概率)mixup=0.1# MixUp增强)if__name__=='__main__':train_model()运行该脚本:python train.py
💻 第四步:构建识别系统界面
参考您之前提供的图片风格,我们可以使用PyQt5构建一个带有文件导入、检测结果显示、坐标信息的桌面软件。
编写系统主程序app.py:
importsysimportcv2fromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOimportnumpyasnp# 导入生成的UI界面 (这里假设您用Qt Designer设计好了界面,或者直接用代码写布局)# 为了演示方便,这里使用伪代码逻辑描述核心功能classSheepCattleSystem(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("无人机牛羊识别系统")self.setGeometry(100,100,1200,800)# 1. 加载模型 (加载训练好的最佳权重)self.model=YOLO('runs/detect/sheep_cattle_v1/weights/best.pt')# 2. 初始化界面组件 (标签、按钮、表格)self.init_ui()self.current_image_path=""definit_ui(self):# 这里省略具体的布局代码,逻辑如下:# 左侧:QLabel 用于显示图片/视频# 右侧上方:QLabel 显示统计信息 (总数、牛数量、羊数量)# 右侧下方:QTableWidget 显示详细列表 (序号, 类别, 置信度, 坐标)# 底部:按钮 (打开图片, 打开视频, 开始检测, 保存结果)passdefopen_image(self):# 打开文件对话框file_path,_=QFileDialog.getOpenFileName(self,"选择图片",".","Image Files (*.png *.jpg *.bmp)")iffile_path:self.current_image_path=file_path self.detect_and_show(file_path)defdetect_and_show(self,source):# 读取图片ifisinstance(source,str):img=cv2.imread(source)else:img=source# 转为RGB (OpenCV是BGR)img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 推理results=self.model(img_rgb)[0]# 解析结果boxes=results.boxes names=results.names count_sheep=0count_cattle=0info_list=[]# 在图片上画框forboxinboxes:xyxy=box.xyxy[0].cpu().numpy().astype(int)conf=box.conf[0].cpu().numpy()cls_id=int(box.cls[0].cpu().numpy())label=names[cls_id]# 统计iflabel=='sheep':count_sheep+=1else:count_cattle+=1# 记录信息info_list.append({"id":len(info_list)+1,"class":label,"conf":f"{conf:.2f}","xyxy":xyxy})# 绘图color=(0,255,0)iflabel=='sheep'else(255,0,0)# 羊绿框,牛蓝框cv2.rectangle(img,(xyxy[0],xyxy[1]),(xyxy[2],xyxy[3]),color,2)cv2.putText(img,f"{label}{conf:.2f}",(xyxy[0],xyxy[1]-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)# 更新界面显示self.update_ui(img,count_sheep,count_cattle,info_list)defupdate_ui(self,img,sheep_num,cattle_num,info_list):# 1. 显示图片height,width,channel=img.shape bytesPerLine=3*width qImg=QImage(img.data,width,height,bytesPerLine,QImage.Format_RGB888)self.image_label.setPixmap(QPixmap.fromImage(qImg).scaled(800,600,Qt.KeepAspectRatio))# 2. 更新统计数据self.total_label.setText(f"总数:{sheep_num+cattle_num}")self.sheep_label.setText(f"羊:{sheep_num}")self.cattle_label.setText(f"牛:{cattle_num}")# 3. 更新表格self.table.setRowCount(len(info_list))fori,infoinenumerate(info_list):self.table.setItem(i,0,QTableWidgetItem(str(info['id'])))self.table.setItem(i,1,QTableWidgetItem(info['class']))self.table.setItem(i,2,QTableWidgetItem(info['conf']))self.table.setItem(i,3,QTableWidgetItem(str(info['xyxy'])))if__name__=='__main__':app=QApplication(sys.argv)window=SheepCattleSystem()window.show()sys.exit(app.exec_())💡 关键优化建议
针对无人机视角的增强:
在训练时,务必开启mosaic(马赛克)增强。无人机视角下,牛羊往往很小且密集,马赛克增强可以将4张图拼成1张,模拟出密集小目标的场景,大幅提升检测效果。小目标检测头:
如果检测效果中漏检较多小羊,可以考虑使用YOLOv8-seg(分割模型)或者修改模型配置文件,增加一个针对更小尺度(如 160x160 特征图)的检测头。模型导出:
训练完成后,可以将模型导出为 ONNX 格式,以便在 C++ 或边缘设备(如 Jetson Nano/Orin)上部署,提高系统运行速度。model.export(format='onnx')
按照这个流程,您就能利用那2万张图片训练出一个专业的无人机牛羊识别系统了。
