yolov5环境部署模型训练(飞火专用)

分享者QQ: 826706180

部署前的准备

收藏+点赞+关注


CUDA安装

把显卡驱动更新到最新版本,然后下载CUDA版本,我提供了一个12.0.0版本,里面包含CUDN和cuDNN综合包,方便一些小白使用,也可以根据自己电脑需求安装,下载地址: https://www.123pan.com/s/lgZzVv-939k3.html提取码:pCoM

  1. 键盘按 ctrl + r , 输入框里输入cmd ,按回车

    在这里插入图片描述

  2. 在控制台输出 nvidia-smi ,按回车

    在这里插入图片描述

  3. 右上角:CUDA Version: 版本号,表示最高可以装哪个CUDA版本
    在这里插入图片描述

  4. 浏览器打开下载地址: https://developer.nvidia.com/cuda-toolkit-archive
    找到对应的 CUDA 版本下载,下载任意一个11.4.x,最后一位数字可以忽略不计
    在这里插入图片描述

  5. 选择windows系统,版本win10,安装方式本地
    在这里插入图片描述

  6. 下载完成后安装CUDA驱动,直接点ok就行了,使用默认路径,安装时间可能比较长,耐心等待
    在这里插入图片描述

  7. CUDA驱动安装完成之后, ctrl + r 然后 cmd 回车打开控制台,输入 nvcc -V 查看版本
    在这里插入图片描述

  8. CUDA安装完成后,去系统设置-高级-环境变量里找是否有如下
    CUDA_PATH C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
    CUDA_PATH_V10_1 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
    有则安装成功


cuDNN安装

下载地址: https://developer.nvidia.com/rdp/cudnn-archive#a-collapse805-101

  1. 浏览器开打地址后, CTRL + R 搜索 对应的版本号,如: CUDA 11.4 ,会出现多个版本,任何一个都可以使用的
    在这里插入图片描述

  2. 根据自己系统选择对应版本,点击下载
    在这里插入图片描述

  3. 下载完成后:
    解压下载好的cuDNN包,得到bin include lib 三个文件夹
    覆盖:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4【这里是版本号】

注意事项:
下载可能会出现让你注册的弹窗,自己注册一个账号就可以了,如图
在这里插入图片描述

Miniconda安装

下载地址: https://www.123pan.com/s/lgZzVv-qQAk3.html 提取码:L5eZ

环境变量:
根据自己的安装路径设置环境变量,如图

image-20231003011914603
image-20231003012255734
image-20231003012347449
image-20231003013753741
image-20231003013913831
image-20231003014230196
最后cmd 控制台输入: conda -V
image-20231003014447290

一、环境部署及标注

1、切换源:

conda config --remove-key channels
conda config --add channels http://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels http://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

2、创建虚拟环境yolo5:

2.1 初始化

conda init

2.2 创建一个名为 yolo5 的 conda 环境,并指定了 Python 版本为 3.8.5, 命令行输入:

conda create -n yolo5FH python==3.8.8

指定miniconda3版本创建虚拟环境

conda create --prefix E:\environment\miniconda3_py3.7\yolo\yolo5 python=3.7

2.3 激活虚拟环境:

conda activate yolo5FH

指定miniconda3版本激活虚拟环境

conda activate E:\environment\miniconda3_py3.8\yolo\yolo5

常用命令:
查看虚拟环境: conda info --envs
退出虚拟环境: conda deactivate
卸载虚拟环境:
1.列出已存在的所有conda环境: conda env list
2.删除指定的conda环境: conda env remove --name yolo5 (注意删除前要退出虚拟环境)
3.删除是定路径的conda环境: conda env remove --prefix E:\environment\miniconda3_py3.7\yolo5yg


3、pytorch安装:

官网:https://pytorch.org/
根据自己显卡驱动版本安装,必须提前更新好显卡驱动,如果用CPU训练(就不用玩了真的)
我的显卡3070ti,最高支持11.4,然后官网没有11.4,所以我选择了11.3的版本,只可以往前选择,不可以往后选择
命令行输入: nvidia-smi //查看支持的支持最高驱动的版本
找到所支持的最高版本例如:

