ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Yolov8训练水污染水质检测数据集 2400张 4类 水污染 带标注 voc yolo 构建一个水污染数据集检测系统

Yolov8训练水污染水质检测数据集 2400张 4类 水污染 带标注 voc yolo 构建一个水污染数据集检测系统 使用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)
返回列表