尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

YOLOv5目标检测实战:从环境搭建到模型部署全流程详解

YOLOv5目标检测实战:从环境搭建到模型部署全流程详解 1. 项目概述从零到一打造专属的YOLOv5检测器“目标检测”这四个字对于很多刚接触计算机视觉的朋友来说既熟悉又陌生。熟悉的是我们每天都在享受它带来的便利——手机相册自动识别人脸和宠物、自动驾驶汽车识别行人与车辆、工厂流水线上的瑕疵品分拣陌生的是当自己想动手为某个特定场景比如识别自家花园里的不同花卉、检测仓库货架上的特定商品、或者监控视频中是否有特定行为训练一个模型时却不知从何下手。网上教程虽多但往往要么过于学术化要么步骤跳跃让新手望而却步。今天我们就来彻底解决这个问题。我将带你手把手利用当前工业界和学术界都极为流行的YOLOv5框架完成一次完整的目标检测模型训练。这不是一个简单的“跑通Demo”教程而是一次深度的实战演练。我们会从最基础的环境搭建、数据准备开始一步步深入到模型训练、调参、评估最后到模型导出与应用。我会把我过去在多个实际项目中积累的经验、踩过的坑以及那些官方文档里不会写的“骚操作”都分享出来。无论你是学生、算法工程师还是业务部门想尝试AI落地的产品经理只要跟着做你就能得到一个真正属于你自己的、可以解决实际问题的目标检测模型。2. 核心思路与方案选型为什么是YOLOv5在动手之前我们得先搞清楚“武器”的优劣。目标检测的框架众多从早期的R-CNN系列到SSD、RetinaNet再到YOLO系列。为什么我们选择YOLOv5作为入门和实战的首选这背后有一系列非常实际的考量。2.1 YOLO系列的核心思想You Only Look OnceYOLOYou Only Look Once的核心创新在于它将目标检测任务重构为一个单一的回归问题。与传统的两阶段检测器如Faster R-CNN先提候选区域再分类不同YOLO将输入图像划分为SxS的网格每个网格负责预测中心落在该网格内的物体。每个预测框包含了边界框坐标x, y, w, h、置信度以及类别概率。这种“端到端”的设计使得YOLO在速度上具有碾压性优势非常适合于实时检测场景如视频监控、自动驾驶感知。2.2 YOLOv5的独特优势YOLOv5并非YOLO原作者Joseph Redmon团队的作品而是由Ultralytics公司维护的开源项目。尽管命名上有些争议但它凭借以下优点迅速成为了社区宠儿极致的易用性这是最大的亮点。其代码基于PyTorch框架结构清晰封装良好。提供了从数据准备、模型训练到模型导出的完整Pipeline并且有非常详细的命令行接口和Python API。对于新手而言几乎可以“开箱即用”。卓越的性能与速度平衡YOLOv5提供了从n纳米、s小、m中、l大、x特大五个不同大小的预训练模型。用户可以根据自己的算力和精度要求灵活选择。即使是最小的YOLOv5n在COCO数据集上也能达到不错的精度和极快的速度。活跃的社区与丰富的生态由于其易用性YOLOv5拥有极其庞大的用户社区。这意味着你在实践中遇到的绝大多数问题几乎都能在GitHub Issues或相关论坛中找到解决方案。同时围绕它的改进方案、部署工具如ONNX、TensorRT、OpenVINO转换也非常成熟。强大的数据增强与训练技巧YOLOv5内置了Mosaic数据增强、自适应锚框计算、自动混合精度训练、超参数进化等高级训练技巧。这些技巧被很好地封装起来用户无需深入理解其复杂原理只需简单配置即可享受其带来的性能提升。2.3 方案选型背后的考量选择YOLOv5本质上是在开发效率、部署便捷性、社区支持和性能之间找到了一个最佳平衡点。对于个人开发者、初创团队或快速原型验证阶段YOLOv5能让你用最小的学习成本最快地看到模型效果验证想法的可行性。相比之下虽然YOLOv4、PP-YOLO等模型可能在某个指标上更优但其配置复杂度和对新手的不友好性往往会成为项目早期最大的绊脚石。注意这里需要澄清一个常见的误解。网络上搜索“yolov5翻越围栏”等词条可能指向一些不当用途。我们必须明确技术本身是中立的但应用必须有明确的伦理和法律边界。我们的学习与实践应始终聚焦于解决正当的生产、生活、科研问题如工业质检、安防监控、农业监测、医疗影像分析等坚决杜绝任何违法违规的应用尝试。3. 环境搭建与项目初始化工欲善其事必先利其器。一个干净、可控的Python环境是成功的第一步。我强烈建议使用Conda或Venv进行环境管理避免包版本冲突。3.1 创建并激活虚拟环境# 使用Conda推荐 conda create -n yolov5 python3.8 conda activate yolov5 # 或者使用venv python -m venv yolov5_env # Windows yolov5_env\Scripts\activate # Linux/Mac source yolov5_env/bin/activate3.2 克隆YOLOv5官方仓库并安装依赖YOLOv5的官方仓库维护得非常勤快我们直接克隆最新版本。git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txtrequirements.txt文件包含了所有核心依赖如PyTorch、TorchVision、OpenCV、Pandas等。安装过程可能会持续几分钟。3.3 验证环境安装完成后运行一个简单的测试脚本来验证环境是否正确。python detect.py --weights yolov5s.pt --source data/images/bus.jpg这条命令会使用官方预训练的yolov5s.pt小模型对仓库自带的一张公交车图片进行检测。如果一切正常你会在runs/detect/exp目录下看到生成的结果图片上面画出了检测到的边界框和类别标签。实操心得在国内网络环境下直接pip installPyTorch可能会非常慢甚至失败。建议先配置清华源等国内镜像源加速。对于PyTorch可以访问其官网https://pytorch.org/get-started/locally/获取适合你CUDA版本的安装命令通常使用-i参数指定镜像源能极大提升速度。例如pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118。4. 数据准备模型训练的基石数据是AI模型的“燃料”其质量直接决定模型性能的上限。YOLOv5支持的数据标注格式是YOLO格式。4.1 数据标注格式详解YOLO格式的标注文件是一个与图片同名的.txt文件。每一行代表图片中的一个目标物体格式为class_id x_center y_center width heightclass_id物体的类别索引从0开始计数。x_center,y_center物体边界框中心的x和y坐标归一化到图片的宽度和高度即值在0到1之间。width,height物体边界框的宽度和高度同样进行了归一化。例如一张640x480的图片中有一个类别为“狗”假设class_id0的物体其边界框左上角坐标为(100, 120)右下角坐标为(300, 400)。那么计算过程如下边界框中心 x (100 300) / 2 / 640 400 / 2 / 640 200 / 640 0.3125边界框中心 y (120 400) / 2 / 480 520 / 2 / 480 260 / 480 0.5417边界框宽度 w (300 - 100) / 640 200 / 640 0.3125边界框高度 h (400 - 120) / 480 280 / 480 0.5833 因此该标注行应为0 0.3125 0.5417 0.3125 0.58334.2 数据采集与标注工具采集确保你的图片覆盖了所有可能的应用场景包括不同的光照、角度、遮挡、背景复杂度。数据量通常至少需要几百张复杂的任务可能需要数千甚至上万张。标注工具推荐使用LabelImg或Roboflow。LabelImg开源免费支持Pascal VOC和YOLO格式。安装简单 (pip install labelImg)适合本地小规模标注。Roboflow在线平台功能强大。支持团队协作、自动数据增强、版本管理并能一键导出为YOLOv5格式。免费版有一定额度对于个人项目通常足够。4.3 组织数据目录结构YOLOv5要求特定的目录结构。在你的项目根目录外避免与代码混淆创建一个数据集文件夹例如my_dataset。my_dataset/ ├── images/ │ ├── train/ # 训练集图片 │ │ ├── 001.jpg │ │ └── ... │ └── val/ # 验证集图片 │ ├── 101.jpg │ └── ... └── labels/ ├── train/ # 训练集标签与图片同名.txt文件 │ ├── 001.txt │ └── ... └── val/ # 验证集标签 ├── 101.txt └── ...通常我们可以按8:2或7:3的比例随机划分训练集和验证集。4.4 创建数据集配置文件接下来需要在YOLOv5项目目录下创建一个描述数据集的YAML文件例如my_data.yaml。# my_data.yaml path: ../my_dataset # 数据集的根目录相对于本yaml文件 train: images/train # 训练集图片路径相对于path val: images/val # 验证集图片路径相对于path # 类别数量 nc: 3 # 例如我有3个类别苹果、香蕉、橙子 # 类别名称列表 names: [apple, banana, orange]这个文件是连接你的数据和训练脚本的桥梁至关重要。注意事项标签一致性确保labels/train/001.txt中的class_id与my_data.yaml中的names列表顺序完全对应。names[0]对应class_id0。路径问题这是新手最常踩的坑。YAML文件中的path可以是绝对路径也可以是相对路径。使用相对路径时务必明确其是相对于运行训练命令时所在目录的路径。最稳妥的方式是使用绝对路径。数据平衡检查各个类别的样本数量是否大致均衡。如果某个类别样本极少样本不均衡模型会很难学好这个类别。可以通过复制样本过采样或丢弃部分多数类样本欠采样来缓解更高级的方法是使用Focal Loss等。5. 模型训练参数解析与实战命令数据准备好后就可以开始激动人心的训练过程了。YOLOv5的训练主要通过train.py脚本完成它提供了丰富的命令行参数。5.1 启动基础训练最基础的训练命令如下python train.py --img 640 --batch 16 --epochs 100 --data my_data.yaml --weights yolov5s.pt --project runs/train --name exp1让我们逐一拆解这些核心参数--img 640输入图像的大小。YOLOv5会自动将图片缩放到这个尺寸保持长宽比并用灰色填充不足部分。更大的尺寸通常能带来更好的精度但会显著增加显存消耗和训练时间。640是一个在速度和精度间取得良好平衡的常用值。--batch 16批次大小。即一次迭代送入模型的图片数量。它直接影响训练速度和稳定性。这个值主要受你的GPU显存限制。如果出现“CUDA out of memory”错误就需要减小batch大小。也可以使用--batch-size参数。--epochs 100训练轮数。整个训练集完整地通过模型一次称为一个epoch。100是一个常见的起始值对于小数据集可能足够大数据集可能需要更多。--data my_data.yaml指定我们刚才创建的数据集配置文件路径。--weights yolov5s.pt指定预训练权重。这里我们使用yolov5s.pt小模型进行迁移学习。这是至关重要的一步使用在COCO等大型数据集上预训练的权重可以让模型从一个非常好的起点开始学习极大地加速收敛并提升最终性能。即使你的任务和COCO完全不同比如检测工业零件底层的特征提取能力也是可迁移的。--project runs/train指定训练结果保存的父目录。--name exp1本次实验的名称。所有输出模型权重、日志、图表都会保存在runs/train/exp1目录下。5.2 关键训练参数深度解析除了上述基础参数还有一些高级参数对训练结果影响巨大--device指定训练设备。--device 0使用第一块GPU--device cpu使用CPU极慢--device 0,1使用多块GPU进行数据并行训练。--workers数据加载的线程数。用于在GPU计算时CPU并行地准备下一批数据。通常设置为CPU核心数左右可以加快数据读取速度。Windows下有时需要设置为0。--rect矩形训练模式。默认情况下YOLOv5会将每张图片缩放并填充为正方形。开启--rect后它会先计算整个批次图片的长宽比然后按批次进行统一的最小填充减少冗余的填充像素从而在小幅提升训练速度的同时有时还能略微提升精度。--resume从上次中断的训练继续。例如--resume runs/train/exp1/weights/last.pt。这对于长时间训练因故中断的情况非常有用。--hyp指定超参数配置文件路径。YOLOv5的训练涉及大量超参数如学习率、动量、权重衰减、损失函数权重等。默认使用data/hyps/hyp.scratch-low.yaml从头训练或hyp.finetune.yaml微调。你可以复制并修改这些文件来进行自定义调参。5.3 训练过程监控训练开始后控制台会打印丰富的日志信息。更重要的是YOLOv5集成了TensorBoard和Weights Biases (WB)支持。TensorBoard训练启动后会自动在runs/train/exp1目录下生成日志。在另一个终端进入项目根目录运行tensorboard --logdir runs/train然后在浏览器中打开http://localhost:6006你就可以实时查看损失曲线、精度指标mAP、学习率变化等这是分析和调试训练过程的神器。权重与偏置WB一个更强大的在线实验跟踪平台。首次使用需要注册并登录wandb login。它不仅能记录所有指标还能记录超参数、系统资源使用情况甚至模型预测样例非常适合团队协作和实验管理。5.4 超参数进化Hyperparameter Evolution这是YOLOv5的一个黑科技功能。它使用遗传算法以某个指标如mAP为优化目标自动地对超参数进行迭代优化。你可以使用以下命令启动python train.py --data my_data.yaml --weights yolov5s.pt --epochs 100 --evolve这个过程会比较耗时因为它会并行运行很多次训练。但对于追求极致性能或在固定数据集上部署的场景超参数进化往往能带来意想不到的提升。实操心得对于大多数自定义数据集我的经验是从yolov5s.pt开始它训练快占显存小能快速验证数据管道和基本效果。优先调整--img和--batch在显存允许的前提下尝试增大--img如640-1280和--batch这对精度提升往往比换大模型更直接有效。耐心观察验证集指标训练初期训练损失和验证损失都应稳步下降。如果验证损失很早就开始上升而训练损失持续下降这是典型的过拟合信号。需要增加数据增强、使用更小的模型、或添加正则化如更早的早停。善用早停Early StoppingYOLOv5内置了早停逻辑patience参数。当验证集指标在连续patience个epoch内没有提升时训练会自动停止并保存最佳模型。这能有效防止过拟合和节省时间。6. 模型评估与性能解读训练结束后我们需要客观地评估模型的好坏。YOLOv5在训练过程中和结束后都会自动在验证集上进行评估。6.1 核心评估指标评估结果保存在runs/train/exp1目录下的results.csv和results.png等文件中。我们需要关注以下几个核心指标指标全称含义解读mAP0.5Mean Average Precision at IoU0.5交并比(IoU)阈值为0.5时的平均精度均值最核心的指标。衡量模型在宽松阈值下的整体检测精度。值越高越好通常0.5算不错0.7很好。mAP0.5:0.95mAP at IoU from 0.5 to 0.95 (step 0.05)在不同IoU阈值(0.5~0.95)下的平均mAP更严格的指标。衡量模型定位的精确度。值通常比mAP0.5低很多提升也更难。Precision精确率模型预测为正的样本中真正为正的比例高精确率意味着模型“宁可错过不可错杀”预测框很准但可能会漏检。Recall召回率所有真实的正样本中被模型正确预测出来的比例高召回率意味着模型“宁可错杀不可错过”能找到大部分目标但可能会有很多误检。F1 ScoreF1分数Precision和Recall的调和平均数综合衡量精确率和召回率。在两者需要平衡时参考。6.2 使用验证脚本进行独立评估你也可以使用val.py脚本利用训练好的最佳模型通常是best.pt对验证集或新的测试集进行独立评估。python val.py --weights runs/train/exp1/weights/best.pt --data my_data.yaml --img 640 --task val这会生成一份详细的评估报告包括每个类别的AP平均精度、混淆矩阵、PR曲线等帮助你分析模型在哪些类别上表现好或差。6.3 性能可视化分析在runs/train/exp1目录下你会找到很多有用的可视化文件confusion_matrix.png混淆矩阵。对角线越亮说明分类越准。可以查看哪些类别容易被混淆。F1_curve.pngF1分数随置信度阈值变化的曲线。可以帮助你选择最优的置信度阈值。P_curve.png和R_curve.png精确率和召回率曲线。PR_curve.png每个类别的精确率-召回率曲线曲线下面积就是AP。labels.jpg和labels_correlogram.jpg展示数据集中标注框的分布中心点、宽高、类别用于检查数据标注质量。排查技巧如果模型性能不佳按以下顺序排查数据问题回顾“数据准备”章节。检查标注是否正确框是否紧贴物体、类别是否正确、数据是否均衡、训练集和验证集分布是否一致。训练问题学习率是否合适损失曲线是否正常下降是否过拟合/欠拟合可以尝试更小的模型如换yolov5n.pt或更强的数据增强修改hyp.yaml中的增强参数。模型容量问题如果数据量很大且复杂但用了太小的模型如yolov5n可能导致欠拟合。可以尝试yolov5m或yolov5l。评估问题确认评估时使用的--img大小是否与训练时一致。确认验证集图片没有在训练集中出现过数据泄漏。7. 模型推理与部署应用训练出满意的模型后下一步就是让它“干活”。YOLOv5提供了极其简便的推理接口。7.1 使用训练好的模型进行预测使用detect.py脚本可以对图像、视频、目录甚至网络摄像头流进行实时检测。# 检测单张图片 python detect.py --weights runs/train/exp1/weights/best.pt --source path/to/your/image.jpg --conf 0.25 # 检测一个目录下的所有图片 python detect.py --weights runs/train/exp1/weights/best.pt --source path/to/images/ --conf 0.25 # 检测视频文件 python detect.py --weights runs/train/exp1/weights/best.pt --source path/to/video.mp4 --conf 0.25 # 使用USB摄像头ID0进行实时检测 python detect.py --weights runs/train/exp1/weights/best.pt --source 0 --conf 0.25关键参数--weights指定训练好的模型权重路径。--source输入源。可以是图片、视频、目录、摄像头ID或URL。--conf置信度阈值。低于此值的预测框将被过滤掉。根据你的任务调整需要高召回率则调低如0.1需要高精确率则调高如0.5。--iou非极大值抑制NMS的IoU阈值。用于合并重叠的预测框。默认0.45通常不需要改动。--save-txt保存检测结果为YOLO格式的标签文件。--save-conf在保存的标签文件中包含置信度分数。检测结果默认保存在runs/detect/exp目录下。7.2 模型导出为部署格式为了将模型部署到不同的平台如移动端、嵌入式设备、Web服务我们需要将其从PyTorch的.pt格式转换为通用的中间格式。导出为ONNX格式ONNX是一种开放的模型交换格式被众多推理引擎支持。python export.py --weights runs/train/exp1/weights/best.pt --include onnx导出的best.onnx文件可以被 OpenCV DNN、TensorRT、ONNX Runtime 等框架直接调用。导出为TensorRT引擎如果你在NVIDIA GPU上追求极致的推理速度可以导出为TensorRT格式。python export.py --weights runs/train/exp1/weights/best.pt --include engine --device 0这需要先安装TensorRT。导出的.engine文件能实现最大的性能优化。导出为其他格式export.py还支持导出为 TorchScript、CoreML、TensorFlow SavedModel 等格式满足iOS、Android、TensorFlow Serving等不同部署场景的需求。7.3 集成到Python代码中除了命令行你还可以在Python代码中轻松调用模型import torch # 加载模型 model torch.hub.load(ultralytics/yolov5, custom, pathruns/train/exp1/weights/best.pt, force_reloadTrue) # 或者直接加载本地模型 # model torch.hub.load(./yolov5, custom, pathruns/train/exp1/weights/best.pt, sourcelocal) # 设置模型参数 model.conf 0.25 # 置信度阈值 model.iou 0.45 # NMS IoU阈值 # 进行推理 img path/to/image.jpg # 也可以是PIL图像、numpy数组、URL等 results model(img) # 查看结果 results.print() # 打印结果到控制台 results.show() # 显示图像 results.save() # 保存图像到 runs/detect/exp # 以Pandas DataFrame形式访问结果 predictions results.pandas().xyxy[0] print(predictions) # 包含 xmin, ymin, xmax, ymax, confidence, class, name这种方式为你将检测功能集成到自己的Web服务如Flask、FastAPI、桌面应用或自动化脚本中提供了极大的灵活性。部署心得Jetson等边缘设备对于NVIDIA Jetson Nano、Jetson Xavier NX等边缘设备TensorRT是必选项。导出时注意选择适合设备的精度FP16或INT8可以大幅提升速度。社区有大量关于jetson nano 部署yolov5的详细教程主要围绕安装JetPack SDK、配置环境、转换模型展开。Web服务使用FastAPI封装上面的Python推理代码提供RESTful API是当前最流行的云服务部署方式。注意处理好并发请求和GPU资源管理。速度优化如果推理速度不达标首先尝试导出为TensorRT或OpenVINO格式。其次可以尝试减小推理时的--img尺寸如从640降到320这会以牺牲少量精度换取显著的速度提升。最后考虑使用更小的模型变体如从yolov5s换到yolov5n。8. 进阶技巧与模型优化当你掌握了基础流程后以下进阶技巧可以帮助你进一步提升模型性能或适应特殊需求。8.1 处理小目标检测小目标检测是目标检测中的经典难题。如果你的数据中包含大量小物体可以尝试增大输入分辨率这是最有效的方法之一。将--img参数从640提高到1280甚至更高让模型“看”得更清楚。代价是显存消耗和计算量成倍增加。修改模型结构YOLOv5的Neck部分FPNPAN本身就有利于多尺度特征融合。可以尝试使用更深的网络如yolov5l或者借鉴其他论文中的注意力机制如搜索热词中的“ela注意力机制”但需要修改源码难度较高。数据增强在hyp.yaml文件中可以增强针对小目标的增强策略如更多的随机缩放、马赛克增强Mosaic等。8.2 训练灰度图像如果输入图像是灰度的1个通道而预训练模型是在RGB图像3个通道上训练的直接输入会导致维度不匹配。解决方法很简单在数据加载阶段将灰度图像复制到三个通道上。# 一种简单的实现方式在自定义数据集中重写 __getitem__ 方法 def __getitem__(self, index): ... img cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) # 以灰度模式读取 img cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 转换为3通道BGR ...更优雅的方式是修改YOLOv5数据加载部分的代码使其自动处理单通道图像。8.3 使用自定义网络结构或注意力机制社区有大量关于YOLOv5改进的研究如添加SE、CBAM、ECA等注意力模块或者替换主干网络为MobileNet、GhostNet等轻量化网络。这些通常需要你在models目录下修改或新建模型定义文件如yolov5s-se.yaml。在models/common.py中实现新的模块。修改models/yolo.py中的解析逻辑。使用新的YAML文件进行训练--cfg models/yolov5s-se.yaml。这是一个相对高阶的操作需要对模型结构和PyTorch有较深理解。建议先从复现成熟的改进方案开始。8.4 超参数调优实战手动调参是一门艺术。除了使用--evolve了解几个关键超参数的作用能让你更有方向学习率lr0最重要的参数。太大可能导致训练不稳定损失NaN太小则收敛慢。微调时通常从预训练使用的学习率如0.01的1/10开始0.001。动量momentum和权重衰减weight_decay用于优化器帮助模型跳出局部最优和防止过拟合。一般使用默认值即可。损失函数权重hyp.yaml中的cls_pw, obj_pw分别控制分类损失和物体性objectness损失的权重。如果你的任务中分类特别难可以适当增大cls_pw如果检测物体是否存在是关键如缺陷检测可以调整obj_pw。我的个人习惯是先用默认超参数和yolov5s快速跑一个baseline然后根据验证集指标有针对性调整--img、学习率和数据增强参数。只有在这些调整收益甚微时才会考虑更换更大的模型或进行耗时的超参数进化。9. 常见问题与故障排除实录在这一部分我汇总了在帮助他人和自身实践中遇到的高频问题及其解决方案。希望你能绕过这些坑。9.1 训练阶段问题问题CUDA out of memory (OOM)原因批次大小--batch或图像尺寸--img太大超出GPU显存。解决减小--batch如16-84。如果还不行减小--img如640-320。也可以尝试启用--rect模式减少填充内存。使用nvidia-smi命令监控显存使用情况。问题训练损失loss不下降或为NaN原因1学习率过高。这是最常见的原因。解决1在hyp.yaml文件中大幅降低lr0学习率例如从0.01降到0.001甚至0.0001。原因2数据标注有严重错误。例如标注框的坐标超出了图片范围归一化后1或0。解决2使用YOLOv5提供的--check-labels参数在训练前检查标签python train.py --data my_data.yaml --weights yolov5s.pt --check-labels。它会自动修正或删除有问题的标签。原因3数据集中存在大量无目标的“空标签”图片即.txt文件为空。解决3YOLOv5可以处理空标签但过多可能会影响训练。可以考虑过滤掉一部分或在hyp.yaml中调整obj_pw物体性损失权重。问题验证集mAP很低但训练集损失正常原因模型过拟合。它记住了训练集的噪声而非泛化特征。解决增加数据增强强度在hyp.yaml中调整hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear等参数。使用更小的模型如从yolov5m换到yolov5s。增加权重衰减weight_decay。收集更多、更多样化的训练数据是最根本的解决方法。启用早停--patience参数。9.2 推理与部署问题问题模型推理速度很慢解决确保在GPU上运行--device 0。导出为TensorRT或OpenVINO等优化格式。减小推理时的图像尺寸--img。使用更小的模型如yolov5n。在detect.py中使用--half参数进行半精度FP16推理能显著提升速度且精度损失很小。问题导出的ONNX/TensorRT模型精度下降或出错原因导出过程中的操作符不支持或版本不兼容。解决确保使用的torch,onnx,onnx-simplifier,tensorrt等库版本与YOLOv5要求兼容。尝试简化ONNX模型python -m onnxsim best.onnx best-sim.onnx。查看YOLOv5官方export.py脚本的说明和GitHub Issues很多问题已有解决方案。问题如何检测视频时保存结果视频解决detect.py默认就会保存结果视频。如果没保存检查--save-txt参数是否错误地导致了只保存标签。确保输出目录有写入权限。9.3 数据与标注问题问题我的类别和COCO不一样还需要加载预训练权重吗回答强烈建议加载。即使类别不同预训练权重提供的底层特征提取能力如边缘、纹理、形状检测器也是通用的。这比随机初始化权重要好得多。YOLOv5的模型结构最后一层是自适应匹配类别数的所以不用担心维度不匹配。问题标注工具生成的坐标格式不是YOLO格式怎么办解决大多数标注工具如LabelImg都支持导出为YOLO格式。如果只有VOC XML或COCO JSON格式需要写一个简单的转换脚本。网上有很多现成的转换代码。Roboflow平台也支持多种格式的互转。走过这一整套流程从环境搭建到模型部署你应该已经拥有了独立完成一个目标检测项目的能力。YOLOv5的强大之处在于它极大地降低了深度学习的应用门槛让开发者能更专注于数据和业务逻辑。记住在AI项目中数据质量和清洗往往占据了80%的工作量而模型训练和调参只是剩下的20%。不断迭代你的数据分析模型在哪些样本上失败有针对性地补充或修正数据才是提升模型性能最有效的“捷径”。最后保持耐心多实验多阅读社区讨论你会在实战中积累越来越丰富的经验。
返回列表