news 2026/5/27 22:00:12

从零到一:在Ubuntu 20.04上部署并实战YOLOv5目标检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:在Ubuntu 20.04上部署并实战YOLOv5目标检测

1. 环境准备:搭建Ubuntu 20.04基础环境

在开始部署YOLOv5之前,我们需要确保Ubuntu 20.04系统已经安装了必要的软件和工具链。我建议使用全新的Ubuntu系统进行操作,这样可以避免各种依赖冲突问题。实测下来,Ubuntu 20.04 LTS是最稳定的选择,它自带的Python 3.8.5版本完全兼容YOLOv5的要求。

首先打开终端(Ctrl+Alt+T),执行系统更新命令:

sudo apt update && sudo apt upgrade -y

接下来安装基础开发工具和Python环境:

sudo apt install -y python3 python3-pip python3-dev git curl

我强烈建议使用Python虚拟环境来隔离项目依赖。这样可以避免系统Python环境被污染,也方便后续管理:

sudo apt install -y python3-venv python3 -m venv yolov5_env source yolov5_env/bin/activate

注意:每次重新打开终端后,都需要先激活虚拟环境才能继续操作。你可以在~/.bashrc文件末尾添加source /path/to/yolov5_env/bin/activate来自动激活。

2. 安装PyTorch和必要依赖

YOLOv5的核心依赖是PyTorch框架。根据我的经验,直接使用pip安装官方预编译版本是最稳定的方式。这里我们选择PyTorch 1.7.1和对应的torchvision版本:

pip install torch==1.7.1+cpu torchvision==0.8.2+cpu torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

如果你有NVIDIA显卡并想使用GPU加速,需要先安装CUDA驱动,然后安装GPU版本的PyTorch:

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

安装完成后,可以运行以下命令验证PyTorch是否安装成功:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

3. 获取YOLOv5源代码和配置环境

现在我们可以克隆YOLOv5的官方仓库了。我建议在用户目录下创建一个专门的项目文件夹:

mkdir ~/yolov5_project && cd ~/yolov5_project git clone https://github.com/ultralytics/yolov5.git cd yolov5

安装项目依赖时,你可能会遇到PATH警告。这是常见问题,解决方法是将用户本地bin目录加入PATH:

echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc source ~/.bashrc

然后安装requirements.txt中列出的所有依赖:

pip install -r requirements.txt

如果遇到"ModuleNotFoundError: No module named 'skbuild'"错误,这是缺少scikit-build导致的:

pip install scikit-build

4. 数据准备和模型训练

YOLOv5支持多种训练方式。对于初学者,我建议先从官方提供的小型数据集开始。这里我们使用COCO128数据集:

python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --cfg yolov5s.yaml --weights ''

训练过程中有几个关键参数需要注意:

  • --img:输入图像尺寸,越大精度可能越高但显存占用也越大
  • --batch:批处理大小,根据显存调整
  • --epochs:训练轮数,5轮只是演示,实际项目通常需要50-300轮

训练完成后,模型权重会保存在runs/train/exp/weights/目录下。best.pt是验证集上表现最好的模型,last.pt是最后一个epoch的模型。

5. 使用训练好的模型进行目标检测

现在我们可以用训练好的模型进行推理了。YOLOv5支持多种输入源:

  • 单张图片
  • 图片目录
  • 视频文件
  • 摄像头实时流

测试单张图片:

python detect.py --source data/images/bus.jpg --weights runs/train/exp/weights/best.pt --conf 0.4

测试整个目录下的图片:

python detect.py --source inference/images/ --weights runs/train/exp/weights/best.pt --conf 0.25

对于没有GPU的环境,记得加上--device cpu参数:

python detect.py --source 0 --weights runs/train/exp/weights/best.pt --conf 0.4 --device cpu

6. 常见问题排查与优化建议

在实际部署过程中,我遇到过几个典型问题,这里分享解决方案:

CUDA内存不足错误:减小--img-size--batch-size参数值,或者在train.py中设置--multi-scale开启多尺度训练。

训练过程突然中断:检查系统日志dmesg,可能是OOM Killer终止了进程。可以尝试添加交换空间:

sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

检测结果不理想:尝试以下优化方法:

  1. 增加训练数据量
  2. 调整anchor box尺寸
  3. 增加训练轮数
  4. 使用更大的模型(如yolov5m.yaml或yolov5l.yaml)

对于生产环境部署,我建议将模型导出为ONNX格式:

python export.py --weights runs/train/exp/weights/best.pt --img 640 --batch 1

7. 进阶技巧与性能优化

当熟悉基础流程后,可以尝试以下进阶操作:

使用TensorBoard监控训练

tensorboard --logdir runs/train

自定义数据集训练

  1. 按照YOLO格式准备数据集
  2. 创建data/custom.yaml配置文件
  3. 修改模型参数(可选)
  4. 开始训练:
python train.py --img 640 --batch 16 --epochs 50 --data data/custom.yaml --cfg models/yolov5s.yaml --weights ''

模型剪枝与量化

python export.py --weights runs/train/exp/weights/best.pt --include onnx --img 640 --batch 1 --dynamic --simplify

多GPU训练

python -m torch.distributed.launch --nproc_per_node 2 train.py --img 640 --batch 64 --epochs 50 --data coco128.yaml --cfg yolov5s.yaml --weights '' --device 0,1

我在实际项目中发现,合理调整超参数可以显著提升模型性能。建议重点关注学习率(--lr)、权重衰减(--weight-decay)和数据增强参数(--hsv-h, --hsv-s, --hsv-v)。

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

告别满屏的 URL 拼接:一篇文章带你彻底搞懂 OpenFeign

在微服务架构中,把一个大系统拆分成多个小服务后,最直接面临的问题就是:服务之间如何通信?在早期的 Spring Cloud 开发中,我们最常用的工具是 RestTemplate。但随着业务复杂度的提升,RestTemplate 暴露出了…

作者头像 李华
网站建设 2026/5/27 21:58:28

《ZLToolKit源码学习笔记》(1)VS2019编译实战:从CMake配置到调试运行

1. 环境准备:从零搭建开发环境 第一次接触ZLToolKit源码的朋友可能会被编译环境搞得一头雾水。别担心,我刚开始也是这样。经过几次踩坑,总结出一套最稳妥的环境搭建方案。首先需要准备三样东西:VS2019开发环境、CMake工具和ZLTool…

作者头像 李华
网站建设 2026/5/27 21:56:26

AI驱动开发工作流实战:从GitHub Issue到Merged PR的自动化实践

1. 项目概述:一个AI驱动的完整开发工作流作为一名在软件工程一线摸爬滚打了十多年的开发者,我经历过无数次从发现问题、讨论方案到最终提交代码的循环。传统的流程,从在GitHub上开一个Issue,到最终Pull Request被合并,…

作者头像 李华
网站建设 2026/5/27 21:53:09

【MySQL | 第一篇】SQL语句怎么分?DDL、DML、DQL 一篇讲清楚

在学习 MySQL 的时候,最容易先接触到的一组概念,就是 DDL、DML、DQL。 很多初学者第一次看到这几个缩写时,都会觉得它们长得很像,甚至会下意识把它们混在一起记。结果就是:明明会写 CREATE,却说不清它为什么…

作者头像 李华
网站建设 2026/5/27 21:52:09

PKCS(公钥加密标准)系列规范介绍

什么是 PKCS? PKCS(Public-Key Cryptography Standards,公钥加密标准)是由 RSA 实验室(RSA Laboratories)于 1990 年代初与全球安全开发者共同制定的一系列标准。 当时,公钥密码学(如…

作者头像 李华