news 2026/8/15 4:05:47

YOLOv5实战:从零开始训练自定义目标检测模型全流程指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv5实战:从零开始训练自定义目标检测模型全流程指南

1. 项目概述:从零到一,亲手训练一个YOLOv5模型

如果你对AI感兴趣,尤其是计算机视觉里的目标检测,那么“YOLOv5”这个名字你一定不陌生。它就像一个“开箱即用”的瑞士军刀,速度快、精度高,而且社区生态极其丰富,让很多复杂的任务变得触手可及。但很多新手朋友卡在了第一步:看懂了原理,也下载了代码,但面对自己的一堆图片,却不知道如何让模型“认识”它们,训练出一个属于自己的检测器。网上的教程要么太老,要么步骤跳跃,环境配置、数据准备、训练调参,每一步都可能是个坑。

这篇内容,就是为你准备的。我将以一个从业者的视角,带你完整走一遍用YOLOv5训练自己数据集的流程。我们不谈空洞的理论,只聚焦于“怎么做”。从环境搭建、数据标注、配置文件修改,到启动训练、评估模型,最后用训练好的模型进行推理,每一步都有详细的命令和截图,并解释清楚背后的逻辑。无论你是学生、工程师,还是对AI有浓厚兴趣的爱好者,只要跟着步骤走,你就能亲手“喂”出一个能识别特定目标的AI模型。比如,你可以让它学会识别你花园里的不同花卉、仓库里的零件瑕疵,或者统计视频中的人流车流。整个过程,就像教一个孩子认东西,只不过我们用的是代码和图片。

2. 核心思路与工具选型:为什么是YOLOv5?

在动手之前,我们得先明白为什么选择YOLOv5,以及我们整个项目的核心思路是什么。目标检测的模型很多,从古老的R-CNN系列到YOLO系列,再到后来的DETR等Transformer模型,各有优劣。

2.1 为什么选择YOLOv5?

对于新手和大多数工业应用场景,YOLOv5至今仍是一个极佳的选择,原因有以下几点:

  1. 极致的易用性:这是它最大的优点。Ultralytics公司将其工程化做到了极致。一个git clone,一个pip install -r requirements.txt,环境就差不多了。训练命令简单到只需指定数据配置文件和几个参数。这种“一键式”的体验极大地降低了入门门槛。
  2. 活跃的社区与完善的文档:YOLOv5的GitHub仓库issue区非常活跃,你遇到的90%的问题都能在那里找到答案或讨论。其官方文档和教程也在不断更新,涵盖了从训练到部署的方方面面。
  3. 优秀的精度-速度平衡:YOLOv5提供了从n(最小最快)到x(最大最准)多个预训练模型尺寸。你可以根据你的硬件条件和精度要求灵活选择。在主流GPU上,即使是YOLOv5s也能达到实时检测(>30 FPS)和高精度。
  4. 完整的工具链:它不仅仅是一个模型,更是一个工具箱。除了训练,它还内置了模型验证(计算mAP等指标)、模型导出(到ONNX、TorchScript、CoreML等格式)、模型推理(对图像、视频、流媒体)等一系列功能,省去了你到处找工具拼接的麻烦。
  5. 数据格式友好:YOLOv5使用的数据格式是经典的“YOLO格式”,即每个图像对应一个.txt文件,里面用归一化后的中心坐标和宽高表示边界框。这种格式简单明了,很多标注工具(如LabelImg、Roboflow)都直接支持导出。

相比之下,虽然YOLOv8、YOLOv9等后续版本在性能上可能有提升,但YOLOv5的稳定性、社区资源和学习资料目前仍然是最丰富的,对于“训练自己的数据集”这个目标来说,它是最稳妥的起点。

2.2 项目核心思路拆解

我们的目标很明确:让YOLOv5模型学会识别我们自定义的类别。整个流程可以抽象为以下几个核心步骤:

  1. 环境准备:搭建一个能运行PyTorch和YOLOv5代码的Python环境。
  2. 数据准备:收集图片,进行标注,并整理成YOLOv5要求的目录结构。
  3. 配置修改:告诉模型我们的数据在哪里,以及要识别哪些类别。
  4. 模型训练:启动训练过程,让模型从数据中学习。
  5. 模型评估:使用模型未见过的图片测试其性能,查看指标如精度、召回率、mAP。
  6. 模型使用:用训练好的模型对新图片或视频进行预测。

