摘要:面向果蔬分级与冷链质检场景,构建可靠的番茄新鲜程度检测系统具有重要的工程价值。本篇博客围绕YOLOv5 至 YOLOv12 的代际升级脉络,给出一套可复现实验与可直接部署的番茄新鲜度检测方案:在算法侧,系统以 YOLO 系列为核心检测器,对不同版本(含轻量化变体)在同一数据集与统一训练设定下进行对比评估,并结合任务特点给出推理后处理与阈值控制策略,使输出同时包含类别(新鲜度等级)、置信度、目标框与统计汇总;在数据侧,老思构建并标注了面向番茄新鲜度的专用数据集,提供清晰的预处理与划分规范,便于复现与扩展;在系统侧,使用 PySide6 完成桌面端可视化工具,支持图片/文件夹/视频/摄像头多源输入,提供检测结果叠加显示、类别统计、Conf/IOU 调节、结果导出与日志记录等功能,并通过 SQLite 实现注册登录、用户配置与历史结果的持久化管理。文末附完整代码、界面工程与数据集资源包,便于读者快速复现、二次开发与工程落地。
完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件请见项目介绍及功能演示视频处给出:➷➷➷
项目介绍地址:https://my.feishu.cn/wiki/BsZhwYAMviR4rIkUM3ac06w3n6b
功能效果展示视频:YOLOv5至YOLOv12升级:番茄新鲜程度检测系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
@
- 1. 前言综述
- 2. 数据集介绍
- 3. 模型设计与实现
- 4. 训练策略与模型优化
- 5. 实验与结果分析
- 5.1 实验设置与对比基线
- 5.2 度量指标与阈值选择
- 5.3 训练收敛性与单模型表现
- 6. 系统设计与实现
- 6.1 系统设计思路
- 6.2 登录与账户管理
- 7. 下载链接
- 8. 参考文献(GB/T 7714)
➷点击跳转至文末所有涉及的完整代码文件下载页☇
1. 前言综述
番茄作为高消费、高周转的生鲜品类,其在采后分级、仓储与流通环节的品质衰减会直接放大供应链损耗并推高终端成本,因此对“新鲜程度”的在线、无损、可追溯检测具备明确的经济价值与管理意义。1 (Food Security Portal)
在工程实践中,基于可见光成像的计算机视觉方案由于硬件成本低、易部署、可与产线节拍耦合而成为主流,但在复杂光照、遮挡与表面微小纹理差异条件下,要稳定映射“新鲜”这一细粒度语义仍存在明显不确定性。2 (ScienceDirect)
围绕果蔬品质与分级的研究已从传统的颜色直方图、纹理算子与浅层分类器逐步转向端到端深度网络,其中卷积特征在跨批次、跨场景的鲁棒表征方面显著优于手工特征,这为番茄新鲜度检测提供了更可行的建模基础。3 (spkx.net.cn)
除可见光外,近红外/高光谱成像通过谱段信息对硬度、可溶性固形物等指标的响应,为“新鲜—变质”连续变化提供了更强的物理可解释性,但其设备成本与采集复杂度也使其更常见于实验室与小规模抽检场景。4 (ScienceDirect)
表1汇总了番茄成熟/新鲜相关的代表性工作与检测范式演进,并将其与YOLO家族关键节点对应起来,以便后续在“YOLOv5至YOLOv12升级”的脉络下讨论速度—精度—部署三者的系统级权衡。
表1 相关研究与YOLO系列演进概览(含数据场景、方法要点与局限)
| 代表性工作 | 任务与数据场景 | 方法要点 | 优点 | 局限与启示 |
|---|---|---|---|---|
| 刘洋等(2024)5 (Zgnyqx) | 温室遮挡、光照不均、番茄成熟度在线检测 | 在YOLOv5骨干引入ECA注意力、Neck用BiFPN替换PAFPN,并增加小目标检测分支 | 兼顾精度与实时性,报告mAP与F1均较高且推理毫秒级 | 更偏“成熟度”而非“新鲜度”,但对遮挡与小目标的处理思路可迁移到新鲜度分级 |
| Zeng等(2023)6 (ScienceDirect) | 自建数据集,番茄定位与成熟度识别,并面向手机端部署 | 以YOLOv5为基线,替换Focus与骨干为轻量模块、剪枝与超参优化,量化后部署Android | 量化与端侧吞吐给出可复现工程路径 | 端侧速度受算子与推理框架影响明显,提示后续需关注结构设计与部署友好性的一致性 |
| Ren等(2015)7 (NeurIPS Papers) | 通用检测基线(VOC/COCO等) | 两阶段RPN+RoI分类回归 | 精度上限高、定位稳定 | 端到端实时性与工程部署成本较高,难匹配产线/端侧节拍 |
| Redmon等(2016)8 (Hugging Face) | 通用实时检测(VOC/COCO等) | 单阶段统一回归检测框与类别 | 推理路径短、实时性强 | 对细粒度类别差异易受数据分布与标注一致性影响,需配合数据与损失设计 |
| Li等(2022)9 (arXiv) | 工业场景导向的多尺度检测(COCO基准) | 面向部署的结构与训练/量化策略系统化梳理,强调速度—精度可控 | 更贴近产业部署约束 | 为YOLOv5之后的“工程化升级路线”提供了可借鉴范式 |
| Wang等(2023)10 (CVF Open Access) | 通用实时检测(COCO基准) | 引入可训练的“bag-of-freebies”等策略提升实时检测上限 | 兼顾速度与精度的里程碑版本 | 对领域数据(如番茄新鲜度)仍需域内数据增强与类间边界重标定 |
| Jocher等(2024,Ultralytics)11 (Zenodo) | 工程生态(训练、导出、部署)与多任务扩展 | 围绕YOLOv8生态的持续迭代与工具链完善 | 训练与部署链路成熟,利于快速验证 | 算法收益需在“端侧算力—模型结构—数据质量”三者耦合下评估 |
| Wang等(2024)12 (Springer) | 通用检测(ECCV体系与COCO基准) | 提出PGI与GELAN以缓解信息瓶颈并优化梯度传递 | 强调训练与结构的可编程性 | 对细粒度新鲜度任务,提示可从梯度路径与特征保真角度设计改进 |
从“番茄新鲜程度检测”这一任务本身看,难点并不止于把目标框出来,更在于新鲜度往往呈现为颜色轻微漂移、表皮失水皱缩、局部霉斑/压伤等细粒度线索,类间差异小而类内差异大,导致标注边界主观性强且易出现“同图不同标”的噪声;此外,多果遮挡、反光与光源色温漂移会显著破坏基于颜色与局部纹理的判别稳定性,使得模型需要同时具备强表征能力与对域偏移的鲁棒性。为将检测能力真正落到产线与端侧设备,后处理与部署链路同样关键,其中以NMS为中心的传统推理流程会引入不可忽视的时延与工程复杂度,这也是近年来“端到端、NMS-free”方向受到重视的重要原因。13 (NeurIPS Proceedings)
在Ultralytics生态中,YOLO11被作为对YOLOv8的体系化更新而纳入默认模型序列,其意义不仅在于结构层面的调整,也在于训练、导出与多任务接口的一致性增强,为快速落地行业应用提供了更稳定的软件工程支撑。14 (Zenodo)
进一步地,YOLOv12以注意力机制为中心重构实时检测框架,试图在保持推理速度的同时提升全局建模能力,这为“新鲜度”这类依赖弱纹理与长程依赖线索的细粒度任务提供了新的结构可能性。15 (arXiv)
本文后续章节中,老思将以“番茄新鲜程度检测系统”为落点,系统化对比YOLOv5至YOLOv12在同一自建数据集上的检测与分级效果,并围绕小目标与细粒度特征保真对基线进行针对性改进;同时给出包含数据集组织、训练配置、推理部署与PySide6图形界面的完整工程实现,形成可复现实验与可直接运行的项目资源包。
主要功能演示:
(1)启动与登录:系统启动后首先进入登录界面,用户可选择注册新账号或使用既有账号登录;登录成功后从 SQLite 读取该用户的历史检测记录与个性化配置(如上次选择的模型、阈值、主题样式等),随后自动跳转至主界面,使检测流程与数据持久化在同一入口闭环完成。

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):主界面提供四类输入源切换,分别面向在线质检与离线复核。摄像头模式以帧流方式推理并实时渲染检测框、类别与置信度;视频模式支持播放控制与逐帧检测;图片模式用于单张快速复核;文件夹模式面向批量图片的自动遍历推理,并同步输出统计汇总与结果导出,便于做抽检报表或数据回流。

