基于yolov5_7.0 pyside6 active_learning 开发的人工智能主动学习外周血细胞目标检测系统

devtools/2024/10/20 18:41:16/

YOLOv5_0">基于YOLOv5的图像识别与主动学习应用程序

项目介绍

本项目是一个使用PySide6库开发的基于YOLOv5框架的图像识别应用程序。该应用程序不仅支持用户选择图像文件进行目标物体检测,还具备主动学习功能,允许用户手动标记错误的检测结果以优化模型。此外,应用程序支持切换不同的预训练模型,从而扩展了其应用范围。目前,主要使用的模型是biology.pt,这是一个通过YOLOv5框架和主动学习技术训练出来的外周血细胞检测模型,精度达到0.8,表现优秀。
在这里插入图片描述

运行环境

  • Python 3.12
  • OpenCV
  • Ultralytics YOLOv5
  • PySide6 (用于GUI开发)
  • 其他依赖项:请参考requirements.txt

安装依赖包:

pip install -r requirements.txt

运行方法

直接运行MainQt.py即可启动应用程序:

python MainQt.py

项目截图

(此处应插入项目界面截图)

功能区介绍

启动按钮 (Start Button)

  • 按钮名称: start_button
  • 功能: 用于启动某个过程或程序。

图片上传按钮 (Upload Image Button)

  • 按钮名称: upload_image_button
  • 功能: 允许用户上传图片文件,以便进行目标检测

模型上传按钮 (Upload PT Button)

  • 按钮名称: upload_pt_button
  • 功能: 用于上传模型文件,通常是PyTorch模型文件(如.pt文件)。默认情况下,系统会加载data/models/biology.pt模型,但用户也可以上传其他YOLOv5模型文件,例如yolov5m.pt,以支持对其他目标的识别。
    在这里插入图片描述

运行标签按钮 (Label Run Button)

  • 按钮名称: labelrun_button
  • 功能: 用于启动一个标记或分类过程。在本项目中,这个按钮可以用来显示当前模型对图片的检测结果。

主动学习运行按钮 (Active Run Button)

  • 按钮名称: activeRun_button
  • 功能: 用于激活或开始一个实时运行的过程。在这个过程中,用户可以看到模型的实时检测结果,并有机会手动修正错误的检测结果。

主动学习训练按钮 (Active Train Button)

  • 按钮名称: activeTrain_button
  • 功能: 用于启动模型的活跃训练阶段。用户可以通过手动标记的数据来进一步训练模型,提高其准确性和泛化能力。

导出模型按钮 (Export Button)

  • 按钮名称: export_button
  • 功能: 用于导出经过训练后的模型到文件。用户可以保存新的模型权重,以便在未来使用。

停止进程按钮 (Stop Button)

  • 按钮名称: stop_button
  • 功能: 用于停止当前运行的过程,无论是检测、训练还是其他任务。

关闭窗口按钮 (Close Button)

  • 按钮名称: close_button
  • 功能: 用于关闭应用程序或当前窗口。

代码实现

ui.py

