YOLOv5(You Only Look Once) 是由 Ultralytics 开发的一种高效、轻量化的目标检测模型,基于 PyTorch 实现,支持实时检测任务。它结合 CSPNet 和 PANet 提升特征提取和融合能力,并通过 Mosaic 数据增强和自动锚框优化提高检测精度。YOLOv5 提供多种模型尺寸(如 YOLOv5s、YOLOv5x),适用于从嵌入式设备到高性能服务器的广泛场景,常用于自动驾驶、视频监控、医学影像等领域,具备快速部署和高准确率的优势。

环境配置

1. 运行环境

文档末附有完整的pip管理的包及其版本。

类别 详细信息
CPU Intel(R) Xeon(R) Platinum 8352V CPU @ 2.10GHz
CPU 核心数 32 核心 / 64 线程
GPU NVIDIA GeForce RTX 4090
GPU 显存 24 GB
CUDA 版本 11.8
操作系统 Ubuntu 22.04.3 LTS (Jammy Jellyfish)
Python 版本 3.8.20
PyTorch 版本 2.4.1

2. 安装 Conda

参考这篇文章: https://docs.aheadai.cn/60.html

3. 创建 Conda 环境

创建新的conda环境:

conda create -n yolo_v5 python=3.8

激活环境:

conda activate yolo_v5

4. 安装必要的 Python 包

注意:文章结尾有所有的Python 包列表。

进入你想存放数据的文件夹下,下载项目源码(从GitHub上下载yolov5的源码):

wget https://mirrors.aheadai.cn/pkgs/yolov5-master.zip
# 或者也可以从官网去下载,官网链接:https://github.com/ultralytics/yolov5

解压:

unzip yolov5-master.zip 

进入yolov5-master文件夹

cd yolov5-master 

安装依赖:

pip install -r requirements.txt

准备数据集

训练模型可以选择下载笔者使用的数据集,如果想训练自己的数据集请跳过此部分:

cd .. # 退回yolov5-master的上级文件夹
wget https://mirrors.aheadai.cn/data/yolov5-data.zip

解压:

unzip yolov5-data.zip

1. 创建数据集

创建yolov5-data文件夹,并在此文件夹下创建images文件夹,labels文件夹和yolov5.yaml,将图片统一放在images文件夹下。

注意:一些常见的图片格式如.png无法被识别。

处理数据集,利用labelImg-master标注图片

cd .. # 退回yolov5-master的上级文件夹
wget https://mirrors.aheadai.cn/pkgs/labelImg-master.zip
# 或者也可以从官网去下载,官网链接:https://github.com/tzutalin/labelImg-master

解压:

unzip labelImg-master.zip 

进入labelImg-master文件夹,修改子文件夹data下predefined_classes.txt的内容为自己需要分类的名称

如笔者使用的数据集的内容为

bike
boat
bus
car
cycle
helicopter
plane
scooty
truck

进入labelImg-master文件夹

cd labelImg-master

运行labelimg.py

python labelimg.py

进入之后,首先将View的选项全部勾上,便于我们标记。然后把标记模式改为yolo。

选择图片路径为image文件夹,选择保存路径为labels文件夹,在右上角勾选上使用预设标签,接下来就可以手动标记了。

下面是一些常用的快捷键

W:创建选择框

S:上一张图片

D:下一张图片

最后,配置yolov5.yaml文件,以下是笔者使用的yolov5.yaml,以作参考

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] # dataset root dir
path: 
train: ../yolov5-data/images
val: ../yolov5-data/images
test: 
# number of classes

# class names
names:
    0: bike
    1: boat
    2: bus
    3: car
    4: cycle
    5: helicopter
    6: plane
    7: scooty
    8: truck

train是训练集,val是训练过程中的测试集,test是训模型结束后用于评价模型结果的测试集。其中,只有train是必须的,其他可以根据自己需要设置。对应路径也请结合自己实际情况修改。

names是类别名称,与predefined_classes.txt中的内容相同。

