yolov5训练与环境搭建片段(自用,持续更新20240321)

从头到尾,用yoloV5来训练一个口罩的项目。

yoloV5训练参数与推理:

训练:
python train.py --weights ‘’ --data helmet.yaml --cfg v5s_helmet.yaml --epochs 5 --device cpu --batch-size 16 (此命令使用cpu训练,如果需要gpu可以将cpu改为0。0代表电脑中第一个独显)
eg:
python train.py --img 640 --batch 16 --epochs 100 --device 1 --data …/mask/data.yaml --cfg models/yolov5s.yaml --weights ‘’

yolov5 训练结果解析:点击跳转

参数含义:

(1)weights:此参数是传入模型训练时的预训练权重的,如yolov5中的yolov5s.pt文件,在本文的第二张图片中可以看到,这个是官方给的配置文件,在自己第一次训练模型时,可以拿出来使用,来提高模型的训练成效。如果不需要,也可以将此参数设置为空。如 default=' '。
(2)cfg:这个参数传入的是我们前面讲的models中的网络模型的yaml文件的地址。
(3)data:传入的是data文件夹中的配置文件的地址,而不是我们数据集的地址。
(4)epochs:此参数表示训练的轮次,这个由自己定义,传入的是数字。
(5)batch-size:表示一次传入图片的量,也是数字,但这个数字是根据自己电脑的显卡的内存来决定的,如果设置太大,导致超出了显卡内存,会报错。如果设置太小,会导致训练时间太长。所以大家更具自己电脑的显卡配置来设置。
(6)device:此参数是设置使用cpu训练还是gpu训练,更具自己电脑配置来。

Yolo训练时,输出的参数的含义:


Epoch:训练过程中的迭代次数(即完成了多少个epoch)。
gpu_mem:GPU内存使用情况,通常是以MB或GB为单位的数字。
box:模型预测出的bounding box的平均损失值。
obj:模型预测出的objectness的平均损失值。
cls:模型预测出的分类的平均损失值。
total:所有损失值的总和,即box+obj+cls。
labels:每个batch中标注的物体数量的平均值。
img_size:输入模型的图像的大小,通常是以像素为单位的宽度和高度。

Class:检测的目标类别。
Images:测试集中包含该类别的图像数量。
Labels:测试集中该类别物体的真实标注数量。
P:该类别的预测精确度(precision),即正确预测的物体数量占所有预测的物体数量的比例。
R:该类别的召回率(recall),即正确预测的物体数量占所有真实物体数量的比例。
mAP@.5:平均精度均值(mean average precision)的值,即在IoU阈值为0.5时的平均精度。
mAP@.5:.95:在IoU阈值从0.5到0.95的范围内,所有阈值的平均精度的均值。

yolov5继续训练的方法: 点击跳转

在原有模型的基础上继续训练增加训练次数命令:
python train.py --weights /kaggle/input/face-mask/last.pt --resume True --epochs 100 --device 0

//断点续训:
//python train.py --resume D:\Pycharm_Projects\yolov5-6.1-4_23\runs\train\exp19\weights\last.pt

关于迁移学习和增量学习:《yolov5 如果针对一个模型权重反复增加样本训练》

推理:
推理图片:
python detect.py --weights E:/ncnn/yolov5-master/runs/train/exp4/weights/last.pt --source …/mask/test/images/1288126-10255706714jpg_jpg.rf.95f7324cbfd48e0386e0660b5e932223.jpg

用摄像头捕获:
python detect.py --weights E:/ncnn/yolov5-master/runs/train/exp4/weights/last.pt --source 0

用视频捕获:
python detect.py --weights F:/about_yolov5/yolov5-master/runs/train/exp6/weights/best.pt --source F:/SuJuJi/video/jiance.avi

yaml文件说明

打开yolov5\models,找到yolov5s.yaml,复制一份重命名为myyolov5s.yaml
我的路径为C:\Users\Administrator\yolov5\models
打开myyolov5s.yaml
在这里插入图片描述
注意,我们发现除了yolov5s.yaml,还有yolov5l.yaml、yolov5m.yaml、yolov5n.yaml、yolov5x.yaml
打开这些文件,仔细观察,发现只有这两项不一样

在这里插入图片描述
这两项是指神经网络的深度和宽度,在使用过程中这两项的数值越大,模型的精度越高,但所需要的时间也越多,模型精度从小到大依次为,yolov5n.yaml、yolov5s.yaml、yolov5m.yaml、yolov5l.yaml、yolov5x.yaml,如果你的显卡配置够好的话可以选择yolov5x.yaml,如果差一点的话可以选择yolov5n.yaml,我这里选择yolov5s.yaml

不同yaml文件说明
YoloV5提供了5个主要的预先训练的网络模型,分别是YoloV5S、YoloV5M、YoloV5L、YoloV5X和YoloV5N。下面是它们的主要区别:

1. YoloV5S:最小,轻量级,适用于移动设备以及低功耗设备上的实时目标检测。但是检测精度相对较低。
2. YoloV5M:中等大小,速度快,检测精度相对于YoloV5S更高。适合于中等硬件性能的设备。
3. YoloV5L:较大,更精确,适合于高功率设备或需要高分辨率检测的应用。
4. YoloV5X:大型,包含更多的卷积层和更高的容量,性能最好。但是需要更多的内存和计算资源。
5. YoloV5N:轻量级网络,适合于嵌入式设备或边缘计算设备,快速识别难以检测的小目标等。

yolo程序含义
yoloV5中train.py,定位到473行后:

parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default= 'yolov5s.pt', help='initial weights path')
#预训练模型,可不填,但效果会很差,默认为yolov5s.pt
    parser.add_argument('--cfg', type=str, default='models/myyolov5s.yaml', help='model.yaml path')
#必要修改
#修改地址为models/myyolov5s.yaml,训练模型文件位置
    parser.add_argument('--data', type=str, default='data/mydata.yaml', help='dataset.yaml path')
#必要修改
#修改地址为data/mydata.yaml,数据集文件位置
    parser.add_argument('--hyp', type=str, default= 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=100)
#修改训练轮数为100,轮数越高,精度越高,速度越慢,默认300
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs, -1 for autobatch')
#线程数默认为16,越大越快,不能过大,
    parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
#图片大小,越小越快,但精度越差,一般图片多大填多大,不规则填最长边尺寸
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
#继续训练,如果上一次训练中止了,只要在这里填上Ture,就可以继续完成上一次训练
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--noval', action='store_true', help='only validate final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
    parser.add_argument('--noplots', action='store_true', help='save no plot files')
    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
#必要修改
#修改为0,0的意思是调用gpu0,如果你的电脑有几块gpu可以填1,2,3,如果没有gpu可以在上面填cpu
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
    parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
    parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
    parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
    parser.add_argument('--seed', type=int, default=0, help='Global training seed')
    parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')

模型转换

参考链接,pt模型转化为rknn:点击参考链接
详细介绍 Yolov5 转 ONNX模型参考链接:点击参考链接

将pt模型使用yolov5工程中的export.py转换为onnx模型(这里需要配置export.py):
python export.py --weights best.pt --img 640 --batch 1 --include torchscript
python export.py --weights best.pt --img 640 --batch 1 --include onnx

推荐模型框架的模型在线转换链接:点击跳转

conda使用

Anaconda3安装链接:Anaconda3安装

使用:
windows用户可以从开始界面打开anaconda prompt 然后输出conda指令
Linux用户在配置好bash环境后就能直接输入conda指令了

查看conda版本
conda --version

创建一个新的环境
conda create -n yolo python==3.8.5 #创建一个名字叫yolo的环境,使用python3.8.5

删除环境
conda env remove -n 环境名称

创建一个新的环境并指定路径
conda create --prefix /your/custom/path/env_name
举例:conda create --prefix=D:/AI/yolo/env_yolo python=3.11.8

删除指定路径的环境(请注意,这将删除整个环境,不能撤销)
conda remove --prefix /your/custom/path/env_name --all

激活环境
conda activate yolo

激活指定路径的环境
conda activate /your/custom/path/env_name

环境列表
conda env list

查看一下当前的环境目录
conda config --show envs_dirs

目录加到环境中
conda config --append envs_dirs your_path
eg:conda config --append envs_dirs E:/ncnn/yolov5-master

目录从环境中移除
conda config --remove envs_dirs E:/ncnn/yolov5-master/env_yolo

关于环境说明(conda虚拟环境后发现没有环境名):环境说明链接

如何用conda安装PyTorch:点击跳转

关于conda的库安装:

	a.导出
		conda list -e > requirements.txt
	b.导入安装
		conda install --yes --file requirements.txt

或者pip安装:

安装的库列表:(pip install -r requirements.txt)
pip install numpy
pip install torch
pip install PyYAML
pip install tqdm
pip install opencv-python
pip install pandas
pip install requests
pip install Pillow
pip install GitPython
pip install matplotlib

查看cuda版本
nvidia-smi
在这里插入图片描述查看自己电脑安装的cuda版本:
nvcc -V

安装cuda的链接: cuda
详细保姆级安装cuda的链接:安装cuda

验证安装是否成功:

import torch
torch.cuda.is_available()

cudnn和cuda的关系:

CUDNN和CUDA是两个不同的软件库,它们都由NVIDIA公司开发,但功能和应用场景不同。以下是详细介绍:
	CUDA是一种并行计算平台和编程模型,它允许程序员在NVIDIA GPU上运行并发计算任务。CUDA包括一个编译器、一个运行时库和一套工具,支持C或C++编程语言,主要作用是提高计算速度和效率。
	CUDNN是建立在CUDA之上的深度学习库,专门针对卷积神经网络(CNN)、循环神经网络(RNN)等深度学习模型的高效计算函数,如卷积、池化、归一化和激活函数等。CUDNN的目的是提高深度学习模型的训练和推理速度,可以在NVIDIA的GPU上运行。
	
因此,CUDA提供了一种通用的并行计算平台和编程模型,而CUDNN则是一种针对深度学习的加速库,两者虽然有联系,但功能和应用场景不同。

如果下载太慢,可以更变镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/

labelImg使用

labelImg的使用:labelImg的使用

yolo-fastestv2一些碎片

yolo-fastestv2小白全流程使用指南:链接跳转

nihui大佬的ncnn的碎片

ncnn param文件及bin模型可视化解析:链接跳转

NCNN量化详解:链接跳转

模型压缩

Openvino部署YoloX:模型转换和int8量化:点击跳转

PyTorch模型静态量化、保存、加载int8量化模型:点击跳转

openvino模型量化b站视频:点击跳转

Pytorch->ONNX->NCNN->NCNNfp16->vs编译:点击跳转

附录:

1.模型公开数据地址: 点击跳转
2.windows 使用ncnn vulkan部署yolox 记录 :点击跳转
3.单目测距(yolo-目标检测+标定+测距代码)点击跳转
4.模型框架在线转换链接:点击跳转
5.模型格式说明链接:点击跳转
6.模型可视化链接:点击跳转

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值