ui.py文件定义了应用程序的用户界面。它使用PySide6库创建了一个主窗口,并设置了各个功能按钮及其布局。以下是ui.py的基本结构:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDialog, QLabel
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Qtclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("YOLOv5 Image Recognition with Active Learning")self.setGeometry(100, 100, 800, 600)self.central_widget = QWidget()self.setCentralWidget(self.central_widget)self.layout = QVBoxLayout()self.central_widget.setLayout(self.layout)# 创建按钮self.start_button = QPushButton("Start", self)self.upload_image_button = QPushButton("Upload Image", self)self.upload_pt_button = QPushButton("Upload PT", self)self.labelrun_button = QPushButton("Label Run", self)self.activeRun_button = QPushButton("Active Run", self)self.activeTrain_button = QPushButton("Active Train", self)self.export_button = QPushButton("Export Model", self)self.stop_button = QPushButton("Stop", self)self.close_button = QPushButton("Close", self)# 添加按钮到布局self.layout.addWidget(self.start_button)self.layout.addWidget(self.upload_image_button)self.layout.addWidget(self.upload_pt_button)self.layout.addWidget(self.labelrun_button)self.layout.addWidget(self.activeRun_button)self.layout.addWidget(self.activeTrain_button)self.layout.addWidget(self.export_button)self.layout.addWidget(self.stop_button)self.layout.addWidget(self.close_button)# 连接按钮信号到槽函数self.upload_image_button.clicked.connect(self.upload_image)self.upload_pt_button.clicked.connect(self.upload_model)self.close_button.clicked.connect(self.close)# 图像显示区域self.image_label = QLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.layout.addWidget(self.image_label)def upload_image(self):file_dialog = QFileDialog.getOpenFileName(self, "Select Image", "", "Image Files (*.png *.jpg *.jpeg)")if file_dialog[0]:self.image_path = file_dialog[0]pixmap = QPixmap(self.image_path)self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def upload_model(self):file_dialog = QFileDialog.getOpenFileName(self, "Select Model", "", "Model Files (*.pt)")if file_dialog[0]:self.model_path = file_dialog[0]print(f"Model uploaded: {self.model_path}")if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec())

MainQt.py

MainQt.py文件是应用程序的主入口点,负责初始化UI并处理各种逻辑操作。以下是MainQt.py的基本结构:

import sys
from ui import MainWindow
from ultralytics import YOLO
import cv2
import numpy as np
from PySide6.QtGui import QImage, QPixmapclass MainApp(MainWindow):def __init__(self):super().__init__()# 默认模型路径self.model_path = 'data/models/biology.pt'self.model = YOLO(self.model_path)# 连接按钮信号到槽函数self.start_button.clicked.connect(self.start_process)self.labelrun_button.clicked.connect(self.run_label)self.activeRun_button.clicked.connect(self.run_active)self.activeTrain_button.clicked.connect(self.train_active)self.export_button.clicked.connect(self.export_model)self.stop_button.clicked.connect(self.stop_process)def start_process(self):# 启动某个过程或程序print("Process started")def run_label(self):# 显示当前模型对图片的检测结果if hasattr(self, 'image_path'):results = self.model.predict(source=self.image_path)for result in results:boxes = result.boxes.xyxy.cpu().numpy()scores = result.boxes.conf.cpu().numpy()classes = result.boxes.cls.cpu().numpy()img = cv2.imread(self.image_path)for box, score, cls in zip(boxes, scores, classes):x1, y1, x2, y2 = map(int, box)cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)label = f"{result.names[int(cls)]} {score:.2f}"cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 将OpenCV图像转换为QImageh, w, ch = img.shapebytes_per_line = ch * wq_img = QImage(img.data, w, h, bytes_per_line, QImage.Format_RGB888).rgbSwapped()pixmap = QPixmap.fromImage(q_img)self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def run_active(self):# 启动主动学习过程print("Active learning process started")def train_active(self):# 启动主动学习训练print("Active training started")def export_model(self):# 导出模型print("Model exported")def stop_process(self):# 停止当前运行的过程print("Process stopped")if __name__ == "__main__":app = QApplication(sys.argv)main_app = MainApp()main_app.show()sys.exit(app.exec())

项目运行介绍

项目启动

  1. 确保已经安装了所有依赖项。
  2. 打开终端,导航到项目目录。
  3. 运行以下命令启动应用程序:
    python MainQt.py
    

使用说明

  1. 上传图片:点击“Upload Image”按钮,选择一张图片文件进行上传。上传后,图片将显示在界面上。
  2. 上传模型:点击“Upload PT”按钮,可以选择上传一个新的YOLOv5模型文件。默认情况下,系统会加载data/models/biology.pt模型。
  3. 运行标签:点击“Label Run”按钮,系统将使用当前加载的模型对上传的图片进行检测,并在界面上显示检测结果。
  4. 主动学习:点击“Active Run”按钮,启动主动学习过程。用户可以手动标记错误的检测结果。
  5. 主动学习训练:点击“Active Train”按钮,启动主动学习训练过程。用户可以通过手动标记的数据来优化模型。
  6. 导出模型:点击“Export Model”按钮,可以将经过训练后的模型导出到文件。
  7. 停止进程:点击“Stop”按钮,可以停止当前运行的过程。
  8. 关闭窗口:点击“Close”按钮,关闭应用程序。