(3)模型选择与对比演示:系统内置 YOLOv5–YOLOv12 的多版本权重管理与一键切换机制,用户可在同一输入源上快速对比不同模型的检测结果、推理速度与误检/漏检表现;在对比演示中,界面同步展示当前模型名称、推理耗时与类别统计,使“算法升级带来的收益”以可视化方式呈现,便于选取更适合部署场景的模型配置。

(4)主题修改功能:为适配不同使用环境(强光车间、暗光仓库、演示投屏等),系统提供主题快速切换与细粒度外观自定义,支持一键更换整体配色与背景,并允许对图标、字体颜色与关键控件样式进行调整;主题配置与用户账号绑定,切换账号即可恢复其专属界面风格,保证多用户共用设备时的交互一致性。

2. 数据集介绍
本项目面向“番茄新鲜程度(品质状态)”的检测与分级,采用目标检测的建模方式:在图像中定位番茄目标,同时输出其对应的新鲜度类别。数据集共 8,931 张图像,覆盖了室内布面/纸面等常见采集背景、自然光与局部阴影、轻微反光与模糊等真实扰动;从你给出的训练可视化样例(如 train_batch0 拼图)可以看到,目标以单果为主,尺度变化明显,部分样本存在遮挡与边缘截断,这类情况会直接影响小目标与边缘框的回归稳定性。标注采用 YOLO 系列通用的 TXT 归一化格式(cls, x_center, y_center, w, h),便于在 YOLOv5–YOLOv12 的不同实现之间复用同一套数据与评测脚本,从而保证“代际升级对比”的可重复性。

