目录
Pytorch 环境搭建
使用conda命令行创建虚拟环境
# 查看环境
conda env list
# 创建环境
conda create -n 名字 python=版本
# 添加通道
conda config --add channels 通道地址
# 镜像加速
conda create -n 名字 python=版本 -c 镜像地址
# 镜像地址
清华:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
北京外国语:https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
阿里巴巴:http://mirrirs.aliyun.com/anaconda/pkgs/main
# 查看通道
conda config --get
# 删除环境
conda remove -n 名字 --all
查看本机硬件配置
- 显卡型号:MX450 (官网:人工智能计算领域的领导者 | NVIDIA)
- 显卡算力:7.5 ( https://en.wikipedia.org/wiki/CUDA#GPUs_supported )
- CUDA Runtime :更新驱动,确定自己的驱动版本 CUDA Driver Version:12.3
【命令行窗口输入 nvidia-smi即可查看】
-
最终确定使用CUDA版本
-
下载 pytorch 12.1 (官网:PyTorch)
conda activate 环境名称 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
- 验证pytorch是否安装成功
conda activate 环境名称 conda list (看看有没有pytorch或者torch) 输入python 输入import torch 输入torch.cuda.is_available() #如果显示True,说明安装成功
YOLOV5项目
-
项目下载地址
-
项目环境搭建
- 在Pycharm中选择刚刚创建的pytorch虚拟环境下的Python编译器
- 打开命令行,激活pytorch环境
conda activate 环境名称
pip install -r requirements.txt
-
运行detect.py文件
-
常见报错解决方法
问题1:AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘地址
1.在 common.py 文件中添加SPPF类
class SPPF(nn.Module):
# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
super().__init__()
c_ = c1 // 2 # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c_ * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
def forward(self, x):
x = self.cv1(x)
with warnings.catch_warnings():
warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
2.重新下载模型yolov5s.pt ,替换原来的文件
3.路径改为全英路径,不能有中文
问题2:训练完成后不显示检测标注
在 detect.py 主函数中添加代码:cudnn.benchmark=True
参数设置及模型训练
detect.py 参数设置
--weights:选择模型,默认yolov5s.pt
--source:选择文件路径
--img-size:选择图片尺寸,根据模型要求调整
--conf-thres:置信度,默认0.25
--iou-thres:IOU阈值(交/并),默认0.45
--device:设备,默认是CPU
action参数:设置方法如下
-view-img:是否实时显示检测结果,设置action参数则为True,或者在终端、或者如下图
--save-txt:是否保存为txt
--save-conf:是否保存置信度
--nosave:不要保存图片、视频
--classes:检测类别,nargs='+'代表检测多个类别。如果只想检测“人”,可设置--class 0
--agnostic-nms:增强nms检测
--augment:增强
--project:结果保存的路径
--name:文件夹名字
--exist-ok:不同批次训练的结果是否放在同一文件夹下
train.py 参数设置
--weights:训练模型
--cfg:设置模型 models-yolov5s.yaml
--data:设置数据集 data-coco128.yaml
--hyp:超参数
--epochs:训练轮数
--batch-size:多少个数据打包成一个batch进行训练
--img-size:设置图片大小
--rect:矩阵训练方式
--resume:是否在模型基础上进行训练
--nosave:是否只保存最后一次训练的数据
--notest:是否只对最后一个epoch进行测试
--noautoanchor:是否取消采用锚点
--evolve:是否对超参数进行遗传算法
--cache-images:是否对图片进行缓存
--image-weights:对训练过程中不太好的数据加权重
--device:设备
--multi-scale:对图片尺寸进行变换
--single-cls:设置数据集是单、多类别
--adam:是否使用优化器
带有DDP的参数不要改动
--project:存放结果的文件夹路径
--name:结果的文件夹名
--linear-lr:学习速率
--label-smoothing:防止过拟合
本地训练
--workers:设置为0,不宜太大
-
常见报错解决方法
问题1:wandb报错
问题2: numpy版本问题
【已解决】AttributeError: module ‘numpy‘ has no attribute ‘int‘._AI浩的博客-CSDN博客
PackagesNotFoundError: The following packages are not available from current channels的解决办法-CSDN博客
环境要求:numpy>=1.18.5
解决报错:安装 1.20 以下的版本
conda uninstall numpy
pip install numpy==1.19.5
或者
conda install -c cctbx202105 numpy
或者在conda官网 https://anaconda.org/
问题3:RuntimeError: result type Float can't be cast to the desired output type __i
知识经验分享——YOLOv5-6.0训练出错及解决方法(RuntimeError) - 知乎
云端训练
1.打开google colab(colab.google),设置为GPU
2.打包压缩项目文件夹,注意是.zip格式,上传至云端
3.解压
# 解压文件
!unzip /content/yolov5-5.0.zip -d /content/yolov5
# 删除文件
!rm -rf 路径
# 进入文件夹
%cd 路径
# 安装环境
!pip install -r requirements.txt
# 添加插件
%load_ext tensorboard
%tensorboard --logdir-runs/train
# 运行train.py进行训练
!python train.py --rect
# 下载best.pt在detect.py中进行测试,将--weights的default改为best.pt,查看测试结果
自制数据集及训练
1.自己获得数据集–人工标注/半人工标注
2.使用仿真数据集(GAN网络生成:搜索 synthetic data object detection github)
标注数据集
标注工具:Make Sense
整理文件夹
新建mydata文件夹,删除前面下载数据集部分,更改train val路径、nc类别数量、调整name类别名称及顺序 。
训练数据集
更改train.py文件中 - -data路径,运行代码
路径报错:将路径改为绝对地址,注意路径的正确!
验证结果
将detect.py文件- -weights参数改为训练好的best.py文件路径,- -source参数改为train文件夹路径,运行代码
结果可视化
更多关于YOLOV5的框架详解:
YOLOv5网络详解_yolov5网络结构详解-CSDN博客