深度学习目标检测中如何yolov8训练手段标注的灯诱杀虫灯害虫数据集/常见农业害虫数据集,识别检测棉铃虫,草地螟,东亚蟋蟀“三轮褐拟步甲,线虫沟等

使用YOLOv8训练农业害虫数据集,并创建一个可视化的界面来展示模型的性能和结果,经过以下几个步骤。从准备数据集、训练模型到集成可视化界面的全过程。

灯诱杀虫灯害虫数据集,常见农业害虫数据集。
在这里插入图片描述

数据集25378张jpeg图像,训练集12701、验证集5077 、测试集7600,手动标注,可用于害虫识别检测任务。
在这里插入图片描述

24类常见农业害虫:{ “0”: “棉铃虫”, “1”: “草地螟”, “2”: “东亚蟋蟀”, “3”: “三轮褐拟步甲”, “4”: “线虫沟”, “5”: “苔螟蛾”, “6”: “小壁虎”, “7”: “三叶草夜蛾”, “8”: “棉蚜虫”, “9”: “甘蓝夜蛾”, “10”: “大黑瓢虫”, “11”: “甜菜夜蛾”, “12”: “小菜蛾”, “13”: “平行隐翅虫”, “14”: “稻计划蝉”, “15”: “地虎”, “16”: “黄虎”, “17”: “八字虎”, “18”: “黑隐翅虫”, “19”: “稻纵卷叶螟”, “20”: “条纹稻螟”, “21”: “斜纹夜蛾”, “22”: “稻叶卷蛾”, “23”: “梅蛾” }
voc、yolo、coco格式,在这里插入图片描述
使用YOLOv8训练农业害虫数据集,并创建一个可视化的界面来展示模型的性能和结果,经过以下几个步骤。从准备数据集、训练模型到集成可视化界面的全过程。

1. 数据集准备

假设您的数据集已经按照YOLO格式标注好,结构如下:

pest_detection/
├── images/
│   ├── train/
│   │   ├── img1.jpg
│   │   └── ...
│   ├── val/
│   │   ├── img1.jpg
│   │   └── ...
│   └── test/
│       ├── img1.jpg
│       └── ...
└── labels/
    ├── train/
    │   ├── img1.txt
    │   └── ...
    ├── val/
    │   ├── img1.txt
    │   └── ...
    └── test/
        ├── img1.txt
        └── ...
data_pest.yaml

data_pest.yaml 文件内容示例:

train: ./pest_detection/images/train/
val: ./pest_detection/images/val/

nc: 24  # 类别数量:棉铃虫, 草地螟, 东亚蟋蟀, ..., 梅蛾
names: ['棉铃虫', '草地螟', '东亚蟋蟀', '三轮褐拟步甲', '线虫沟', '苔螟蛾', '小壁虎', '三叶草夜蛾', '棉蚜虫', '甘蓝夜蛾', '大黑瓢虫', '甜菜夜蛾', '小菜蛾', '平行隐翅虫', '稻计划蝉', '地虎', '黄虎', '八字虎', '黑隐翅虫', '稻纵卷叶螟', '条纹稻螟', '斜纹夜蛾', '稻叶卷蛾', '梅蛾']

2. 安装依赖库

确保安装了必要的库:

pip install ultralytics opencv-python-headless PyQt5 tensorboard

3. 训练模型

使用YOLOv8进行训练。

训练脚本
from ultralytics import YOLO

def main_train():
    # 加载预训练的YOLOv8n模型或从头开始定义模型
    model = YOLO('yolov8n.yaml')  # 或者直接加载预训练权重,如 'yolov8n.pt'
    
    results = model.train(
        data='./data_pest.yaml',
        epochs=100,  # 根据需要调整
        imgsz=640,
        batch=16,
        project='./runs/detect',
        name='pest_detection',
        optimizer='SGD',
        device='0',  # 使用GPU编号
        save=True,
        cache=True,
        verbose=True,
        patience=10,  # 提前停止的耐心值
        lr0=0.01,  # 初始学习率
        lrf=0.1,  # 最终学习率(相对于lr0的比例)
    )