Chinese_name = {"0": "0", "1": "1", "Fresh Tomato": "新鲜番茄", "Rotten Tomato": "腐烂番茄", "object": "物体"}
从标签统计图可见,类别实例数量存在一定不均衡:Red 与 damaged 明显多于 Green,这会使模型在训练早期更倾向于学习高频类别的判别边界;同时,目标框中心分布在 \((x,y)\approx(0.5,0.5)\) 附近更为密集,说明样本具有“居中拍摄”的采集偏置,若不通过随机平移、尺度扰动、Mosaic 等增强去打散该先验,模型在部署到更复杂的产线视角时可能出现泛化波动。基于上述特征,老思在后续训练策略中会明确引入与“中心偏置、类不均衡”相匹配的增强与采样/损失设定,使得 YOLOv5–YOLOv12 的对比更贴近实际可部署条件。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg(或同类矩形框工具,导出为 YOLO 格式) |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 6,238 张(约 69.85%) |
| 验证集 (Val) | 1,795 张(约 20.10%) | |
| 测试集 (Test) | 898 张(约 10.05%) | |
| 总计 (Total) | 8,931 张 | |
| 类别清单 | Class ID: 0 | Green(青果/未熟) |
| Class ID: 1 | Red(红熟/可售新鲜) |
|
| Class ID: 2 | damaged(腐烂/损伤) |
|
| 图像规格 | 输入尺寸 | 640 * 640(训练阶段 LetterBox 对齐) |
| 数据来源 | 实地采集为主(室内背景+不同光照),人工清洗后划分 |
3. 模型设计与实现
本系统的核心任务是对输入图像中的番茄目标进行定位,并输出其“新鲜程度”对应的类别标签。结合你当前数据集的标注体系,老思将新鲜度分级落在一个更工程化的三类空间:Green(青果/未熟)、Red(红熟/可售新鲜)、damaged(腐烂/损伤)。在这一设定下,模型的输出不仅要给出类别,还必须保证框回归的稳定性,因为在文件夹批处理与视频流场景中,检测框的抖动会直接放大统计误差与用户感知的“闪烁”。因此,模型设计的主线并不是单纯追求更高的 mAP,而是在“细粒度判别线索(色泽、皱缩、霉斑、压伤)”与“实时推理约束”之间维持可解释、可复现的平衡。
从架构选型角度,YOLOv5–YOLOv12 的升级可以理解为三条技术脉络的叠加:其一是 Backbone/Neck 的特征提取与跨尺度融合持续增强;其二是检测头从早期较为耦合的预测形式逐步走向更明确的分类/回归解耦,并在 Ultralytics 体系中发展出 anchor-free 的实现;其三是为降低推理复杂度、提升吞吐而不断弱化对手工后处理(例如传统 NMS 依赖)的路径长度。以 YOLOv5 为例,其典型结构可概括为 Backbone(CSPDarknet)+ Neck(SPPF 与 PAN)+ Head(多尺度检测头),对多尺度小目标友好,工程实现成熟,适合作为“升级对比”的 anchor 基线。网络整体结构示意如下图所示(下载链接见下)。(Ultralytics Docs)
YOLOv12 则把架构重心进一步推向注意力机制:通过 Area Attention 以较低的代价引入更大的有效感受野,并用 R-ELAN 缓解注意力模型在训练优化上的不稳定,使其在实时检测框架内保持可用的速度上界;其关键模块对比图与 R-ELAN 结构示意如下图所示(下载链接见下)。(ar5iv)
- YOLOv5 结构示意图(Backbone/Neck/Head):