这个思路是通用的,无论你检测什么目标,流程都大同小异。接下来,我们就深入到每一个环节的细节中。

3. 环境搭建与项目初始化:打造你的AI工作台

工欲善其事,必先利其器。一个干净、可控的环境是成功的第一步。强烈建议使用Anaconda或Miniconda来管理Python环境,避免包版本冲突。

3.1 创建并激活虚拟环境

打开你的终端(Windows用Anaconda Prompt或CMD,Linux/macOS用终端),执行以下命令:

# 创建一个名为yolov5的Python环境,指定Python版本为3.8(3.7-3.10都行,3.8最兼容) conda create -n yolov5 python=3.8 # 激活这个环境 conda activate yolov5

激活后,你的命令行提示符前面应该会显示(yolov5),表示你已经在这个独立的环境中了。

3.2 克隆YOLOv5仓库并安装依赖

YOLOv5的官方代码托管在GitHub上。我们将其克隆到本地。

# 克隆仓库(如果慢,可以考虑使用Gitee镜像) git clone https://github.com/ultralytics/yolov5.git cd yolov5

进入目录后,安装所需的Python包。requirements.txt文件里列出了所有依赖。

# 使用pip安装依赖,建议使用清华源加速 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

注意:这个过程会安装PyTorch。requirements.txt里默认的PyTorch安装命令可能不包含CUDA(GPU支持)。如果你有NVIDIA显卡并希望使用GPU加速训练(这能快几十倍),你需要根据你的CUDA版本手动安装PyTorch。可以先运行nvidia-smi查看CUDA版本,然后去 PyTorch官网 获取对应的安装命令。例如,对于CUDA 11.8:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

安装完PyTorch后,再执行pip install -r requirements.txt安装其他依赖。

安装完成后,你可以运行一个简单的命令来验证环境和代码是否正常:

python detect.py --source data/images/bus.jpg --weights yolov5s.pt

这条命令会用官方预训练的小模型yolov5s.pt去检测一张示例图片(公交车)。如果一切正常,你会在runs/detect/exp目录下看到生成的结果图片,上面画出了检测到的边界框。这证明你的环境已经准备好了。

4. 数据集准备与标注:教会模型“看”什么

这是整个过程中最耗时但也最核心的一步。模型的好坏,很大程度上取决于你喂给它的数据质量。

4.1 数据收集与原则

你需要收集包含你待检测目标的图片。例如,如果你想检测苹果和香蕉,就需要大量包含苹果和香蕉的图片。数据收集有几个原则:

  • 多样性:目标应该在各种场景、光照、角度、尺度下出现。如果只拍正面,模型可能不认识侧面。
  • 代表性:数据分布应尽可能接近模型将来要应用的真实场景。
  • 数量:这没有绝对标准,但通常一个类别至少需要几百张图片。数据越多,模型泛化能力可能越强,但也要考虑标注成本。
  • 质量:图片清晰度要高,目标要明确。过于模糊或目标极小的图片可能带来负面影响。

将收集到的所有图片放在一个文件夹里,例如my_dataset/images/

4.2 数据标注工具与流程

