news 2026/4/29 11:20:42

YOLO-v5目标检测入门:从环境搭建到训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO-v5目标检测入门:从环境搭建到训练

YOLO-v5目标检测入门:从环境搭建到训练

在工业质检、智能监控和自动驾驶等现实场景中,快速准确地识别特定目标已成为一项基础能力。而YOLO系列模型,尤其是YOLO-v5,凭借其简洁的工程结构与出色的推理效率,已经成为许多开发者落地视觉任务的首选工具。

本文不走“理论先行”的老路,而是带你从零开始实战一次完整的自定义目标检测项目——以“金属裂纹检测”为例,手把手完成环境配置、数据标注、模型训练到效果验证的全流程。整个过程无需深厚的数学背景,只要你会基本的命令行操作,就能跑通属于你自己的AI检测模型。


我们先从最基础但最关键的一步开始:环境准备。

要让YOLO-v5顺利运行,核心依赖是PyTorch + CUDA + Python虚拟环境。推荐使用NVIDIA GPU(如RTX 3080)配合CUDA加速训练,当然,如果你只是做小规模实验或推理,CPU也能跑起来,只是速度会慢不少。

首先克隆官方仓库:

git clone https://github.com/ultralytics/yolov5.git cd yolov5

接着创建独立的Python环境,避免包冲突。这里推荐使用Miniconda:

conda create -n yolov5 python=3.9 conda activate yolov5

然后安装依赖项。由于某些库在国外源下载缓慢,建议使用国内镜像(如清华源)提升速度:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

⚠️ 注意版本兼容性问题!以下组合经过实测稳定,适用于YOLOv5 v6.1/v7.0版本:

库名推荐版本
torch1.12.1+cu113
torchvision0.13.1+cu113
torchaudio0.12.1
pandas2.0.3
Pillow9.5.0
numpy1.25.1
matplotlib3.7.2

如果遇到No module named 'torch'错误,请确认是否安装了带CUDA支持的PyTorch版本。可通过PyTorch官网获取对应命令。

安装完成后,用官方脚本测试环境是否正常:

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

这个命令会自动下载轻量级预训练模型yolov5s.pt,并对data/images中的示例图片进行推理。结果保存在runs/detect/exp/目录下,打开可以看到人、车、交通标志等都被成功框出。

✅ 到这一步,说明你的环境已经就绪,可以进入真正的“定制化”阶段了。


接下来的关键是:让模型学会识别你想检测的东西。默认的YOLO-v5只能识COCO数据集里的80类物体,比如猫狗、汽车、椅子。但我们的目标是“金属裂纹”,这就需要自己准备数据集。

第一步是图像标注。推荐使用开源工具LabelImg,它简单易用,支持YOLO格式输出。

安装方式如下:

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

启动后通过图形界面操作:

labelimg

使用流程很简单:
1. 点击“Open Dir”加载图像文件夹;
2. 按W键画矩形框选目标区域;
3. 输入标签名(如 crack);
4. 保存后自动生成.txt文件,内容为归一化的边界框坐标。

📌 示例标签文件内容:

0 0.485 0.512 0.320 0.615

含义:class_id x_center y_center width height,全部基于图像尺寸做了比例归一化。

博主在此任务中标注了62张工业图像(训练集42张,验证集20张),每张图包含不同程度的表面裂纹。这类数据对于缺陷检测、自动化巡检非常有价值。

标注完成后,需按YOLO-v5规定的目录结构组织数据。在项目根目录新建datasets/文件夹:

datasets/ ├── images/ │ ├── train/ # 训练图片 │ └── val/ # 验证图片 └── labels/ ├── train/ # 对应标签文件 └── val/

确保每个.jpg图片与其同名的.txt标签一一对应(如 crack_001.jpg ↔ crack_001.txt)。最终整体结构如下:

yolov5/ ├── models/ ├── utils/ ├── data/ ├── datasets/ │ ├── images/train/*.jpg │ └── labels/train/*.txt └── ...

这种结构是YOLO-v5默认读取数据的方式,不能随意更改路径或命名规则。


现在数据有了,下一步是告诉模型:“我要检测什么?有多少类?”

这需要编写一个YAML配置文件。在data/目录下新建crack.yaml

# crack.yaml train: ../datasets/images/train val: ../datasets/images/val nc: 1 # 类别数量(仅裂纹一类) names: ['crack'] # 类别名称列表

这个文件将被训练脚本引用,用于定位数据路径和解析类别信息。你可以复制data/coco.yaml作为模板修改。

同时,还要调整模型本身的类别数。YOLO-v5原始模型是为80类设计的,我们需要修改其配置文件。

编辑models/yolov5s.yaml,找到这一行:

nc: 80 # number of classes

改为:

nc: 1

否则会在训练时报错维度不匹配:

Expected input batch_size (1) to match target batch_size (80)

虽然我们只有一类,但依然可以加载yolov5s.pt的预训练权重——因为主干网络(Backbone)学到的边缘、纹理等通用特征仍然有用,能显著加快收敛速度。


一切就绪,终于可以启动训练了!

执行以下命令开始训练:

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

参数说明:
---img: 输入图像分辨率,默认缩放到640×640;
---batch: 批次大小,根据GPU显存调整(RTX 3080可设16);
---epochs: 训练轮次,一般100~300足够;
---data: 指定数据配置文件;
---cfg: 使用哪个模型结构;
---weights: 初始化权重,推荐用预训练模型;
---name: 实验名称,结果保存在runs/train/{name}/

首次运行时会自动下载yolov5s.pt(约27MB),请保持网络畅通。

训练过程中终端会实时显示损失值(Loss)、精度(Precision)、召回率(Recall)以及最重要的mAP@0.5指标。这些数值会随着epoch推进逐渐优化。

训练结束后,所有产物都会保存在runs/train/crack_exp/目录中:

runs/train/crack_exp/ ├── weights/ │ ├── best.pt # mAP最高的模型权重 │ └── last.pt # 最终轮次的权重 ├── results.png # 各项指标变化曲线 ├── labels.jpg # 真值与预测框对比图 └── opt.yaml # 超参数记录

重点关注results.png中的mAP@0.5曲线。理想情况下应达到0.85以上。若初期波动较大,可能是学习率偏高,可在train.py中微调hyp参数。


训练完成后,最关键的问题来了:模型到底能不能用?

我们来做一个实际推理测试:

python detect.py \ --weights runs/train/crack_exp/weights/best.pt \ --source inference/images/test_crack.jpg \ --conf 0.5

参数解释:
---weights: 使用最佳权重;
---source: 支持单图、视频、摄像头甚至网络流;
---conf: 设置置信度阈值,过滤低分误检。

检测结果保存在runs/detect/expN/下,原图上叠加了边界框和标签。

🎯 实际表现示例:

在一张光照不均、背景复杂的金属板图像中,模型成功定位出一条细微裂纹,位置准确且无明显漏检或多检。即使部分区域反光强烈,模型仍表现出良好的鲁棒性。

这说明训练是成功的。你可以继续扩展数据集、尝试更大的模型(如yolov5l),或者加入更多数据增强策略进一步提升性能。


在实际操作中,你也可能会遇到一些常见问题,这里列出几个高频坑点及解决方案:

❗ 报错ModuleNotFoundError: No module named 'git'

这是因为在train.py中调用了Git模块记录代码版本。解决方法有两个:

  1. 安装 gitpython:
    bash pip install gitpython

  2. 或者在train.py开头添加屏蔽语句:
    python import os os.environ["GIT_PYTHON_REFRESH"] = "quiet"

❗ CUDA out of memory 显存溢出

当设置过大的--batch时容易触发。应对策略包括:
- 减小批次大小(如从16降到8)
- 使用更轻量模型(如yolov5s替代yolov5x)
- 启用梯度累积:添加--gradient_accumulations 4参数,模拟大batch效果

✅ 实用技巧汇总

技巧建议
数据增强默认已启用Mosaic和随机裁剪,可在train.py中调节强度
多GPU训练添加--device 0,1实现并行训练,提升吞吐量
模型导出使用export.py转换为ONNX/TensorRT,便于部署到边缘设备
超参数优化添加--evolve启动遗传算法自动调参,寻找最优超参组合

YOLO-v5之所以能在工业界广泛落地,不只是因为它够快、够准,更重要的是它的工程友好性:清晰的目录结构、完善的文档、开箱即用的脚本,使得即使是刚入门的新手也能在一天内完成一个完整项目的闭环。

从环境搭建到训练部署,你其实已经掌握了现代目标检测的核心工作流。未来还可以在此基础上延伸:
- 尝试更新的YOLO-v8 或 YOLO-v10,获得更好的精度与速度平衡;
- 结合DeepSORT实现多目标跟踪,应用于行为分析;
- 将模型导出并部署到Jetson Nano/TX2等边缘设备,实现端侧实时推断。

掌握YOLO,就像拿到了一把打开计算机视觉应用大门的钥匙。现在,轮到你去构建属于自己的智能检测系统了。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

基于深度学习的安全帽检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

摘要 安全帽检测作为计算机视觉在工业安全领域的重要应用,对于预防工地安全事故具有重大意义。本文详细介绍了一种基于深度学习的安全帽检测系统,该系统采用YOLO系列算法(YOLOv5/YOLOv6/YOLOv7/YOLOv8/YOLOv10)进行目标检测,并配备了直观的用户界面。文章将深入探讨系统架…

作者头像 李华
网站建设 2026/4/29 0:29:55

LobeChat能否助力智慧城市?公共事务处理新方式

LobeChat能否助力智慧城市?公共事务处理新方式 在城市治理日益复杂的今天,市民对政务服务的期待早已不再局限于“能办”,而是追求“好办、快办、随时办”。一个简单的落户咨询,可能需要拨打多个电话、翻阅数个网页,甚至…

作者头像 李华
网站建设 2026/4/22 0:30:50

ACE-Step:让普通人也能生成结构化旋律

ACE-Step:让普通人也能生成结构化旋律 在短视频、在线课程和独立游戏内容爆炸式增长的今天,一个现实问题困扰着无数创作者:如何快速获得一段贴合情绪、结构完整又不“撞车”的背景音乐? 买版权音乐成本高,免费素材库…

作者头像 李华
网站建设 2026/4/28 10:55:06

Yolo系列模型的TensorRT-C++推理实践

Yolo系列模型的TensorRT-C推理实践 在边缘计算设备日益承担复杂视觉任务的今天,如何让YOLO这类目标检测模型跑得更快、更稳、更省资源,已经成为工业落地中的核心命题。尤其是在Jetson Orin、T4服务器等多路视频流并发场景下,Python PyTorch那…

作者头像 李华
网站建设 2026/4/20 23:55:00

Qwen3-VL-30B API调用与部署实战指南

Qwen3-VL-30B API调用与部署实战指南:构建你的视觉智能中枢 🧠📸 你有没有这样的经历?用户上传一份PDF财报,里面夹着三张柱状图和一张董事会合影,然后问:“今年营收增长主要靠哪个业务&#xff…

作者头像 李华
网站建设 2026/4/27 21:00:40

国内电商智能客服机器人选型指南:主流服务商实测对比与适配建议

着电商行业进入精细化运营深水区,智能客服已从“可选工具”升级为“核心竞争力枢纽”。据艾瑞咨询数据显示,国内电商行业智能客服渗透率已超75%,人力成本年均涨幅超8%、平台响应时效考核收紧等因素,让越来越多商家将智能客服选型列…

作者头像 李华