在任务建模上,番茄新鲜度检测被实现为标准的多类目标检测:对每个候选目标输出边界框 \(b=(x,y,w,h)\) 与类别概率 \(p\in\mathbb{R}^C\)(此处 \(C=3\))。训练目标通常采用“分类损失 + 回归损失”的加权形式,可写为
其中 YOLOv5 的回归项常以 IoU 系列损失为主,分类与置信度项常采用 BCE 形式;例如 CIoU 的表达可写为
\(\rho^2(\cdot)\) 表示中心点距离,\(d\) 为最小外接框对角线长度,\(v\) 刻画长宽比一致性,\(\alpha\) 为权衡系数。这里的关键点在于:对番茄这类外观近似椭圆、且类别差异更多来自表面细节的目标,稳定的 IoU 回归会显著影响后续“按类别统计”的可信度。(Ultralytics Docs)
在 Ultralytics 的较新实现中(如 YOLOv8 系列及之后的生态),检测头进一步强调 anchor-free 的预测方式与更清晰的分类/回归组织形式,从而在相同输入尺寸下取得更好的速度—精度折中,这也是本系统将 YOLOv12n 作为默认主模型、同时保留 YOLOv5n–YOLOv11n 作为对比项的直接原因。(Ultralytics Docs)
工程实现方面,为了在同一套 PySide6 界面中无缝切换 YOLOv5–YOLOv12,老思采用“统一 Detector 抽象层”的方式屏蔽不同仓库/不同 API 的差异:外部只暴露 load(weights)、predict(frame, conf, iou) 与 render() 三个核心接口;内部根据权重来源自动选择推理后端(Ultralytics YOLO() 或兼容的 PyTorch 推理封装),并把预处理固定为 LetterBox 到 \(640\times640\)、归一化与通道变换,确保不同模型的对比来自结构差异而非数据管线差异。下面给出该抽象层最小可复用的伪代码骨架(后续在“系统设计与实现”会把与信号槽、线程、视频流解码的衔接写全):
class Detector:def __init__(self, device="cuda:0"):self.device = deviceself.model = Noneself.backend = None # "ultralytics" / "yolov5" / "custom"def load(self, weights_path: str):suffix = weights_path.lower().split(".")[-1]# 简化逻辑:优先走 Ultralytics 统一入口(v8/v10/v11/v12 等)from ultralytics import YOLOtry:self.model = YOLO(weights_path)self.backend = "ultralytics"returnexcept Exception:pass# 若需要兼容 v5/v6/v7/v9 的独立仓库,这里再分流到对应加载器raise RuntimeError(f"Unsupported weights: {weights_path}")def predict(self, frame_bgr, conf=0.25, iou=0.7, imgsz=640):if self.backend == "ultralytics":results = self.model.predict(source=frame_bgr, imgsz=imgsz, conf=conf, iou=iou, verbose=False)return results[0] # 单帧结果raise RuntimeError("Model not loaded")def to_ui_format(self, result):# 统一导出:bbox + cls + score + 统计# boxes: xyxy, cls, confpass
以上设计的目的很直接:一方面把“模型差异”限制在网络与训练策略本身,避免评测时被杂散的预处理与后处理细节污染;另一方面把推理输出规整为 UI 友好的数据结构,从而支持“摄像头/视频/图片/文件夹”的多源输入与同一套渲染逻辑。至于 YOLOv12 引入注意力模块后可能出现的显存压力与 CPU 吞吐波动,系统会在加载阶段记录模型元信息(参数量、输入尺寸、推理耗时),并在界面层以状态栏与对比面板反馈给用户,确保部署侧可以基于硬件约束做出可解释的模型选择。(Ultralytics Docs)1
4. 训练策略与模型优化
为保证 YOLOv5–YOLOv12 的公平对比与工程可复现性,老思将训练过程统一到同一数据管线与同一评测口径:输入端采用 LetterBox 将图像缩放到 \(640\times 640\),并保持标注框在归一化坐标系下的一致性;训练过程中固定随机种子与数据划分,确保不同模型的性能差异主要来自结构与训练范式本身,而不是数据采样波动。硬件侧默认使用单卡 RTX 4090,以混合精度(AMP)提升吞吐并控制显存占用;日志与指标(loss、mAP、F1、PR 等)按 epoch 持续记录,验证集表现采用“最佳权重”策略进行选择,从而避免仅以最后一轮权重做结论带来的偶然性偏差。
针对番茄新鲜度分级的视觉特性,本任务更依赖细粒度纹理与轻微色泽变化,且你提供的标签统计显示类别存在不均衡、目标中心分布具有“居中拍摄”偏置。为此,训练阶段在不过度破坏语义的前提下引入颜色空间扰动(HSV/亮度对比度)、随机缩放与平移、水平翻转,以及 Mosaic/MixUp 等增强以打散中心先验并提升遮挡鲁棒性;同时在训练后期关闭 Mosaic(close_mosaic)以减轻“拼接伪边界”对精细回归的干扰,使收敛阶段更贴近真实图像分布。类别不均衡方面,优先通过数据侧的重采样与增强覆盖来缓解,并配合损失端的适度正则化(如标签平滑、权重衰减)抑制对高频类的过拟合倾向;推理侧再通过阈值与 NMS/后处理参数的联动调节,减少 damaged 类在复杂光照下的误检扩散。
迁移学习是本系统稳定训练的关键一环。各版本模型均以公开预训练权重作为初始化,在番茄数据集上进行微调:训练初期保持较大的学习率预热(warmup),让检测头与高层语义先快速适配新任务;进入稳定阶段后采用余弦退火或等价的分段衰减,使梯度更新逐步收敛到更细的判别边界。对于轻量模型(如 n/tiny 级别),老思建议优先保证输入分辨率与增强策略一致,再根据验证集的漏检模式微调置信度阈值与 IoU 阈值,而不是过早追求复杂结构改造;这是因为细粒度类别的主要瓶颈往往来自数据分布与标注一致性,过强的结构扰动反而可能扩大训练不稳定性。若需面向端侧部署,则在获得最优权重后进一步进行导出与推理优化(ONNX/TensorRT),并以同一段视频/同一批文件夹样本做端到端回归测试,确认精度与速度在目标设备上同时可达。
下面给出本文默认采用的一组训练超参数配置(你未额外指定时按此执行),其设计目标是兼顾收敛稳定性与对比公平性,便于在 YOLOv5–YOLOv12 的多版本实验中直接复用。
| 名称 | 作用(简述) | 数值 |
|---|---|---|
| epochs | 最大训练轮数 | 120 |
| patience | 早停耐心(验证无提升则停止) | 50 |
| batch | 批大小 | 16 |
| imgsz | 输入分辨率 | 640 |
| pretrained | 加载预训练权重 | true |
| optimizer | 优化器(框架自动选择) | auto |
| lr0 | 初始学习率 | 0.01 |
| lrf | 最终学习率占比 | 0.01 |
| momentum | 动量系数 | 0.937 |
| weight_decay | 权重衰减 | 0.0005 |
| warmup_epochs | 预热轮数 | 3.0 |
| mosaic | Mosaic 强度/概率 | 1.0 |
| close_mosaic | 后期关闭 Mosaic 的轮数 | 10 |
如果你希望这一节进一步“贴合真实复现”,把你实际训练时的:框架版本(Ultralytics/YOLOv5仓库)、具体数据增强开关(hsv、flip、mixup 等)、以及最终选择的 conf/iou 推理阈值发我,老思可以把“默认策略”改写为“项目实参级”的训练流程描述,并把每个策略与后续结果差异更紧密地对应起来。
5. 实验与结果分析
5.1 实验设置与对比基线
本节围绕“番茄新鲜程度三分类检测”(Green/Red/damaged)开展对比实验,所有模型均在同一数据划分(Train 6238 / Val 1795 / Test 898)、同一输入尺寸(\(640\times640\))与一致的训练策略(预训练初始化、统一增强与评测脚本)下训练与评估,从而将差异尽可能归因于网络结构与训练范式本身。对比基线覆盖 YOLOv5 至 YOLOv12 的轻量化序列,其中 n 系列包含 YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n,s 系列包含 YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s。需要说明的是,本节“毫秒级时延”来自实验日志记录的平台信息(RTX 3070 Laptop GPU, 8GB),用于横向比较不同模型的相对快慢;若迁移到更高算力平台(如 4090),绝对时延会整体降低,但相对趋势通常保持一致。
5.2 度量指标与阈值选择
本任务采用 Precision、Recall、\(F_1\)、mAP@0.5(记作 mAP50)与 mAP@0.5:0.95(记作 mAP50-95)作为核心指标,其中
并通过 PR 曲线刻画“召回提升带来的精度折损”。由于部署端需要一个默认置信度阈值(conf)以平衡漏检与误检,老思以验证/测试集上的 F1-Confidence 曲线确定推荐阈值区间。
【图5-1】F1-Confidence Curve