我们需要为每张图片中的目标画框(边界框)并打上类别标签。推荐使用LabelImg这个开源工具,它直观易用,且直接支持导出YOLO格式。

  1. 安装LabelImg

    # 在之前激活的yolov5环境中安装 pip install labelImg # 安装后,直接在命令行输入 labelImg 即可启动 labelImg
  2. 标注流程

    • 打开LabelImg,点击“Open Dir”选择你的图片目录(my_dataset/images/)。
    • 点击“Change Save Dir”,设置标注文件(.txt)的保存目录。强烈建议设置为my_dataset/labels/,这样图片和标签能分开管理,也符合后续的目录结构要求。
    • 在右侧,点击“PascalVOC”切换到“YOLO”格式。
    • 开始标注:按W键调出画框工具,框住目标。在弹出的窗口中输入类别名称(如apple),点击OK。
    • 一张图标注完后,按Ctrl+S保存,然后按D键切换到下一张。
  3. 创建类别文件: 在my_dataset目录下,创建一个名为data.yaml的文件。这个文件是YOLOv5的数据配置文件,是连接你的数据和模型的桥梁。

    # my_dataset/data.yaml path: ../my_dataset # 数据集根目录的相对路径(相对于yolov5代码目录) train: images/train # 训练集图片路径,相对于path val: images/val # 验证集图片路径,相对于path # test: images/test # 测试集(可选) # 类别数量与名称 nc: 2 # 你的目标类别数量,例如2(苹果和香蕉) names: ['apple', 'banana'] # 类别名称列表,顺序很重要,索引0对应‘apple’,1对应‘banana’

    重要提示names列表的顺序必须与你标注时使用的类别名称一致,并且索引(0, 1, 2...)将作为模型内部的类别ID。后续所有预测结果中的类别数字,都对应这里的索引。

4.3 数据集划分与目录结构

我们不能把所有数据都用来训练,需要留出一部分不参与训练,用于验证模型在“没见过”的数据上的表现,防止过拟合。通常按70%训练,20%验证,10%测试(或8:1:1)的比例随机划分。

你可以手动复制图片,但更推荐写一个简单的Python脚本自动完成。最终,你的数据集目录结构应该如下所示:

my_dataset/ ├── data.yaml # 数据配置文件 ├── images/ # 所有图片 │ ├── train/ # 训练集图片 │ │ ├── img1.jpg │ │ └── ... │ └── val/ # 验证集图片 │ ├── img2.jpg │ └── ... └── labels/ # 所有标签文件(与images一一对应) ├── train/ │ ├── img1.txt │ └── ... └── val/ ├── img2.txt └── ...

确保images/train里的每个jpg文件,在labels/train里都有一个同名的txt文件。标签文件内容格式示例(img1.txt):

0 0.5 0.5 0.3 0.4 1 0.7 0.3 0.2 0.2

每一行代表一个目标。第一列是类别索引(对应data.yaml中的names),后面四个数字是归一化后的中心x坐标、中心y坐标、宽度、高度。

5. 模型训练详解:让学习过程运转起来

数据准备好了,环境也OK了,现在可以开始最激动人心的环节——训练。

5.1 理解训练命令与参数

YOLOv5的训练入口是train.py。其核心参数并不多,但每一个都至关重要。

python train.py --img 640 --batch 16 --epochs 100 --data my_dataset/data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --name my_first_train

我们来拆解这些参数:

  • --img 640:输入图片的尺寸。YOLOv5会统一将图片缩放到这个尺寸进行训练。更大的尺寸(如1280)可能提升精度,但会显著增加显存消耗和训练时间。640是一个在速度和精度间取得良好平衡的常用值。
  • --batch 16:批大小。一次迭代送入模型多少张图片。越大训练越稳定,速度可能越快,但需要更多显存。如果出现“CUDA out of memory”错误,首先尝试减小batch(如改为8或4)。
  • --epochs 100:训练轮数。整个训练集被完整遍历一次称为一个epoch。轮数太少模型学不够,太多可能导致过拟合。100是一个常见的起点,你可以根据验证集指标变化情况提前终止。
  • --data my_dataset/data.yaml:指向我们刚才创建的数据配置文件。
  • --cfg models/yolov5s.yaml:模型结构配置文件。我们选择yolov5s.yaml,这是最小的模型,训练快,适合实验。如果你想追求更高精度,可以选yolov5m.yamlyolov5l.yaml,但需要更长的训练时间和更大的显存。
  • --weights yolov5s.pt:初始权重文件。这里我们使用在COCO数据集上预训练过的yolov5s.pt这是关键的一步,称为迁移学习。模型已经具备了通用的物体检测能力(边缘、纹理、形状等),我们在此基础上针对自己的特定目标进行微调,这比从零开始训练要快得多、好得多。
  • --name my_first_train:本次训练实验的名称。所有输出(日志、模型权重、可视化结果)都会保存在runs/train/my_first_train目录下。

5.2 启动训练与监控

在终端执行上述命令(注意路径,确保在yolov5代码根目录下,并且data.yaml的路径正确)。训练开始后,你会看到类似下面的输出:

Starting training for 100 epochs... Epoch gpu_mem box obj cls labels img_size 0/99 2.1G 0.1xxx 0.0xxx 0.0xxx 16 640: 100%|██████████| 100/100 [01:23<00:00, 1.20it/s] Class Images Labels P R mAP@.5 mAP@.5:.95: 100%|██████████| 10/10 [00:05<00:00, 1.80it/s] all 100 500 0.xxx 0.xxx 0.xxx 0.xxx
  • gpu_mem:GPU显存使用情况。
  • box,obj,cls:分别是边界框回归损失、目标性损失、分类损失。随着训练进行,这些损失值应该总体呈下降趋势。
  • P(Precision),R(Recall),mAP@.5,mAP@.5:.95:这是在每个epoch结束后,在验证集上计算的指标。它们是衡量模型性能的关键。
    • 精度(Precision):模型预测为正的样本中,真正为正的比例。“查得准不准”。
    • 召回率(Recall):所有真实的正样本中,被模型预测出来的比例。“查得全不全”。
    • mAP@.5:在IoU(交并比)阈值为0.5时的平均精度均值。这是目标检测领域最核心的指标之一,值越高越好。
    • mAP@.5:.95:在IoU阈值从0.5到0.95(步长0.05)区间内mAP的平均值,是更严格的指标。

训练过程中,YOLOv5会自动在runs/train/my_first_train目录下生成很多有用的文件:

  • weights/best.pt:训练过程中在验证集上表现最好的权重文件。
  • weights/last.pt:最后一个epoch的权重文件。
  • results.png:损失和指标随epoch变化的曲线图,是判断训练状态、是否过拟合/欠拟合的重要依据。
  • confusion_matrix.png:混淆矩阵,可视化模型在各个类别上的分类错误情况。

5.3 训练过程的心得与调参技巧

  1. 耐心观察损失曲线:训练初期损失下降很快是正常的。重点观察后期,训练损失持续下降而验证损失开始上升或波动,这可能是过拟合的迹象。此时可以考虑提前停止训练(Early Stopping),或者增加数据增强、使用更小的模型。
  2. 关注mAP指标:我们的最终目标是提升mAP。通常,mAP会随着训练轮数增加而上升,然后逐渐趋于平稳。当连续多个epoch的mAP不再显著提升时,就可以考虑停止训练了。
  3. 学习率与优化器:YOLOv5默认使用SGD优化器,并带有学习率热身(Warmup)和余弦退火(Cosine Annealing)调度。对于大多数情况,默认设置工作得很好。如果你修改了模型大小或数据集,可以微调初始学习率--lr0(默认0.01)。
  4. 数据增强:YOLOv5默认开启了强大的在线数据增强(如 mosaic, mixup, 色彩抖动等),这能极大提升模型的泛化能力。除非你有特殊原因(例如医学影像对形变敏感),否则不要关闭它。相关参数在data/hyps/hyp.scratch-low.yaml等配置文件中。
  5. 显存不足怎么办:如果遇到CUDA内存错误,依次尝试:减小--batch-size;减小--img-size(如从640到416);使用更小的模型(从s换成n);使用梯度累积(--accumulate,例如--accumulate 2相当于有效batch size翻倍但显存占用不变)。

6. 模型评估与性能分析:给你的模型打个分

训练结束后,我们得到了best.pt模型。但它到底有多好?我们需要用验证集(或者预留的测试集)进行系统评估。

6.1 使用val.py进行标准评估

YOLOv5提供了专门的验证脚本val.py。使用它来计算我们在训练日志里看到的那些指标。

python val.py --weights runs/train/my_first_train/weights/best.pt --data my_dataset/data.yaml --img 640 --batch 32 --task val --name my_evaluation
  • --weights:指定要评估的模型权重。
  • --data:同样的数据配置文件。
  • --task val:指定使用验证集进行评估。如果你有独立的测试集,可以在data.yaml中指定test路径,然后使用--task test

运行后,你会得到一个详细的评估报告,包括每个类别的精度、召回率、mAP,以及整体的性能指标。同时,它还会在runs/val/my_evaluation目录下生成可视化结果,如预测框与真实框的对比图,这对于定性分析模型错误非常有帮助。

