使用Yolov8训练使用 ——水污染水质检测数据集 2400张 4类 水污染 带标注 voc yolo 构建一个水污染数据集检测系统训练使用 ——水污染水质检测数据集 2400张 水污染 带标注 voc yololabel | pic num | box numclean: (587, 589)turbid: (587, 587)pollute: (746, 746)normal: (567, 567)total: (2487, 2489)构建一个基于YOLOv8的水污染水质检测系统。以下是详细的步骤和代码示例并附带数据集中的标签及数量表格。数据集中的标签及数量表格标签图片张数标注个数clean587589turbid587587pollute746746normal567567total24872489文章代码仅供参考环境部署说明首先确保你已经安装了必要的库。以下是详细的环境部署步骤安装依赖# 创建虚拟环境可选python-mvenv yolov8_envsourceyolov8_env/bin/activate# 在Windows上使用 yolov8_env\Scripts\activate# 安装PyTorchpipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117# 安装YOLOv8pipinstallultralytics# 安装其他依赖pipinstallpyqt5 matplotlib scikit-learn pandas opencv-python数据集准备假设你的数据集已经准备好并且是以VOC和YOLO格式存储的。我们将主要使用YOLO格式进行训练。数据集结构dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ └── ... │ └── val/ │ ├── img3.jpg │ ├── img4.jpg │ └── ... ├── labels/ │ ├── train/ │ ├── img1.txt │ ├── img2.txt │ └── ... │ └── val/ │ ├── img3.txt │ ├── img4.txt │ └── ... └── classes.txtclasses.txt内容如下clean turbid pollute normal每个图像对应的标签文件是一个文本文件每行表示一个边界框格式为class_id x_center y_center width height模型训练权重和指标可视化展示我们将使用YOLOv8进行训练并在训练过程中记录各种指标如F1曲线、准确率、召回率、损失曲线和混淆矩阵。训练脚本train_yolov8.py[titleTraining YOLOv8 on Water Quality Detection Dataset]fromultralyticsimportYOLOimportos# Define pathsdataset_pathpath/to/datasetweights_pathbest.pt# Create dataset.yamlyaml_contentf train:{os.path.join(dataset_path,images/train)}val:{os.path.join(dataset_path,images/val)}nc: 4 names: [clean, turbid, pollute, normal] withopen(os.path.join(dataset_path,dataset.yaml),w)asf:f.write(yaml_content)# Train YOLOv8modelYOLO(yolov8n.pt)# Load a pretrained model (recommended for training)resultsmodel.train(dataos.path.join(dataset_path,dataset.yaml),epochs100,imgsz640,saveTrue)# Save the best weightsmodel.export(formatpt)os.rename(runs/detect/train/weights/best.pt,weights_path)请将path/to/dataset替换为实际的数据集路径。指标可视化展示我们将编写代码来可视化训练过程中的各项指标包括F1曲线、准确率、召回率、损失曲线和混淆矩阵。可视化脚本visualize_metrics.py[titleVisualizing Training Metrics for YOLOv8]importosimportjsonimportmatplotlib.pyplotaspltimportseabornassnsimportnumpyasnpfromsklearn.metricsimportconfusion_matrix,ConfusionMatrixDisplay# Load metricsmetrics_pathruns/detect/train/metrics.jsonwithopen(metrics_path,r)asf:metricsjson.load(f)# Extract metricsloss[entry[loss]forentryinmetricsiflossinentry]precision[entry[metrics/precision(m)]forentryinmetricsifmetrics/precision(m)inentry]recall[entry[metrics/recall(m)]forentryinmetricsifmetrics/recall(m)inentry]f1[entry[metrics/mAP50(m)]forentryinmetricsifmetrics/mAP50(m)inentry]# Plot loss curveplt.figure(figsize(15,5))plt.subplot(1,3,1)plt.plot(loss,labelLoss)plt.xlabel(Epochs)plt.ylabel(Loss)plt.title(Training Loss Curve)plt.legend()# Plot precision and recall curvesplt.subplot(1,3,2)plt.plot(precision,labelPrecision)plt.plot(recall,labelRecall)plt.xlabel(Epochs)plt.ylabel(Score)plt.title(Precision and Recall Curves)plt.legend()# Plot F1 curveplt.subplot(1,3,3)plt.plot(f1,labelF1 Score)plt.xlabel(Epochs)plt.ylabel(F1 Score)plt.title(F1 Score Curve)plt.legend()plt.tight_layout()plt.show()# Confusion matrix# Assuming you have predictions and true labels# For demonstration, lets create some dummy datatrue_labelsnp.random.randint(0,5,size100)# 0 to 4 (background or one of the water quality types)predictionsnp.random.randint(0,5,size100)# 0 to 4 (background or one of the water quality types)cmconfusion_matrix(true_labels,predictions,labelslist(range(5)))labels[Background,clean,turbid,pollute,normal]dispConfusionMatrixDisplay(confusion_matrixcm,display_labelslabels)disp.plot(cmapplt.cm.Blues)plt.title(Confusion Matrix)plt.show()PyQt5设计的界面我们将使用PyQt5设计一个简单的GUI界面来进行模型预测。GUI代码gui_app.py[titlePyQt5 GUI for YOLOv8 Water Quality Detection]importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQImage,QPixmapfromultralyticsimportYOLOclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(Water Quality Detection)self.setGeometry(100,100,800,600)self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.predict_buttonQPushButton(Predict,self)self.predict_button.clicked.connect(self.predict)self.open_buttonQPushButton(Open Image,self)self.open_button.clicked.connect(self.open_image)layoutQVBoxLayout()layout.addWidget(self.image_label)layout.addWidget(self.open_button)layout.addWidget(self.predict_button)containerQWidget()container.setLayout(layout)self.setCentralWidget(container)self.modelYOLO(best.pt)defopen_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,QFileDialog.getOpenFileName(),,Images (*.png *.xpm *.jpg);;All Files (*),optionsoptions)iffile_name:self.image_pathfile_name pixmapQPixmap(file_name)self.image_label.setPixmap(pixmap.scaled(800,600))defpredict(self):ifnothasattr(self,image_path):QMessageBox.warning(self,Warning,Please open an image first.)returnimg0cv2.imread(self.image_path)# BGRassertimg0isnotNone,fImage Not Found{self.image_path}resultsself.model(img0,streamTrue)forresultinresults:boxesresult.boxes.cpu().numpy()forboxinboxes:rbox.xyxy[0].astype(int)clsint(box.cls[0])confbox.conf[0]labelf{self.model.names[cls]}{conf:.2f}color(0,255,0)# Greencv2.rectangle(img0,r[:2],r[2:],color,2)cv2.putText(img0,label,(r[0],r[1]-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)rgb_imagecv2.cvtColor(img0,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)self.image_label.setPixmap(pixmap.scaled(800,600))if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())算法原理介绍YOLOv8算法原理YOLOv8You Only Look Once version 8是一种实时目标检测算法其核心思想是在单个神经网络中同时预测边界框的位置和类别概率。YOLOv8相较于之前的版本在速度和准确性方面都有显著提升。主要特点统一架构YOLOv8采用统一的架构简化了模型的设计。高效的特征提取通过使用先进的卷积层和注意力机制提高特征提取的效率。改进的损失函数引入新的损失函数来优化边界框回归和分类任务。多尺度训练通过多尺度训练增强模型的泛化能力。自动数据增强集成自动数据增强技术减少对人工标注数据的依赖。工作流程输入图像将输入图像传递给YOLOv8模型。特征提取通过一系列卷积层提取图像特征。预测模型输出每个网格单元的边界框位置、置信度分数和类别概率。非极大值抑制NMS去除冗余的预测结果保留最佳的边界框。输出结果返回最终的目标检测结果。总结通过以上步骤我们可以构建一个完整的基于YOLOv8的水污染水质检测系统包括数据集准备、环境部署、模型训练、指标可视化展示和PyQt5界面设计。以下是所有相关的代码文件训练脚本(train_yolov8.py)指标可视化脚本(visualize_metrics.py)GUI应用代码(gui_app.py)
企业数字化 ERP 产品动态
相关推荐
3年踩坑经验:ps网页设计教程视频背后的建站报价陷阱 3年踩坑经验:ps网页设计教程视频背后的建站报价陷阱 找建站公司最怕什么?不是网站丑,而是 报价单里藏着无数个“坑” 。很多老板拿着 ps网页设计教程视频 里的效果去要求,结果收到的 建站报价… · 2026/9/27 23:00:43
Docker 网络深入:五种通信模式全解析 1. 引言
容器化技术已经成为现代应用交付的核心,而网络则是容器化架构中最容易让人困惑的部分之一。很多开发者能熟练地编写 Dockerfile、编排 docker-compose,但一旦遇到容器间通信失败、端口映射异常、跨主机互联等问题,往往只能靠重启和试… · 2026/9/27 23:00:37
ASP手机网站自动跳转性能优化实战指南 ASP手机网站自动跳转性能优化实战指南 自己不会代码想做网站,却卡在手机访问体验上?别急,ASP手机网站自动跳转的性能优化,其实没那么玄乎。很多新手一上来就堆代码,结果页面加载慢得让人想关掉。记住,跳转不是目的,流畅才是核心。今天我就把这套… · 2026/9/27 23:00:37
LabVIEW Vision Assistant 2024保姆级入门:工业视觉开发基座构建指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:50
无路由器也能组网:Linux下Ad-hoc/IBSS无线网络搭建与排障实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:50
GD32450Z USBHS内部PHY实现USB Host读写U盘与FatFs文件系统 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:50
SLVS-EC v2.0封包结构详解:ECC与CRC校验机制及FPGA调试实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:50
400个NES游戏资源包整理指南:分类、模拟器与优化 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:43
Vivado CORDIC IP核算sin/cos三大坑:相位格式、输出定标与时序握手 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:43
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01