从图5-1可见,整体 \(F_1\) 在较宽的阈值区间内维持平台,最佳点出现在 conf≈0.511,对应 all classes \(F_1\approx0.81\);当 conf 接近 1.0 时,\(F_1\) 迅速坍塌,反映出高阈值会导致召回急剧下降。分类别曲线还提示 Red 的 \(F_1\) 长期低于 Green 与 damaged,说明红熟番茄在外观变化(光照、色温、反光)与类间边界(与轻度损伤/阴影的混淆)上更容易触发误检或漏检,这一点在 PR 结果中会进一步体现。
【图5-2】Precision-Recall Curve

图5-2给出了分类别 PR 曲线与 mAP50:整体 mAP@0.5≈0.913,其中 damaged 与 Green 的 AP 分别约为 0.939 与 0.930,而 Red 约为 0.870。这一差异与图5-1相一致,表明当前数据分布下“红熟”更像一个受光照与拍摄条件影响显著的类别,建议在后续数据迭代中增加红熟在不同色温、不同曝光与不同背景下的覆盖,并对“轻度损伤但整体偏红”的样本进行更一致的标注约束,以收敛类间边界。
5.3 训练收敛性与单模型表现
为了观察训练过程是否稳定、是否存在过拟合迹象,老思对代表性训练日志的损失与指标曲线进行分析。
【图5-3】训练过程曲线

