ARTICLE DETAIL

资讯详情

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

基于YOLOv5的果蔬识别系统:从数据集构建到模型部署全流程实战

基于YOLOv5的果蔬识别系统:从数据集构建到模型部署全流程实战 简介本资源是一套完整的YOLOv5果蔬识别实战项目面向计算机、人工智能及相关专业本科生专为毕业设计、课程大作业与深度学习入门实践打造。项目已通过导师评审并获98分高分所有源码均经本地编译验证可直接运行涵盖数据预处理、模型训练、实时检测与GUI界面开发全流程。压缩包共56个文件94.07MB包含14个核心Python脚本如data_split.py、train_cnn.py、window_realtime.py等、27张标注图像jpg/jpeg/png、6个文本配置与说明文件、4个PASCAL VOC格式XML标注、2个训练好的H5模型及README文档等结构清晰、模块解耦便于理解目标检测与分类双任务实现逻辑。已有133人下载学习配套教程详述环境配置、数据集构建、模型微调与可视化部署步骤并提供测试记录、训练日志与热力图结果显著降低复现门槛。1. 项目概述从零构建一个高精度果蔬识别系统最近在整理过往项目时翻出了一个让我印象深刻的“高分作业”——一个基于YOLOv5的果蔬识别系统。这个项目之所以能拿高分不仅仅是因为它实现了“识别水果蔬菜”这个功能更在于它完整地走通了从数据集准备、模型训练、性能优化到最终部署上线的全链路并且每一步都踩过坑、总结过经验。很多朋友在入门目标检测时往往卡在数据集处理或者模型调参上感觉理论都懂但一动手就问题百出。今天我就把这个项目的核心思路、关键代码、以及那些教程里不会细说的“坑”和技巧系统地梳理一遍。无论你是想完成课程设计、毕业项目还是单纯想亲手训练一个能用的AI模型这篇内容都能给你提供一条清晰、可复现的路径。这个系统的核心价值在于其“完整性”和“实用性”。它不只是一个演示性质的Demo而是一个考虑了真实应用场景的解决方案。例如在智能零售货柜中自动盘点商品、在农业分拣线上进行品质初筛、甚至是在家庭智能冰箱里管理食材其底层技术逻辑都是相通的。我们将使用YOLOv5这一经典且社区活跃的目标检测框架它平衡了速度、精度和易用性非常适合作为入门和快速原型开发的选择。接下来我会带你深入每个环节不仅告诉你怎么做更会解释为什么这么做以及如何避开我当初走过的弯路。2. 核心思路与方案选型为什么是YOLOv5在决定做果蔬识别时第一个问题就是用什么框架市面上目标检测模型很多从老牌的Faster R-CNN、SSD到YOLO系列、以及最新的DETR等Transformer架构。对于果蔬识别这个具体任务我的选型逻辑基于以下几点2.1 任务需求分析果蔬识别属于中等规模、类别间差异可能较大苹果和香蕉也可能较小不同品种的苹果的目标检测任务。图像背景相对可控通常在货架、桌面或农田但存在遮挡、重叠、光照变化等挑战。我们需要的是一个在保证一定精度的前提下推理速度较快、便于部署的模型。因为最终的应用场景可能是嵌入式设备如树莓派、Jetson Nano或移动端对实时性有要求。2.2 YOLOv5的独特优势YOLOv5并非官方YOLO系列而是Ultralytics公司基于PyTorch实现的一个非常成功的项目。它之所以成为我们的首选原因如下极致的易用性其代码库结构清晰提供了从训练到部署的完整脚本train.py,detect.py,export.py。对于新手而言几乎可以“开箱即用”大大降低了入门门槛。丰富的预训练模型提供了从轻量级YOLOv5s到高精度YOLOv5x不同大小的模型用户可以根据自己的算力和精度需求灵活选择。我们可以利用在COCO等大型数据集上预训练的权重进行迁移学习这对于我们数据量可能有限的果蔬数据集至关重要。活跃的社区与生态遇到问题很容易在GitHub Issues或相关论坛找到解决方案。其模型格式.pt也被众多部署工具链如ONNX Runtime, TensorRT, OpenVINO, RKNN等广泛支持方便后续落地到不同平台。训练效率高集成了自动混合精度训练、数据加载优化等技巧即使在消费级显卡上也能获得不错的训练速度。2.3 备选方案考量我也评估过其他方案。YOLOv8更先进但在项目初期其生态和文档的成熟度略逊于v5。Faster R-CNN精度可能更高但速度慢架构复杂不适合新手快速上手和后续部署。Transformer模型如DETR对数据量和算力要求更高。因此综合易用性、社区支持和性能平衡YOLOv5是这个项目的最佳起点。注意模型选型没有绝对的对错只有是否适合当前场景。YOLOv5是一个优秀的“瑞士军刀”能解决80%的常见目标检测问题。当你的项目对精度有极致要求或需要处理非常特殊的场景如极小目标、极端遮挡时再考虑更复杂的模型也不迟。3. 数据集项目的基石与最大挑战如果说模型是引擎那么数据就是燃料。数据集的质量直接决定了模型性能的上限。对于果蔬识别公开可用的高质量数据集并不多且往往与我们的具体需求如特定品种、特定拍摄环境有差异。因此构建或整理一个合适的数据集是第一步也是最关键的一步。3.1 数据获取与整理我们的数据主要有三个来源公开数据集网络上可以找到一些如“Fruits-360”、“Vegetable Images Dataset”等。但这些数据集通常是分类数据集一张图一个物体我们需要的是带边界框标注的检测数据集。少量可用于检测的公开集其类别和图像质量也需要仔细筛选。自主拍摄这是获得最匹配数据的主要方式。我们使用手机或相机在多种光照条件自然光、室内灯光、暗光、多种角度、以及模拟真实场景果蔬堆叠、部分遮挡下进行拍摄。确保背景尽可能多样以增强模型的泛化能力。网络爬取从电商平台、食谱网站等爬取果蔬图片。这里必须严格遵守法律法规和网站Robots协议仅用于个人学习研究且要注意版权风险。爬取的数据噪声较大需要严格的清洗。最终我们构建了一个包含15种常见果蔬如苹果、香蕉、橙子、西红柿、黄瓜、西兰花等约3000张图像的数据集。每张图像可能包含多个同类或不同类别的实例。3.2 数据标注规范与工具标注是体力活但规范至关重要。我们使用LabelImg或更现代的CVAT、Roboflow进行标注。标注格式YOLOv5使用的是YOLO格式的标签即每个图像对应一个.txt文件每行代表一个物体格式为class_id x_center y_center width height。坐标和尺寸都是相对于图像宽度和高度的归一化值0-1之间。标注原则边界框紧贴目标框体应恰好包围整个目标避免包含过多背景或遗漏部分目标。处理遮挡对于被遮挡的物体尽量标注其可见部分。如果遮挡严重导致无法辨认则不标注。类别统一确保同一种果蔬在不同形态下如整个苹果、切开的苹果使用同一个类别名除非你特意想区分它们。标注一致性最好由同一个人或小组完成全部标注或制定详细的标注规范以减少主观差异。3.3 数据集划分与组织我们将数据按大约70% : 20% : 10%的比例划分为训练集train、验证集val和测试集test。训练集用于模型参数的学习。验证集在训练过程中用于监控模型表现调整超参数如学习率以及进行早停Early Stopping防止过拟合。验证集不参与梯度更新。测试集在模型训练完成后用于最终评估模型的泛化能力。测试集在整个训练和调参过程中完全不可见是衡量模型最终性能的唯一标准。目录结构组织如下这是YOLOv5约定的格式datasets/ └── fruits_vegetables/ ├── images/ │ ├── train/ # 训练集图片 │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片可选评估时使用 └── labels/ ├── train/ # 训练集标签.txt文件 ├── val/ # 验证集标签 └── test/ # 测试集标签同时需要创建一个数据集配置文件fruits_vegetables.yaml放在YOLOv5项目的data/目录下# fruits_vegetables.yaml path: ../datasets/fruits_vegetables # 数据集根目录 train: images/train # 训练集路径相对于path val: images/val # 验证集路径 test: images/test # 测试集路径可选 # 类别数量 nc: 15 # 类别名称列表 names: [apple, banana, orange, tomato, cucumber, broccoli, ...]实操心得数据标注是最耗时但回报最高的环节。不要吝啬在数据清洗和标注质量上的时间。一个常见的错误是验证集和测试集划分不合理比如按顺序划分导致数据分布不一致。务必使用随机划分。可以使用sklearn.model_selection的train_test_split函数并设置随机种子以确保可复现性。4. 环境搭建与YOLOv5源码解析工欲善其事必先利其器。一个稳定、可复现的开发环境是项目成功的保障。4.1 环境配置步骤我强烈建议使用Conda或虚拟环境venv来管理Python依赖避免包冲突。# 1. 创建并激活虚拟环境以Conda为例 conda create -n yolov5_fv python3.8 conda activate yolov5_fv # 2. 克隆YOLOv5官方仓库 git clone https://github.com/ultralytics/yolov5 cd yolov5 # 3. 安装依赖 (使用requirements.txt建议用pip) pip install -r requirements.txtrequirements.txt主要包含了PyTorch、TorchVision、OpenCV、Pandas等库。根据你的CUDA版本可能需要手动安装对应版本的PyTorch。例如对于CUDA 11.3pip install torch1.12.1cu113 torchvision0.13.1cu113 --extra-index-url https://download.pytorch.org/whl/cu1134.2 项目目录结构解析理解YOLOv5的代码结构有助于我们后续的定制和调试。yolov5/ ├── data/ # 数据集配置文件如coco128.yaml和hyp超参数文件 ├── models/ # 模型定义文件yolov5s.yaml等和通用模块 ├── utils/ # 工具脚本数据加载、指标计算、日志记录等 ├── runs/ # 训练和检测结果默认保存目录 ├── train.py # 训练脚本 ├── detect.py # 推理/检测脚本 ├── val.py # 验证脚本 ├── export.py # 模型导出脚本转ONNX, TensorRT等 └── requirements.txttrain.py这是我们的主战场。它集成了训练循环、验证、日志记录、模型保存等功能。detect.py加载训练好的模型对图像、视频或实时摄像头流进行推理。utils/下的datasets.py和general.py包含了大量数据处理和工具函数值得仔细阅读。4.3 核心模型架构浅析虽然我们不需要从头实现YOLO但了解其核心组件有助于调参和问题排查。YOLOv5的骨干网络Backbone是CSPDarknet它通过跨阶段部分连接CSP减少了计算量并增强了梯度流。颈部Neck采用了PANetPath Aggregation Network结构通过自底向上和自顶向下的特征金字塔融合了深层语义信息和浅层位置信息这对于检测不同尺度的果蔬非常有效。头部Head则负责输出最终的检测结果边界框、置信度、类别概率。在models/yolov5s.yaml中你可以看到模型的具体层结构定义。nc: 80表示COCO的80类我们需要将其改为自己的类别数本例中为15。5. 模型训练从配置到产出环境准备好了数据也齐了现在开始最激动人心的部分——训练模型。5.1 关键配置文件修改除了前面提到的数据集配置文件fruits_vegetables.yaml还有两个重要文件模型配置文件复制models/yolov5s.yaml为models/yolov5s_fv.yaml将开头的nc: 80修改为nc: 15。超参数配置文件data/hyps/hyp.scratch-low.yaml用于从头训练或hyp.finetune.yaml用于微调。我们使用预训练权重所以主要关注微调超参。关键参数包括lr0: 初始学习率微调时通常设置较小如0.01或0.001。lrf: 学习率衰减因子。momentum: SGD优化器的动量。weight_decay: 权重衰减用于防止过拟合。warmup_epochs: 学习率热身轮数帮助训练初期稳定。5.2 启动训练命令基础训练命令如下python train.py \ --img 640 \ # 训练图像尺寸 --batch 16 \ # 批次大小根据GPU内存调整 --epochs 100 \ # 训练轮数 --data data/fruits_vegetables.yaml \ # 数据集配置 --cfg models/yolov5s_fv.yaml \ # 模型配置 --weights yolov5s.pt \ # 预训练权重会自动下载 --name fv_exp1 \ # 本次实验名称 --hyp data/hyps/hyp.finetune.yaml # 超参数配置--img 640: YOLOv5默认将输入图像缩放至640x640。如果你的目标物体通常很小可以尝试增大分辨率如1280但会显著增加计算量和内存消耗。--batch 16: 批次大小是最影响GPU内存的参数。如果出现“CUDA out of memory”错误首先降低batch大小。也可以尝试使用--batch-size和--accumulate梯度累积来模拟更大的批次。--weights yolov5s.pt: 使用在COCO上预训练的权重进行迁移学习这是快速收敛的关键。5.3 训练过程监控与解读训练开始后控制台会输出日志更重要的是YOLOv5会自动启动一个本地Web服务器默认http://localhost:6006通过TensorBoard或内置的日志系统进行可视化。你需要重点关注以下指标损失函数Loss包括框回归损失box_loss、目标置信度损失obj_loss和分类损失cls_loss。训练过程中这些损失应该总体呈下降趋势。如果损失震荡剧烈或上升可能是学习率太高或数据有问题。验证集指标mAP0.5在IoU阈值为0.5时的平均精度均值是核心评估指标。值越高越好。mAP0.5:0.95在IoU阈值从0.5到0.95步长0.05上的平均mAP是更严格的指标。precision精确率和recall召回率需要平衡。高精确率低召回率说明模型很保守只检测很有把握的目标低精确率高召回率说明模型激进但误检多。权重文件训练过程中最佳模型best.pt和最后一轮模型last.pt会保存在runs/train/fv_exp1/weights/目录下。避坑指南训练初期如果损失降不下来或出现NaN请检查1) 数据标注格式是否正确归一化坐标是否在0-1之间2) 数据集配置文件中的路径是否正确3) 类别ID是否从0开始连续编号。一个快速验证数据加载的方法是在训练前运行python train.py --data ... --cfg ... --weights --epochs 0它会只完成一个epoch的数据加载和验证而不进行训练。6. 超参数调优与模型优化实战默认参数能跑出不错的结果但要想拿到“高分”精细化的调优必不可少。这不是玄学而是有章可循的实验过程。6.1 学习率策略与优化器选择学习率是影响训练最重要的超参数。YOLOv5默认使用SGD优化器配合余弦退火学习率调度器。学习率预热Warmup在最初的几个epoch如3个学习率从0线性增长到lr0。这有助于在训练初期稳定模型。可以通过--warmup-epochs设置。余弦退火学习率随着训练过程像余弦曲线一样从lr0下降到lr0 * lrf。这种策略通常比阶梯式下降更平滑有助于模型跳出局部最优。优化器对比SGD通常比Adam泛化能力更好但可能收敛稍慢。对于小数据集Adam有时能更快收敛但最终精度可能略逊于SGD。我的经验是先用SGD余弦退火如果收敛困难再尝试Adam。你可以通过修改hyp.finetune.yaml中的lr0如从0.01调到0.001和lrf来进行实验。一个实用的技巧是使用学习率查找器Learning Rate Finder虽然YOLOv5没有内置但可以手动进行小范围扫描以不同的学习率训练少量epoch如5个观察损失下降的速度和稳定性选择一个损失下降最快且不震荡的学习率。6.2 数据增强策略调整数据增强是提升模型泛化能力、防止过拟合的利器。YOLOv5在datasets.py中集成了强大的实时数据增强Mosaic, MixUp等。Mosaic增强将四张训练图像拼接成一张让模型学习在不同位置、不同尺度下识别物体。这对于小目标检测尤其有效。可以通过--mosaic参数开关通常建议开启。其他增强包括随机旋转、缩放、裁剪、色彩抖动色调、饱和度、明度、模糊等。这些参数都在hyp.yaml文件中例如hsv_h,hsv_s,hsv_v控制色彩抖动强度degrees控制旋转角度。调整策略如果数据集本身已经很丰富可以适当减弱增强强度。如果数据集较小或场景单一则应加强增强。例如增加hsv_h色调变化可以让模型对不同颜色的果蔬如青苹果和红苹果更鲁棒。6.3 模型结构与尺寸选择YOLOv5提供了s, m, l, x四种尺寸。模型越大精度通常越高但速度越慢所需显存也越多。YOLOv5s参数量最小速度最快适合移动端或嵌入式部署。在我们的果蔬数据集上如果类别间特征差异明显s模型可能就足够了。YOLOv5m/l/x参数量依次增加特征提取能力更强适合更复杂的场景或对精度要求极高的任务。 选择策略从s模型开始。如果训练后发现验证集mAP已经很高如0.9且测试集表现也不错那么s模型就是最佳选择。如果发现模型在验证集上表现不佳欠拟合可以考虑换用更大的模型。可以通过--cfg models/yolov5m.yaml来指定。6.4 训练技巧早停与模型集成早停Early StoppingYOLOv5内置了早停机制--patience参数。当验证集指标在连续patience个epoch内没有提升时训练会自动停止。这能有效防止过拟合节省时间。通常设置patience50或100。模型集成训练多个模型例如使用不同的随机种子、数据增强强度或模型初始化然后将它们的预测结果进行融合如加权平均通常能获得比单个模型更好的性能。但这会显著增加推理成本适用于对精度有极致要求的离线场景。7. 模型评估、测试与结果分析训练完成后不能只看训练日志里的数字必须对模型进行全面的评估和测试。7.1 使用验证集进行标准评估运行以下命令使用验证集对最佳模型进行评估python val.py \ --data data/fruits_vegetables.yaml \ --weights runs/train/fv_exp1/weights/best.pt \ --img 640 \ --batch 32 \ --task val \ --name fv_final_eval这会生成详细的评估报告包括每个类别的AP平均精度、精确率-召回率曲线PR Curve、混淆矩阵Confusion Matrix等。混淆矩阵分析这是诊断模型问题的利器。它显示了模型在各个类别上混淆的情况。例如如果“青苹果”和“绿梨”经常被混淆说明这两个类别在视觉特征上太相似可能需要1) 收集更多有区分度的样本2) 在数据增强中增加色彩扰动让模型更关注形状纹理而非颜色3) 考虑是否应该合并这两个类别。7.2 在独立测试集上运行推理测试集是最终的“考场”。使用detect.py脚本在测试集上运行并人工检查结果。python detect.py \ --source ../datasets/fruits_vegetables/images/test/ \ --weights runs/train/fv_exp1/weights/best.pt \ --img 640 \ --conf 0.25 \ # 置信度阈值 --iou 0.45 \ # NMS的IoU阈值 --save-txt \ # 保存标签结果用于后续计算mAP --save-conf \ # 保存结果的置信度 --name test_run在runs/detect/test_run/文件夹下查看检测结果。务必人工抽查特别是那些置信度不高或被错误检测的图片分析错误原因。7.3 性能指标解读与优化方向假设我们得到的结果是mAP0.5 0.92,mAP0.5:0.95 0.68。mAP0.50.92说明在宽松的标准下模型表现非常好。mAP0.5:0.950.68说明在更严格的标准下要求预测框与真实框高度重合模型还有提升空间。这可能是因为边界框回归不够精确。优化方向调整损失函数权重在hyp.yaml中box_loss的权重box_gain相对较低可以尝试微调但需谨慎。改进数据标注检查训练集中边界框的标注是否足够精确。不精确的标注会“教坏”模型。使用更优的锚框AnchorYOLOv5在训练开始时会自动根据你的数据集聚类生成新的锚框尺寸。你可以查看训练日志开头的“AutoAnchor”结果。如果给出的最佳召回率BPR很高如0.98说明默认锚框适合你的数据如果较低可以尝试使用它生成的新锚框值更新到模型配置文件的anchors部分。8. 模型部署与应用实战模型训练评估好最终要“用起来”。部署方式取决于应用场景。8.1 本地Python推理这是最简单的部署方式直接使用YOLOv5提供的detect.py或自己写一个简单的推理脚本。import torch import cv2 from pathlib import Path # 加载模型 model torch.hub.load(ultralytics/yolov5, custom, pathruns/train/fv_exp1/weights/best.pt, force_reloadTrue) model.conf 0.25 # 置信度阈值 model.iou 0.45 # NMS IoU阈值 # 推理单张图片 img cv2.imread(test_image.jpg) results model(img) # 解析结果 predictions results.pandas().xyxy[0] # 转为Pandas DataFrame for index, row in predictions.iterrows(): x1, y1, x2, y2 int(row[xmin]), int(row[ymin]), int(row[xmax]), int(row[ymax]) label f{row[name]} {row[confidence]:.2f} cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2) cv2.imshow(Result, img) cv2.waitKey(0)8.2 导出为ONNX或TensorRT以加速对于生产环境尤其是需要低延迟高吞吐的场景需要将PyTorch模型转换为更高效的推理格式。导出ONNXpython export.py --weights best.pt --include onnx --img 640 --batch 1ONNX是一个开放的模型格式可以被多种推理引擎如ONNX Runtime, OpenVINO支持。--batch 1指定了动态批次维度也可以固定为--batch 32。导出TensorRTTensorRT是NVIDIA GPU上的高性能推理优化器。python export.py --weights best.pt --include engine --img 640 --batch 1 --device 0这需要先安装TensorRT。导出后推理速度通常能有数倍到数十倍的提升。8.3 部署到边缘设备如RK3568, RV1106这是当前的一个热点。瑞芯微Rockchip的RK3568、RV1106等芯片集成了NPU非常适合运行YOLO这类模型。模型转换首先将.pt模型导出为ONNX。然后使用芯片厂商提供的工具链如RKNN-Toolkit2 for RK3568将ONNX模型转换为能在NPU上运行的专有格式如.rknn。编写推理代码在边缘设备上使用C或Python调用厂商提供的SDKRKNN API来加载.rknn模型并进行推理。这个过程涉及内存分配、输入输出张量处理等需要仔细阅读官方文档。性能调优在边缘设备上需要权衡精度和速度。可能需要对模型进行量化如INT8量化以进一步提速和减少内存占用但这可能会带来轻微的精度损失。部署经验从PyTorch到边缘设备的部署链路较长最容易出错的环节是模型转换。务必确保ONNX导出时opset版本与目标设备工具链兼容。在转换.rknn模型时注意预处理归一化、通道顺序和后处理解码边界框必须与训练时完全一致否则结果会完全错误。建议先在PC上用模拟器测试转换后的模型再上真机。9. 常见问题排查与解决方案实录在实际操作中你几乎一定会遇到下面这些问题。这里是我和同学们踩过的坑和填坑方法。9.1 训练阶段问题问题CUDA out of memory (OOM)排查立即降低--batch-size。如果降到1还不行检查--img-size是否过大如1280。也可以尝试使用更小的模型如从YOLOv5m换到YOLOv5s。解决使用梯度累积--accumulate。例如设置--batch-size 4 --accumulate 4其效果类似于batch-size 16但显存占用仅为batch-size 4的水平。问题损失不下降或为NaN排查首先检查数据标注。运行python -c from utils.general import *; check_dataset(data/fruits_vegetables.yaml)可以快速检查数据集格式和路径。其次检查学习率是否过高。将--lr0从0.01降到0.001或0.0001试试。解决确保数据集中没有空标签文件即.txt文件内容为空。对于NaN可以尝试在hyp.yaml中调低cls_pw和obj_pw分类和目标损失的正样本权重或使用梯度裁剪--gradient-clipping。问题验证集mAP远低于训练集精度排查这是典型的过拟合。检查训练集和验证集的数据分布是否差异过大验证集是否足够“干净”和有代表性解决增加数据增强的强度提高hsv_h/s/v,translate,scale等。使用更强的正则化如增加--weight-decay参数。最有效的方法是收集更多、更多样化的验证集数据。9.2 推理阶段问题问题模型检测不到某些物体漏检排查在测试图片上逐步降低--conf置信度阈值如从0.25降到0.1看是否能检测出来。如果能说明模型对这个类别的预测置信度普遍偏低。解决1) 增加该类别在训练集中的样本数量和质量。2) 检查该类别的数据增强是否过度例如过度的裁剪可能把目标物体裁掉了。3) 在推理时针对特定类别使用更低的置信度阈值。问题同一物体被重复检测一个物体多个框排查这是NMS非极大值抑制参数设置不当。--iou阈值控制了两个框多大程度上重叠时会被视为同一个物体而抑制掉一个。解决适当降低--iou阈值如从0.45降到0.3让NMS更激进地合并重叠框。但注意不要降得太低以免误删相邻的真实物体。问题推理速度慢排查首先确认是在CPU还是GPU上运行。detect.py默认会使用GPU如果可用。解决1) 使用更小的模型YOLOv5s甚至YOLOv5n。2) 减小推理图像尺寸--img如从640降到320但这会降低精度。3) 将模型导出为TensorRT或ONNX并使用对应的优化推理引擎。4) 使用半精度FP16推理在支持Tensor Core的GPU上可以大幅加速。9.3 项目与代码管理问题问题如何复现实验解决记录所有种子在训练命令中固定随机种子--seed 42。同时保存好每次实验对应的数据集版本、代码版本git commit、超参数配置文件hyp.yaml和完整的训练命令。可以使用像Weights Biases (WB)或MLflow这样的实验管理工具来自动化记录。问题源代码如何组织解决一个好的项目结构能节省大量后期维护时间。我的目录通常如下my_fruit_detection_project/ ├── data/ # 数据集或软链接 ├── yolov5/ # 克隆的官方代码库 ├── configs/ # 自定义的模型和超参yaml文件 ├── scripts/ # 自己写的训练、评估、导出脚本 ├── experiments/ # 训练输出可软链接到yolov5/runs ├── deployment/ # 部署相关代码ONNX转换、边缘设备代码 └── README.md # 项目说明包含环境、数据、训练步骤使用Git进行版本控制并写好.gitignore文件忽略数据集、模型权重等大文件。这个基于YOLOv5的果蔬识别项目就像搭积木每一步都有明确的步骤和可预期的结果。从数据准备到模型部署完整的走一遍这个流程你对目标检测项目的理解会远超仅仅跑通一个Demo。最关键的是过程中遇到的每一个报错、每一次调参、对每一个指标的分析都是宝贵的经验。希望这份超详细的拆解能帮你少走弯路更快地构建出属于你自己的、可用的、甚至高精度的AI视觉应用。本文还有配套的精品资源点击获取
返回列表