6.2 核心指标解读与问题诊断

看评估报告,要抓住几个关键点:

  1. 各类别mAP是否均衡?如果“苹果”的mAP@0.5有0.9,而“香蕉”只有0.6,说明模型对香蕉的检测能力较差。可能的原因有:香蕉的样本数量不足、图片中香蕉的形态或背景过于单一、标注质量有问题。解决方法就是针对性地补充“困难样本”。
  2. 精度(P)和召回率(R)的平衡:高精度低召回,说明模型很保守,只对它非常确定的目标才进行预测,漏检很多。高召回低精度,说明模型很激进,预测了很多框,但其中误报(把背景当目标)也很多。你可以通过调整预测时的置信度阈值(--conf-thres,默认0.25)来调整这个平衡。提高阈值会提升精度但降低召回,反之亦然。
  3. 查看混淆矩阵:打开生成的confusion_matrix.png。对角线上的亮色表示分类正确。如果发现某个类别(如类别1“香蕉”)经常被误判为另一个类别(如类别0“苹果”),说明这两个类别在视觉上可能比较相似,模型难以区分。你需要检查这两类物体的图片,看看是否真的容易混淆,并考虑收集更多有区分度的样本。

6.3 过拟合与欠拟合的判断

  • 过拟合:模型在训练集上表现极好(损失很低,精度很高),但在验证集上表现很差。在results.png中表现为训练损失持续下降,验证损失在某个点后开始上升。对策:收集更多训练数据;加强数据增强;使用模型正则化技术(如DropOut,但YOLO结构已内置);尝试更小的模型;减少训练轮数(早停)。
  • 欠拟合:模型在训练集和验证集上的表现都不好(损失高,精度低)。在results.png中表现为训练损失和验证损失都下降得很慢或很早就停滞了。对策:增加模型复杂度(换用更大的YOLOv5模型,如ml);减少数据增强(如果增强过于激进可能破坏了原始信息);增加训练轮数;检查数据标注是否有大量错误。

7. 模型推理与应用:让你的模型“干活儿”

模型评估合格后,就可以投入实际使用了。YOLOv5的detect.py脚本让推理变得非常简单。

7.1 对单张图片、批量图片、视频和摄像头进行检测

# 检测单张图片 python detect.py --weights runs/train/my_first_train/weights/best.pt --source path/to/your/test_image.jpg --conf 0.5 # 检测一个文件夹下的所有图片 python detect.py --weights runs/train/my_first_train/weights/best.pt --source path/to/image_folder/ --conf 0.5 # 检测视频文件 python detect.py --weights runs/train/my_first_train/weights/best.pt --source path/to/video.mp4 --conf 0.5 # 使用摄像头(默认摄像头索引为0) python detect.py --weights runs/train/my_first_train/weights/best.pt --source 0 --conf 0.5
  • --weights:指定训练好的模型。
  • --source:指定输入源,可以是图片路径、文件夹路径、视频路径、摄像头索引、甚至是URL。
  • --conf:置信度阈值。高于此阈值的检测框才会被显示。你可以根据之前评估的精度-召回率情况调整这个值。如果误报多,就调高(如0.6);如果漏检多,就调低(如0.3)。
  • --save-txt:加上这个参数,会将检测结果(类别、坐标)保存为YOLO格式的txt文件,便于后续分析。
  • --save-conf:保存结果时,同时保存每个检测框的置信度。

检测结果默认会保存在runs/detect/exp(或exp2,exp3...)目录下。图片和视频上会画出检测框并标出类别和置信度。

7.2 推理结果解析与后处理

detect.py运行后,除了保存可视化图像,还会在终端打印检测结果摘要。对于更程序化的应用,你通常需要直接获取检测框数据。这时,最好的方式是直接调用YOLOv5的模型API,而不是通过命令行脚本。下面是一个简单的Python示例:

import torch import cv2 # 加载自定义模型 model = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/train/my_first_train/weights/best.pt', force_reload=True) # 或者使用本地代码 # from models.experimental import attempt_load # model = attempt_load('runs/train/my_first_train/weights/best.pt') # 设置模型参数 model.conf = 0.5 # 置信度阈值 model.iou = 0.45 # NMS的IoU阈值 # 读取图片 img = cv2.imread('path/to/your/image.jpg') # 进行推理 results = model(img) # 解析结果 predictions = results.pandas().xyxy[0] # 转换为Pandas DataFrame,格式为 (xmin, ymin, xmax, ymax, confidence, class, name) print(predictions) # 遍历每一个检测到的目标 for index, row in predictions.iterrows(): x1, y1, x2, y2 = int(row['xmin']), int(row['ymin']), int(row['xmax']), int(row['ymax']) confidence = row['confidence'] class_name = row['name'] print(f"Detected {class_name} with confidence {confidence:.2f} at [{x1}, {y1}, {x2}, {y2}]") # 你可以在这里画框,或者将坐标信息发送给其他程序 # 直接显示带结果的结果图片 results.show() # 或者保存 results.save('output.jpg')

这段代码展示了如何加载模型、设置参数、进行推理并获取结构化的检测结果。results.xyxy[0]返回的是一个Tensor,而results.pandas().xyxy[0]将其转为更易处理的DataFrame。你可以轻松地集成这个流程到你的Python项目中。

8. 常见问题与避坑指南实录

在实际操作中,你几乎一定会遇到一些问题。这里我整理了一些最常见的问题和解决方法,这些都是我踩过坑后总结的经验。

8.1 环境与依赖问题

  • 问题:ImportError: libGL.so.1: cannot open shared object file(Linux)

    • 原因:OpenCV的GUI依赖库缺失。
    • 解决:安装系统库:sudo apt-get update && sudo apt-get install libgl1-mesa-glx
  • 问题:训练时出现CUDA out of memory

    • 原因:批处理大小或图片尺寸太大,超出GPU显存。
    • 解决
      1. 减小--batch-size(如从16降到8)。
      2. 减小--img-size(如从640降到416)。
      3. 使用更小的模型(从yolov5s.yaml换成yolov5n.yaml)。
      4. 使用梯度累积--accumulate 2,这会在内部累积2个批次的梯度再更新一次权重,模拟更大的batch size但显存占用不变。
      5. train.py中尝试启用--multi-scale训练,但这对显存帮助有限。
  • 问题:ModuleNotFoundError: No module named ‘torch’或其他包找不到

    • 原因:没有在正确的conda虚拟环境中,或者依赖没有安装完整。
    • 解决:确保已使用conda activate yolov5激活环境,并重新运行pip install -r requirements.txt

8.2 数据与训练问题

  • 问题:训练时损失(loss)为NaN或突然变得巨大

    • 原因
      1. 学习率设置过高。这是最常见的原因。
      2. 数据标注有严重错误,例如坐标超出了[0,1]的范围。
      3. 数据集中存在损坏的图片文件。
    • 解决
      1. 尝试大幅降低学习率--lr0,例如从0.01降到0.001。
      2. 仔细检查你的标签文件(.txt),确保所有坐标值都在0到1之间。写个脚本批量检查。
      3. 检查图片文件是否能正常打开。可以用OpenCV批量读取一下。
  • 问题:训练了很久,mAP一直很低(比如低于0.3)

    • 原因
      1. 数据量太少,模型学不到有效特征。
      2. 数据标注质量差,框不准或类别标错。
      3. 类别不平衡,某个类别的样本极少。
      4. 选择的预训练权重与任务差异太大(但用COCO预训练权重做下游任务通常没问题)。
    • 解决
      1. 增加每个类别的数据量,至少几百张。
      2. 重新审查和修正标注,特别是边界框是否紧密贴合目标。
      3. 对样本少的类别进行过采样,或者使用数据增强专门为这些类别生成更多样本。
      4. 可以尝试从零开始训练(--weights ‘’),但需要更多数据和epoch,且效果通常不如迁移学习。
  • 问题:模型预测时置信度普遍很低

    • 原因:训练可能不充分,或者训练数据和测试数据分布差异太大(例如训练集是白天的图,测试集是夜晚的图)。
    • 解决
      1. 增加训练轮数--epochs
      2. 检查并确保训练时数据增强是开启的(默认是开的),这能提升模型鲁棒性。
      3. 收集与测试环境更接近的训练数据。