# CUDA 11.3
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3

注意:需要在激活yolo的环境下执行,并且关闭翻墙软件


测试python环境:

命令行输入: python

可能会出现的错误:
Traceback (most recent call last): File “”, line 1, in ModuleNotFoundError: No module named ‘torch’

解决办法: 从新安装 PyTorch ,根据实际情况选择

// 仅使用CPU版本
conda install pytorch==1.9.0 torchvision==0.10.0 cpuonly -c pytorch
// 使用特定的CUDA工具包版本,GPU
conda install pytorch==1.9.0 torchvision==0.10.0 cudatoolkit=11.1 -c pytorch -c conda-forge

从新安装完成后,从新校验python环境,执行下面步骤

加载torch: import torch 
查看当前torch版本: print(torch.__version__)
//这时候控制台会输出刚才安装的 pytorch 的版本 1.12.1
查看GPU是否可用: torch.cuda.is_available() 
返回GPU个数: torch.cuda.device_count() 
测试torchvision是否正确:import torchvision
退出 命令行输入: quit()

4、依赖包安装:

pip install -r requirements.txt

5、安装pycocotools:

pip install pycocotools-windows

6、安装(图像化依赖) pyqt5:

pip install pyqt5

7、安装labelme:

pip install labelme

8、使用 PyCharmIDE 打开项目并配置解释器虚拟环境
9、标注软件labelimg 下载:

pip install labelimg -i https://mirror.baidu.com/pypi/simple

打开labelimg:

labelimg

10、voc类型改为yolo类型

重要的事情说三遍: 要选择yolo类型
重要的事情说三遍: 要选择yolo类型
重要的事情说三遍: 要选择yolo类型

Open打开
Open dir选择要被训练的图片路径
Opensave dir为标签保存路径
create rectbox创建标注框
Next Image上一张图片
Prev Image下一张图片
Save保存

快捷键:w 创建新的标注框,a 上一张图片,d 下一张图片,del 删除选定的矩形框,Ctrl++放大 Ctrl-- 缩小

设置自动保存

image-20230712053251468

可能存在的报错:
ModuleNotFoundError: No module named ‘chardet’
解决:pip install chardet
其实缺什么模块你就安装什么模块就行,这类错误最好解决。
其他错误也可以自行百度解决办法

注意:
可能会有AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_factor’
解决:删除upsampling.py对应行,具体可以百度这个错误

测试代码:
python detect.py --source data/images/bus.jpg --weights pretrained/yolov5s.pt

二、训练

1、需要修改配置文件

第一个文件 data\mask_data.yaml

train: C:/Users/Administrator/Desktop/train/images/train     #更换自己的训练集路径
val: C:/Users/Administrator/Desktop/train/images/val      #更换自己的验证集路径
nc: 2    #类别数量需要更改你自己的数量
names: ['yu1','yu2'] #类别名称改成你自己的

第二个文件 models\yolov5s.yaml

nc: 1  # 更改自己的类别数量
2、开始训练

yolo5FH环境激活情况下,并且在yolo项目根目录中

python train.py --data mask_data.yaml --cfg mask_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 12

python train.py:这部分指示使用Python解释器来执行名为train.py的脚本文件。

--data mask_data.yaml:这是一个命令行选项,指定了一个名为mask_data.yaml的数据配置文件,该文件用于指定数据集的路径、类别等信息。

–cfg mask_yolov5s.yaml:这是另一个命令行选项,指定了一个名为mask_yolov5s.yaml`的模型配置文件,该文件用于指定YOLOv5模型的结构和超参数。

–weights pretrained/yolov5s.pt`:这是一个命令行选项,指定了一个预训练权重文件的路径。在训练过程中,模型将使用这个权重作为初始参数。

--epochs 100:这是一个命令行选项,指定了训练的总轮数(或称为训练周期)。在这个例子中,总共将训练100个周期,300次效果最佳。