由图5-3可见,train/box_loss、train/cls_loss 与 train/dfl_loss 在前若干 epoch 快速下降并逐步趋稳,验证集对应损失同步收敛,说明优化过程整体稳定;metrics/mAP50(B) 在早期迅速爬升并在后期进入平台区间,metrics/mAP50-95(B) 稳定在约 0.8 左右,体现出在 IoU 更严格时定位精度仍有提升空间。结合 precision 与 recall 的走势可以看到,本任务更容易取得较高 recall,而 precision 相对偏低,这与“新鲜度/损伤”类任务中轻微纹理与反光造成的假阳性更常见相吻合,也解释了为何阈值选择对最终 \(F_1\) 的影响较为敏感。
在系统部署中,真正影响模型选择的往往不是单一指标,而是精度、泛化与时延之间的权衡。为此,本节给出 n、s 两条序列在同一测试集上的指标与速度统计(TotalTime 为预处理+推理+后处理总耗时,单位 ms)。
表5-1 n 系列多模型对比(测试集)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | TotalTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 7.73 | 10.94 | 0.749 | 0.893 | 0.814 | 0.909 | 0.833 |
| YOLOv6n | 4.3 | 11.1 | 6.78 | 10.34 | 0.725 | 0.939 | 0.818 | 0.906 | 0.834 |
| YOLOv7-tiny | 6.2 | 13.8 | 14.74 | 21.08 | 0.744 | 0.908 | 0.818 | 0.904 | 0.798 |
| YOLOv8n | 3.2 | 8.7 | 6.83 | 10.17 | 0.755 | 0.859 | 0.804 | 0.902 | 0.833 |
| YOLOv9t | 2.0 | 7.7 | 16.51 | 19.67 | 0.706 | 0.955 | 0.812 | 0.906 | 0.835 |
| YOLOv10n | 2.3 | 6.7 | 11.24 | 13.95 | 0.760 | 0.869 | 0.811 | 0.902 | 0.832 |
| YOLOv11n | 2.6 | 6.5 | 9.44 | 12.97 | 0.730 | 0.914 | 0.812 | 0.911 | 0.836 |
| YOLOv12n | 2.6 | 6.5 | 12.47 | 15.75 | 0.768 | 0.863 | 0.813 | 0.914 | 0.840 |
表5-2 s 系列多模型对比(测试集)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | TotalTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 8.45 | 12.24 | 0.758 | 0.866 | 0.809 | 0.900 | 0.829 |
| YOLOv6s | 17.2 | 44.2 | 8.59 | 12.26 | 0.743 | 0.894 | 0.812 | 0.908 | 0.837 |
| YOLOv7 | 36.9 | 104.7 | 23.62 | 29.52 | 0.731 | 0.832 | 0.778 | 0.869 | 0.774 |
| YOLOv8s | 11.2 | 28.6 | 7.66 | 11.39 | 0.743 | 0.920 | 0.822 | 0.902 | 0.832 |
| YOLOv9s | 7.2 | 26.7 | 18.66 | 22.17 | 0.717 | 0.924 | 0.807 | 0.902 | 0.831 |
| YOLOv10s | 7.2 | 21.6 | 11.38 | 14.19 | 0.732 | 0.917 | 0.814 | 0.906 | 0.833 |
| YOLOv11s | 9.4 | 21.5 | 9.74 | 13.47 | 0.712 | 0.908 | 0.798 | 0.909 | 0.838 |
| YOLOv12s | 9.3 | 21.4 | 13.23 | 16.74 | 0.787 | 0.838 | 0.812 | 0.913 | 0.842 |
为了更直观展示“精度与效率”的横向差异,老思将两条序列的核心指标绘制为柱状对比图。
【图5-4】n_type:F1 & mAP50 对比