if __name__ == '__main__':
    main_train()

4. 模型优化

在训练过程中,可以通过以下几种方式进行模型优化:

  • 学习率调整:通过设置lr0lrf参数调整初始和最终的学习率。
  • 提前停止:设置patience参数,当验证损失不再降低时提前停止训练。
  • 数据增强:利用augment参数增加训练数据的多样性。
  • 超参数调优:调整批次大小、优化器类型等超参数以提高模型性能。

5. 可视化界面

使用PyQt5设计用户界面,以便于测试和展示模型效果。

GUI设计
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QTextEdit
from PyQt5.QtGui import QPixmap
from ultralytics import YOLO

class PestDetectionApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("害虫检测系统")
        self.setGeometry(100, 100, 800, 600)

        self.initUI()

    def initUI(self):
        self.image_label = QLabel(self)
        self.image_label.setGeometry(50, 50, 600, 400)

        self.result_text = QTextEdit(self)
        self.result_text.setGeometry(700, 50, 300, 400)
        self.result_text.setReadOnly(True)

        self.open_button = QPushButton('打开图片', self)
        self.open_button.setGeometry(700, 500, 100, 30)
        self.open_button.clicked.connect(self.open_image)

        self.detect_button = QPushButton('检测', self)
        self.detect_button.setGeometry(810, 500, 100, 30)
        self.detect_button.clicked.connect(self.detect_objects)

        self.save_button = QPushButton('保存', self)
        self.save_button.setGeometry(920, 500, 100, 30)
        self.save_button.clicked.connect(self.save_results)

    def open_image(self):
        options = QFileDialog.Options()
        file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Image Files (*.png *.jpg *.jpeg)", options=options)
        if file_name:
            self.image_path = file_name
            self.load_image(file_name)

    def load_image(self, file_name):
        img = cv2.imread(file_name)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        h, w, ch = img.shape
        bytes_per_line = ch * w
        q_img = QImage(img.data, w, h, bytes_per_line, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(q_img)
        self.image_label.setPixmap(pixmap)

    def detect_objects(self):
        model = YOLO('./runs/detect/pest_detection/weights/best.pt')
        results = model.predict(source=self.image_path)
        img = cv2.imread(self.image_path)
        for result in results:
            boxes = result.boxes.numpy()
            for box in boxes:
                r = box.xyxy
                x1, y1, x2, y2 = int(r[0]), int(r[1]), int(r[2]), int(r[3])
                label_id = int(box.cls)
                label = result.names[label_id]
                confidence = box.conf
                if confidence > 0.5:  # 设置置信度阈值
                    cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)  # 绘制矩形框
                    cv2.putText(img, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
                    self.result_text.append(f"{label}: {confidence:.2f}, ({x1}, {y1}), ({x2}, {y2})")

        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        h, w, ch = img.shape
        bytes_per_line = ch * w
        q_img = QImage(img.data, w, h, bytes_per_line, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(q_img)
        self.image_label.setPixmap(pixmap)

    def save_results(self):
        options = QFileDialog.Options()
        file_name, _ = QFileDialog.getSaveFileName(self, "保存结果", "", "Text Files (*.txt)", options=options)
        if file_name:
            with open(file_name, 'w') as f:
                f.write(self.result_text.toPlainText())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = PestDetectionApp()
    ex.show()
    sys.exit(app.exec_())

6. 训练流程总结

  1. 数据集准备:确认数据集已按要求组织好,并创建data_pest.yaml
  2. 安装依赖:通过提供的命令安装所需的Python库。
  3. 训练模型:运行训练脚本开始训练过程,并根据实际情况进行模型优化。
  4. GUI设计:使用上述代码设计用户界面,用于展示模型的预测结果。
  5. 集成模型:将训练好的模型集成到GUI中,实现图像上传、目标检测和结果保存功能。

构建一个完整的基于YOLOv8的害虫检测系统,包括模型训练、优化以及可视化界面的开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值