–batch-size 12`:这是一个命令行选项,指定了每个训练批次中的样本数量。在这个例子中,每个批次将包含12个样本,可以理解为每次处理12个图片。

通过执行这个命令,你将开始使用YOLOv5模型来训练,使用给定的数据集、模型配置、预训练权重,并设置训练的总周期数和批次大小。请确保你的环境已经正确设置和安装了所需的库和依赖项,以及准备好了数据集和配置文件。

使用缓存:

使用硬盘缓存

--cache dir

使用内存缓存

--cache ram
3、导出onnx模型

需要用到export.py脚本
338行和339行需要根据自己情况更改
parser.add_argument(‘–data’, type=str, default=ROOT / ‘data/mask_data.yaml’, help=‘dataset.yaml path’) #,模型配置文件路径
parser.add_argument(‘–weights’, type=str, default=ROOT / ‘runs/train/exp11/weights/best.pt’, help=‘weights path’) #要转换的模型

“run exprot”就可以了

4、onnx转ncnn模型(飞火插件用的ncnn模型,这是我们的终极目标)

onnx在线转ncnn:
https://convertmodel.com/

三、改参和应用到插件中

这部分教程可以参考飞火B站的相关教程

三、所有参数详解

这段代码是用于设置命令行参数的,使用了Python的argparse库。下面是每个参数的解释:

  • --weights:初始模型权重路径,默认为ROOT / ‘pretrained/yolov5s.pt’。
  • --cfg:模型配置文件路径,默认为ROOT / ‘models/yolov5s.yaml’。
  • --data:数据集配置文件路径,默认为ROOT / ‘data/data.yaml’。
  • --hyp:超参数文件路径,默认为ROOT / ‘data/hyps/hyp.scratch.yaml’。
  • --epochs:训练周期数,默认为300。
  • --batch-size:每个GPU的总批次大小,对于自动批量大小选择,可设为-1,默认为4。
  • --imgsz:训练和验证图像大小(像素),默认为640。
  • --rect:使用矩形训练。
  • --resume:恢复最近的训练,如果提供了该参数但没有指定值,则使用默认值True。
  • --nosave:只保存最终的检查点。
  • --noval:只验证最终的训练周期。
  • --noautoanchor:禁用自动锚框检查。
  • --evolve:进化超参数x代数,默认为300代,如果提供了该参数但没有指定值,则使用默认值300。
  • --bucket:gsutil存储桶。
  • --cache:将图片缓存在"ram"(默认)或"disk"中,提供该参数但没有指定值时,默认为"ram"。
  • --image-weights:在训练中使用加权图片选择。
  • --device:cuda设备,例如0或0,1,2,3,或者是cpu。
  • --multi-scale:使用多尺度训练图像,即在训练过程中随机调整图像大小,增加数据的多样性。如果提供该参数,则为True。
  • --single-cls:将多类别数据训练为单类别数据。
  • --adam:使用torch.optim.Adam()优化器。
  • --sync-bn:使用SyncBatchNorm,仅在DDP模式下可用。
  • --workers:最大dataloader工作进程数(在DDP模式下,每个RANK的工作进程数),默认为0。
  • --project:保存路径的项目目录,默认为ROOT / ‘runs/train’。
  • --name:保存路径的名称,默认为’exp’。
  • --exist-ok:允许项目目录/名称已存在,不自动递增。
  • --quad:使用四分之一图像加载器(quad dataloader)。
  • --linear-lr:使用线性学习率衰减。
  • --label-smoothing:标签平滑的epsilon值,默认为0.0。
  • --patience:EarlyStopping的耐心程度(未改善的训练周期数),默认为100。
  • --freeze:冻结的层数。backbone=10,全部=24。
  • --save-period:每隔x个训练周期保存一次检查点(如果小于1则禁用)。
  • --local_rank:DDP参数,不要修改。
  • Weights & Biases参数:
    • --entity:W&B的实体。
    • --upload_dataset:将数据集上传为艺术品表格。
    • --bbox_interval:设置边界框图像记录间隔。
    • --artifact_alias:要使用的数据集艺术品的版本别名。

四、模型转换

找到 export.py 文件,并修改对应参数

parser.add_argument('--data', type=str, default=ROOT / 'data/mask_data.yaml', help='dataset.yaml path')      #,模型配置文件路径
parser.add_argument('--weights', type=str, default=ROOT / 'runs/train/exp10/weights/best.pt', help='weights path')  #要转换的模型

1、conda搭建测试环境
1、使用conda创建虚拟环境

conda create -n yolov5 python=3.8	//pt模型转成onnx模型需要的虚拟环境
conda create -n yolov5 python=3.6	//onnx模型转成rknn模型需要的虚拟环境

使用虚拟环境时使用一下指令激活

conda activate yolov5	//pt模型转成onnx模型需要的虚拟环境
conda activate rv1126	//onnx模型转成rknn模型需要的虚拟环境

需要切换其他的虚拟环境或者是退出当前环境时

conda deactivate

查看可用的虚拟环境指令

conda info --envs

删除环境

conda env remove --name yolo5

五、各种包的安装

1.thop包安装

确保激活了你的YOLOv5环境。如果你还没有激活环境,运行以下命令添加conda-forge渠道:

conda config --add channels conda-forge

然后,再次尝试安装 thop 库:

conda install thop

或者使用pip安装:必须关闭翻墙

pip install thop

2.onnx 库安装

pip install onnx

错误收集

  • AssertionError: Label class 2 exceeds nc=1 in YoloV5Data/data.yaml. Possible class labels are 0-0
    解决方法:找到train.py文件中这一行代码,注释掉(我的在第222行位置)。

    assert mlc < nc, f'Label class {mlc} exceeds nc={nc} in {data}. Possible class labels are 0-{nc - 1}'
    
  • 报错内容:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98 in position 1093: illegal multibyte sequence

    解决方法: https://blog.csdn.net/qq_39522016/article/details/130548541
    

IDE

安装要求错误

  • PackagesNotFoundError: The following packages are not available from current channels

    更新软件源:运行以下命令来更新你的软件源缓存,并尝试重新安装包 :

    conda update --all  
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:Yolov5报错: AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class labels are 0-x-1 File “C:\Users\1\Desktop\水表识别\YOLO5\yolov5-master\train.py”, line 175, in train assert mlc < nc, ‘Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g’ % (mlc, nc, opt.data, nc - 1) 大多博客给出的方法 。 引用\[2\]:问题一:在运行train.py(只有1类)程序过程中出现“AssertionError:Label class 1 exceeds nc=1 in yolo/dataset.ymal Possible class labels are 0-0”情况。 。 引用\[3\]: 训练yolov5的那些事之解决:AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class labels are 0-x-1问题 问题详情大多博客给出的方法我的解决方法 总结参考资料 。 问题: AssertionError: Label class 1 exceeds nc=1 in /home/suanfa-2/lz/yolov5_tag6.1/yolov5-6.1/data/scq_v4.yaml. Possible class labels are 0-0是什么问题?如何解决? 回答: 这个错误是由于在训练yolov5模型时,标签类别数超过了配置文件中设置的类别数所导致的。具体来说,错误信息中的"Label class 1 exceeds nc=1"表示标签类别1超过了配置文件中设置的类别数1。而"Possible class labels are 0-0"表示可能的类别标签只有0。\[1\]\[2\]\[3\]要解决这个问题,你需要检查你的数据集和配置文件,确保标签类别数与配置文件中设置的类别数一致。你可以检查数据集的标签文件和配置文件中的类别数是否匹配,以及是否有重复的类别标签。另外,还要确保你的数据集中的标签类别数不超过配置文件中设置的类别数。如果有需要,你可以修改配置文件中的类别数,使其与你的数据集相匹配。 #### 引用[.reference_title] - *1* *3* [训练yolov5的那些事之解决:AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible ...](https://blog.csdn.net/qq_43725659/article/details/127867867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [YOLOv5报错AssertionError:Label class 1 exceeds nc=1 in yolo/dataset.ymal Possible class labels are 0...](https://blog.csdn.net/weixin_56524592/article/details/129178934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值