结合表5-1与图5-4,n 系列中 YOLOv12n 的 mAP50=0.914、mAP50-95=0.840 为最高,相对 YOLOv8n 的 mAP50 提升约 0.012;但其 TotalTime 约提升 55%,反映出注意力增强与更复杂头部设计在当前平台上带来可见的时延代价。若部署目标偏向“尽量不漏检”(高 recall),YOLOv6n 的 recall 达到 0.939,且总时延接近最优;若目标偏向“更稳的综合精度上限”,YOLOv11n/YOLOv12n 更合适。
【图5-5】n_type:mAP50(B)-Epoch 收敛曲线

图5-5展示了不同 n 系列模型在训练早期的收敛差异:多数模型在前 10–20 个 epoch 即进入高 mAP 区间,说明该数据集的可分性较强;但部分模型在初期存在更明显的波动,提示其对 warmup、增强强度或优化器超参更敏感。对于需要“快速复现、稳定训练”的工程场景,这类曲线形态往往比最终 0.00x 量级的 mAP 差异更具参考价值。
【图5-6】s_type:F1 & mAP50 对比

在 s 系列中,表5-2与图5-6显示 YOLOv8s 的 F1=0.822 为最高,且 TotalTime=11.39 ms 为该组最快,呈现出较好的工程性价比;而 YOLOv12s 的 mAP50=0.913、mAP50-95=0.842 为最高,但总时延上升更明显,适合离线质检或对误检更敏感的场景。值得注意的是,s 系列相对 n 系列并未带来同等比例的精度增益,说明在当前数据规模与标注噪声水平下,性能可能更受数据分布与类间边界约束,而非单纯受模型容量限制。
【图5-7】s_type:平均 PR 曲线

图5-7中,s 系列整体也表现为“早期快速收敛、后期平台稳定”的形态,但不同模型在早期的震荡幅度差异更大,这通常与更高容量模型对增强策略、学习率与正则化的敏感性有关。对 UI 实时应用而言,训练阶段的稳定性与最终推理时延同样重要,因此老思在系统默认模型上更倾向于优先选择收敛曲线更平滑、速度更可控的配置。
6. 系统设计与实现
6.1 系统设计思路
本系统以“可复现实验结果、可交互的桌面端部署、可持续的数据回流”为目标,在工程上采用分层解耦的组织方式:界面层由 Ui_MainWindow 承载控件布局与样式,控制层以 MainWindow 作为中枢完成状态机管理、槽函数调度与跨模块编排,处理层以 Detector 统一封装 YOLOv5–YOLOv12 的权重加载、推理与后处理。老思在实现中强调“面向接口编程”,即界面只关心标准化输出(检测框、类别、置信度、统计与耗时),从而允许在不改 UI 的前提下切换不同 YOLO 版本、不同导出格式(PyTorch/ONNX/TensorRT)与不同输入源。

为了保证交互流畅,系统将视频流解码与模型推理解耦:摄像头/视频采用独立工作线程持续读取帧,并通过 Qt 信号槽把帧数据投递给推理线程;推理线程完成预处理(LetterBox、归一化、张量化)、前向推理与后处理(阈值过滤、NMS 或等价策略、标签映射与计数),再把结果回传给主线程渲染。该设计避免了耗时算子阻塞 GUI 事件循环,使得播放控制、阈值滑条、模型切换与主题切换等操作不会出现明显卡顿,同时也便于对推理耗时进行更细粒度的统计与显示。
在数据持久化层面,SQLite 被用于实现账户体系与结果管理:用户表保存账号与密码哈希,配置表保存每个用户的主题、阈值与最近使用模型等偏好,结果表记录检测时间、输入源信息、类别统计、导出路径等元数据。这样做的直接收益是“个性化空间”的稳定落地:同一台设备多用户共用时,每次登录都能恢复到各自的工作状态,并把检测结果形成可追溯的历史记录,为后续数据清洗、再标注与模型迭代提供闭环。
图 系统流程图

图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。
6.2 登录与账户管理

