Yolov5微调教程
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 |
评论