注意事项

  • 目前摄像头功能尚未开发好,只能识别图片。
  • 对于视频识别,可以使用原生YOLOv5代码进行检测,但在Qt中实现可能会较慢,暂未考虑实现视频识别模块。
  • biology.pt模型是用商业数据训练出来的,暂不对外开放。对于一般的课设作业,可以删除run, label, train, export停止进程按钮,仅保留基本的图片检测功能。

总结

本项目提供了一个基于YOLOv5的图像识别与主动学习应用程序,用户可以通过该应用程序轻松地进行目标检测,并通过主动学习优化模型。虽然目前只支持图片检测,但其灵活性和可扩展性使其成为一个强大的工具,适用于多种应用场景。希望这篇文档能帮助您更好地理解和使用该项目。


http://www.ppmy.cn/devtools/127353.html

相关文章

【优选算法篇】编织算法的流动诗篇:滑动窗口的轻盈之美

文章目录 C 滑动窗口详解:基础题解与思维分析前言第一章:热身练习1.1 长度最小的子数组解法一(暴力求解)解法二(滑动窗口)滑动窗口的核心思想图解分析滑动窗口的有效性时间复杂度分析易错点提示 1.2 无重复…

【iOS】UICollectionView的使用方法

文章目录 前言UICollectionView什么是UICollectionViewUICollectionView的关键特性UICollectionView组成及常用方法组成常用方法 UiCollectionView的基本使用及代码示例 总结 前言 UICollectionView 是一个强大的 UIKit 组件,用于展示数据集合,比如图片、…

ESP32-C3实现定时器的启停(Arduino IDE)

1概述 ESP32-C3微控制器有多个定时器,这些定时器可用于各种用途,包括计时、生成PWM信号、测量输入信号的频率等。以下是ESP32-C3上可用的定时器资源: 两个硬件定时器: 定时器0:这是一个通用定时器,通常用于…

纯血鸿蒙!

纯血鸿蒙,这是哪个营销大师给起的名字啊! 纯血!象征着高贵、自信、自主、血性、英雄气概,都融入这纯血鸿蒙了! 鸿蒙本就是开天辟地,加上纯血,真是荡气回肠! 鸿蒙的推出背景 我们前…

P2-3与P2-4.【C语言基本数据类型、运算符和表达式】第三节与第四节

讲解视频: P2-3.【基本数据类型、运算符和表达式】第三节 P2-4.【基本数据类型、运算符和表达式】第四节 目录 必备知识与理论 任务实施 必备知识与理论 C语言中把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。 其运算符和表达式数量之多&a…

Gin框架操作指南12:完结篇

Gin框架的功能确实非常丰富,使用postman软件确实很方便,省去了自己写前端代码的过程。本文回顾2-11章的内容以及使用postman软件需要注意的细节。 指南2:JSON渲染。演示AsciiJSON JSONP PureJSON SecureJSON XML-JSON-YAML-ProtoBuf渲染。 …

《YOLO1》论文精读:第一次实现端到端的目标检测

You Only Look Once: Unified, Real-Time Object Detection论文地址Paperwithcode在目标检测的排名Github参考代码,100k个star 该论文最新由Facebook AI发表于2016年5月,截止现在2024年10月,引用数是52854次 文章目录 论文核心内容&#xff…

【Hive】4-HiveSQL 数据操控语言(DML)

HiveSQL 数据操控语言(DML) load加载数据 语法 -- 语法规则 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2...)] -- 语法规则(Hive 3.0及以后) LOAD DATA [LOC…