使用Yolov8训练使用蔬菜检测数据集 7400张 蔬菜12类检测 带标注 voc yolo 并实现可视化及评估蔬菜检测数据集 7400张 蔬菜12类检测 带标注 voc yolo分类名: (图片张数标注个数)cabbage: (2097 2842)potato:(9613224)onion: (3028 5610)egg:(15502871)garl ic:(12553346)carrot: (2282 4135)bell_ pepper :(23675343)beet :(563, 1379)tomato: (1574 3410)eggp lant:(16503821)zucchini: (936 1118)cucumber: (1310 3688)总数: (7483 40787)总类(nc): 12类好的我们将构建一个基于YOLOv8的蔬菜检测系统。以下是详细的步骤和代码示例并附带数据集中的标签及数量表格。数据集中的标签及数量表格分类名图片张数标注个数cabbage20972842potato9613224onion30285610egg15502871garlic12553346carrot22824135bell_pepper23675343beet5631379tomato15743410eggplant16503821zucchini9361118cucumber13103688总数748340787环境部署说明首先确保你已经安装了必要的库。以下是详细的环境部署步骤安装依赖# 创建虚拟环境可选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内容如下cabbage potato onion egg garlic carrot bell_pepper beet tomato eggplant zucchini cucumber每个图像对应的标签文件是一个文本文件每行表示一个边界框格式为class_id x_center y_center width height模型训练权重和指标可视化展示我们将使用YOLOv8进行训练并在训练过程中记录各种指标如F1曲线、准确率、召回率、损失曲线和混淆矩阵。训练脚本train_yolov8.py[titleTraining YOLOv8 on Vegetable 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: 12 names: [cabbage, potato, onion, egg, garlic, carrot, bell_pepper, beet, tomato, eggplant, zucchini, cucumber] 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,13,size100)# 0 to 12 (background or one of the vegetable types)predictionsnp.random.randint(0,13,size100)# 0 to 12 (background or one of the vegetable types)cmconfusion_matrix(true_labels,predictions,labelslist(range(13)))labels[Background,cabbage,potato,onion,egg,garlic,carrot,bell_pepper,beet,tomato,eggplant,zucchini,cucumber]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 Vegetable Detection]importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQImage,QPixmapfromultralyticsimportYOLOclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(Vegetable 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 产品动态
相关推荐
Java面试中JVM调优问题,这样回答直接拿offer 面试官推了推眼镜,抛出那个让无数Java程序员心跳加速的问题:“你们线上JVM是怎么调优的?”有人开始背参数,有人直接说“用默认的”,有人把Xmx和Xms念了一遍就没了下文。这个问题之所以难,不是因为它有多深奥… · 2026/9/27 23:01:26
bat 0.26.1 Windows x64 下载:ZIP文件与终端预览示例 bat 0.26.1 Windows x64 下载 官方发行页
本文整理 bat 0.26.1 的 Windows x64 MSVC 压缩包。备用入口经草料提示页进入夸克,点击“继续访问”后查看文件;实际登录与下载要求以页面为准。
文件信息
文件名:bat-v0.26.1-x86_64-pc-windows… · 2026/9/27 23:01:19
硬枫木儿童成品家具 环保上下床带护栏 上海柚至臻木制品销售门店 随着国内居民消费升级与健康家居意识觉醒,原木成品家具行业正迎来快速增长阶段,越来越多的家庭在装修选家具时,优先选择天然原木材质替代人工板材,尤其针对有孩童的家庭,对原木成品家具的环保性、安全性、实用性都提出… · 2026/9/27 23:01:19
VSCODE加ESP-IDF配置指南:ESP32开发环境搭建与调试 /* 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:31:02
Linux 上 WFDB 心电信号分析实战:从 wfdb.tar.gz 到 HRV 频域分析 /* 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:31:02
ESP32-S3 免驱 USB 摄像头实战:TinyUSB UVC 协议与 OV2640 图像传输 /* 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:56
建设的访问网站需要密码?3步搞定完整流程不慌 建设的访问网站需要密码?3步搞定完整流程不慌 自己不会代码想做网站,却卡在访问需要密码这一步,其实并非技术难题,而是流程认知偏差。很多新手误以为“密码”是技术壁垒,实则是权限配置缺失。本文拆解【建设的访问网站需要密码】背后的完整流程,从原理… · 2026/9/27 23:30:56
VMware虚拟机安全移除非系统磁盘完整指南 /* 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:56
青岛优化网站关键词实战:从模板站突围到精准获客 青岛优化网站关键词实战:从模板站突围到精准获客 别再说模板网站太丑了,更可怕的是它丑得连搜索引擎都懒得看。很多老板拿着网上几百块的模板站,问建站报价时觉得便宜,上线后发现排名为零,客户根本搜不到你。青岛这边做本地生意的特别多,从海鲜批发到工… · 2026/9/27 23:30:56
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