8.3 推理与应用问题

  • 问题:检测速度很慢

    • 原因
      1. 使用了过大的模型(如yolov5x.pt)。
      2. 推理图片尺寸--img-size设置得过大。
      3. 在CPU上运行。
    • 解决
      1. 换用更小的模型(sn)。
      2. 减小推理尺寸,如--img 416。注意,训练和推理的尺寸可以不同,但性能可能会轻微下降。
      3. 确保PyTorch安装了CUDA版本,并且推理时在使用GPU。在代码中,可以通过model.to(‘cuda’)将模型放到GPU上。
  • 问题:同一个目标被重复检测出多个框

    • 原因:非极大值抑制(NMS)的阈值--iou-thres设置得过高。
    • 解决:NMS用于合并重叠的框。默认值是0.45。如果同一个目标出现多个框,可以适当降低这个值(如0.3),让合并更激进。在detect.py中使用--iou 0.3

训练自己的YOLOv5模型就像完成一个精密的实验,每一步的细节都影响着最终的结果。从环境配置的小心翼翼,到数据标注的枯燥繁琐,再到看到损失曲线下降、mAP上升时的兴奋,最后到模型成功识别出目标的成就感,这个过程本身就是对AI应用最生动的理解。我个人的体会是,前期数据工作的质量决定了模型性能的上限,而耐心的调参和问题排查则是达到这个上限的保证。不要害怕出错,终端里红色的报错信息是你最好的老师;也不要迷信参数,多动手实验,用验证集指标说话。当你跑通整个流程后,你会发现,让AI“看见”并“理解”你的世界,并没有想象中那么遥远。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 4:02:24

深入解析TCP协议:从三次握手到网络调优的可靠传输实战

1. 从“你好”到“收到”&#xff1a;TCP协议为什么是互联网的“可靠邮差”如果你用过微信发消息&#xff0c;或者在网上购物&#xff0c;你大概率已经和TCP协议打过无数次交道了。你发送的每一条文字、支付的每一笔订单&#xff0c;背后都离不开这个默默无闻的“邮差”。它的全…

作者头像 李华
网站建设 2026/8/15 4:00:57

LLM编程副驾驶实战:从环境部署到批量任务处理的完整指南

这次我们来看一个关于如何用大语言模型&#xff08;LLM&#xff09;提升编程生产力的主题。这不是一个具体的开源项目&#xff0c;而是一个广泛的技术实践领域。核心在于&#xff0c;如何将像 ChatGPT、Claude、DeepSeek 这类 LLM 工具&#xff0c;从“偶尔问问代码”的聊天伙伴…

作者头像 李华
网站建设 2026/8/15 3:59:55

《模拟人生4》anadius64.dll丢失的完整修复指南

1. 问题定位&#xff1a;当《模拟人生4》提示丢失anadius64.dll 如果你正沉浸在《模拟人生4》的建造或生活模式中&#xff0c;突然弹出一个令人心塞的错误窗口&#xff0c;提示“无法启动此程序&#xff0c;因为计算机中丢失 anadius64.dll”&#xff0c;或者类似的“找不到 an…

作者头像 李华
网站建设 2026/8/15 3:59:05

LSTM训练集准确率低:系统性诊断与优化实战指南

1. 项目概述&#xff1a;当LSTM在训练集上“学不会”时遇到LSTM模型在训练集上准确度死活上不去的情况&#xff0c;就像你请了一位顶尖家教&#xff0c;结果孩子连课本上的例题都做不对&#xff0c;这感觉确实让人抓狂。训练集&#xff0c;顾名思义&#xff0c;是模型用来“学习…

作者头像 李华
网站建设 2026/8/15 3:56:43

数学建模实战:响应面法与遗传算法优化化工过程

1. 项目概述&#xff1a;一次从混沌到清晰的建模实战复盘又到了一年一度的“国赛”季节&#xff0c;办公室里几个带队的年轻老师又在为选题发愁。他们翻出往年的优秀论文&#xff0c;总觉得那些思路清晰、图表漂亮的解决方案像是“天外飞仙”&#xff0c;不知道学生是怎么在三天…

作者头像 李华