图注:账户模块以 SQLite 为中心完成注册、登录校验、配置恢复与历史追溯,并与主检测流程通过“进入主界面/注销返回”形成稳定衔接。
登录与账户管理并非附加功能,而是保证系统可长期使用的基础设施:系统在登录成功后即刻从 SQLite 恢复该用户的主题风格、阈值参数与最近一次选择的 YOLO 权重,使得用户进入主界面时处于“可直接检测”的就绪状态;检测过程中产生的结果与导出记录按用户隔离写入数据库,从而实现多用户共用设备时的个性化空间与数据持久化,避免配置丢失与结果混淆,并为后续的样本回流、误检复核与模型迭代提供可靠的可追溯链路。

7. 下载链接
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件请见项目介绍及功能演示视频处给出:➷➷➷
项目介绍地址:https://my.feishu.cn/wiki/BsZhwYAMviR4rIkUM3ac06w3n6b
功能效果展示视频:YOLOv5至YOLOv12升级:番茄新鲜程度检测系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献(GB/T 7714)
1 FAO. The State of Food and Agriculture 2019: Moving forward on food loss and waste reduction [R]. Rome: Food and Agriculture Organization of the United Nations, 2019. (Food Security Portal)
2 Palumbo M, Cefola M, Pace B, et al. Computer vision system based on conventional imaging to monitor fruit and vegetables quality: A review[J]. Postharvest Biology and Technology, 2023, 200: 112332. DOI:10.1016/j.postharvbio.2023.112332. (ScienceDirect)
3 田有文, 吴伟, 卢世倩, 等. 深度学习在果蔬品质检测分级中的应用[J]. 食品科学, 2021, 42(19): 260-270. DOI:10.7506/spkx1002-6630-20200702-020. (spkx.net.cn)
4 Zhao M, Cang H, Chen H, et al. Determination of quality and maturity of processing tomatoes using near-infrared hyperspectral imaging with interpretable machine learning methods[J]. LWT, 2023, 183: 114861. DOI:10.1016/j.lwt.2023.114861. (ScienceDirect)
5 刘洋, 宫志宏, 黎贞发, 刘涛, 赵卓, 王腾歌. 基于改进YOLOv5的番茄成熟度检测方法[J]. 中国农业气象, 2024, 45(12): 1521-1532. DOI:10.3969/j.issn.1000-6362.2024.12.012. (Zgnyqx)
6 Zeng T, Li S, Song Q, Zhong F, Wei X. Lightweight tomato real-time detection method based on improved YOLO and mobile deployment[J]. Computers and Electronics in Agriculture, 2023, 205: 107625. DOI:10.1016/j.compag.2023.107625. (ScienceDirect)
7 Ren S, He K, Girshick R, Sun J. Faster R-CNN: Towards real-time object detection with region proposal networks[C]//Advances in Neural Information Processing Systems (NeurIPS). 2015. (NeurIPS Papers)
8 Redmon J, Divvala S, Girshick R, Farhadi A. You Only Look Once: Unified, real-time object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016. (Hugging Face)
9 Li C, Li L, Jiang H, et al. YOLOv6: A single-stage object detection framework for industrial applications[EB/OL]. arXiv:2209.02976, 2022. DOI:10.48550/arXiv.2209.02976. (arXiv)
10 Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2023: 7464-7475. DOI:10.1109/CVPR52729.2023.00721. (CVF Open Access)
11 Jocher G, Chaurasia A, Qiu J. Ultralytics YOLO (v8.2.0)[EB/OL]. Zenodo, 2024. DOI:10.5281/zenodo.10983461. (Zenodo)
12 Wang C Y, Yeh I H, Liao H Y M. YOLOv9: Learning what you want to learn using programmable gradient information[C]//Computer Vision – ECCV 2024 (LNCS 15089). Springer, 2024: 1-21. DOI:10.1007/978-3-031-72751-1_1. (Springer)
13 Wang A, Chen H, Liu L, et al. YOLOv10: Real-time end-to-end object detection[C]//Advances in Neural Information Processing Systems (NeurIPS). 2024. (NeurIPS Proceedings)
14 Jocher G, Qiu J, Chaurasia A. Ultralytics YOLO (v8.3.0): YOLO11 Models Release[EB/OL]. Zenodo, 2024. DOI:10.5281/zenodo.13858602. (Zenodo)
15 Tian Y, Ye Q, Doermann D. YOLOv12: Attention-centric real-time object detectors[EB/OL]. arXiv:2502.12524, 2025. DOI:10.48550/arXiv.2502.12524. (arXiv)