注意:images和labels文件夹下均可存在子文件夹,但一定要保证文件路径相同,如images_bike.jpg被放在了images/bike文件夹下,那么images_bike.txt也一定要放在labels/bike下。

注意:如果要在其他平台进行训练,需在此平台重新配置yolov5环境,并将整理好的yolov5-data文件夹压缩并上传,如在本地运行则无需此步。

开始训练

先再次进入yolov5-master文件夹

cd yolov5-master

下载训练权重,yolov5从上至下权重的模型越来越复杂,速度越来越慢,准确率越累越高,选择适合的训练权重下载即可。

wget https://mirrors.aheadai.cn/pkgs/yolov5s.pt
# 或者也可以从官网去下载,官网链接:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
wget https://mirrors.aheadai.cn/pkgs/yolov5m.pt
# 或者也可以从官网去下载,官网链接:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m.pt
wget https://mirrors.aheadai.cn/pkgs/yolov5l.pt
# 或者也可以从官网去下载,官网链接:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5l.pt
wget https://mirrors.aheadai.cn/pkgs/yolov5x.pt
# 或者也可以从官网去下载,官网链接:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x.pt

运行train.py文件训练

python train.py --img 320 --batch 50 --epochs 100 --data ../yolov5-data/yolov5.yaml --weights yolov5x.pt --cache

运行detect.py文件推理

python detect.py --weights ./runs/train/exp/weights/best.pt --img 320 --conf 0.25 --source ../test/

参数解释:

img:输入图片宽高
batch:多少张图片进行权重更新,梯度下降的mini-batch
epochs:迭代次数
data:存储训练、测试数据的文件
weigts:权重文件,训练时选择下载的训练权重,推理时选择训练结束保存的best.pt文件
cfg:存储模型结构的配置文件
source:存放测试图像的文件夹路径

log文档

log文档地址:https://mirrors.aheadai.cn/log/4090-autodl-yolov5-training_log

附:Python 环境中的已安装包(pip list

Package Version
certifi 2024.8.30
charset-normalizer 3.4.0
contourpy 1.1.1
cycler 0.12.1
filelock 3.16.1
fonttools 4.55.0
fsspec 2024.10.0
gitdb 4.0.11
GitPython 3.1.43
GPUtil 1.4.0
idna 3.1
importlib_resources 6.4.5
Jinja2 3.1.4
kiwisolver 1.4.7
MarkupSafe 2.1.5
matplotlib 3.7.5
mpmath 1.3.0
networkx 3.1
numpy 1.24.4
nvidia-cublas-cu12 12.1.3.1
nvidia-cuda-cupti-cu12 12.1.105
nvidia-cuda-nvrtc-cu12 12.1.105
nvidia-cuda-runtime-cu12 12.1.105
nvidia-cudnn-cu12 9.1.0.70
nvidia-cufft-cu12 11.0.2.54
nvidia-curand-cu12 10.3.2.106
nvidia-cusolver-cu12 11.4.5.107
nvidia-cusparse-cu12 12.1.0.106
nvidia-nccl-cu12 2.20.5
nvidia-nvjitlink-cu12 12.6.85
nvidia-nvtx-cu12 12.1.105
opencv-python 4.10.0.84
packaging 24.2
pandas 2.0.3
pillow 10.4.0
pip 24.2
psutil 6.1.0
py-cpuinfo 9.0.0
pyparsing 3.1.4
python-dateutil 2.9.0.post0
pytz 2024.2
PyYAML 6.0.2
requests 2.32.3
scipy 1.10.1
seaborn 0.13.2
setuptools 75.1.0
six 1.16.0
smmap 5.0.1
sympy 1.13.3
thop 0.1.1.post2209072238
torch 2.4.1
torchvision 0.19.1
tqdm 4.67.1
triton 3.0.0
typing_extensions 4.12.2
tzdata 2024.2
ultralytics 8.3.36
ultralytics-thop 2.0.12
urllib3 2.2.3
wheel 0.44.0
zipp 3.20.2
本文系作者 @ admin 原创发布在 文档中心 | AheadAI ,未经许可,禁止转载。