【YOLOv5】记录YOLOv5的学习过程

2023-05-16

以下记录的是Ubuntu20.04版本,其他Ubuntu版本也相差不大~ 

一、安装pytorch GPU版本、显卡驱动、CUDA、cuDNN

下载pytorch GPU版本:

最新版本链接:Start Locally | PyTorch

历史版本链接:Previous PyTorch Versions | PyTorch

可以顺便参照TensorFlow的cuda版本: 从源代码构建  |  TensorFlow

 可以看出,目前TensorFlow CUDA版本最高支持11.2

通过对照pytorch,安装CUDA11.0版本

下图是cuda版本需要达到的算力,如果没达到的话记得更新下显卡驱动!

下载显卡对应版本驱动:

最新版本: Official Drivers | NVIDIA

其他历史版本: Official Advanced Driver Search | NVIDIA

下载对应版本CUDA:

CUDA Toolkit Archive | NVIDIA Developer

选择了11.0版本 CUDA Toolkit 11.0 Update 3 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run
sudo sh cuda_11.0.3_450.51.06_linux.run

安装后记得在 .bashrc 中添加路径  

export PATH=/usr/local/cuda-11.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.0

下载对应版本cuDNN:

  • cudnn官网:CUDA 深度神经网络库 (cuDNN) | NVIDIA Developer

选择适合的cuDNN版本即可

我选择是cuda11.0配套的cuDNN8.0版本

然后将压缩包进行解压,解压后,复制两个文件到cuda路径即可:

cp cuda/lib64/* /usr/local/cuda-11.0/lib64/
cp cuda/include/* /usr/local/cuda-11.0/include/

查看cuDNN是否安装成功:

cat /usr/local/cuda-11.0/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

若是要删除cuda:

cd /usr/local/cuda-11.0/bin
sudo ./cuda-uninstaller

若想要实时的查看GPU情况:

nvidia-smi -l 1

二、下载YOLOv5

到GitHub下载yolov5源码即可~(目前更新到YOLOv5 V7.0版本)

git clone https://github.com/ultralytics/yolov5.git

记得Python版本 需要为3.7以上,pytorch1.7以上 

下载依赖:

 pip install -r requirements.txt

下载预训练权重文件:

Releases · ultralytics/yolov5 · GitHub

将下载的权重文件pt存放在weights目录(新建的)下

测试安装:

python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.4

则可以在runs目录下查看输出结果: 


三、YOLO v5 训练自定义数据:

1、准备数据集

(自备数据集哈)

链接: https://pan.baidu.com/s/1HGMkmvDkJd8drZMc6E-pzQ 提取码: nrib 

2、创建dataset.yaml文件

在data目录下创建一个coco_chv.yaml文件

coco_chv.yaml 文件:填写数据集的路径,包括训练数据验证数据测试数据。以及类别

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/CHV_dataset # dataset root dir
train: images/train  # train images (relative to 'path') 118287 images
val: images/val  # val images (relative to 'path') 5000 images
test: images/test  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# Classes
names:
  0 : person
  1 : vest
  2 : blue helmet
  3 : red helmet
  4 : white helmet
  5 : yellow helmet

3、选择合适的预训练模型

4、修改训练模型的yaml文件 

进入models目录下,新建一个新的yaml文件用于训练,修改里面的类别个数nc

5、开始训练

注意:batch-size 后面的数字根据显卡的显存而定~太大容易爆显存!

# yolov5n
python ./train.py --data ./data/coco_chv.yaml --cfg ./models/yolov5n_chv.yaml --weights ./weights/yolov5n.pt --batch-size 20 --epochs 120 --workers 4 --name base_n --project yolo_chv
# yolov5s
python ./train.py --data ./data/coco_chv.yaml --cfg ./models/yolov5s_chv.yaml --weights ./weights/yolov5s.pt --batch-size 20 --epochs 120 --workers 4 --name base_s --project yolo_chv
# yolov5m
python ./train.py --data ./data/coco_chv.yaml --cfg ./models/yolov5m_chv.yaml --weights ./weights/yolov5m.pt --batch-size 10 --epochs 120 --workers 4 --name base_m --project yolo_chv
# yolov5l
python ./train.py --data ./data/coco_chv.yaml --cfg ./models/yolov5l_chv.yaml --weights ./weights/yolov5l.pt --batch-size 5 --epochs 120 --workers 4 --name base_l --project yolo_chv

 6、可视化

YOLO官方推荐:Weights & Biases

需要先进入官网进行注册~ 

注册后,登录,保存key码

安装wandb

pip install wandb 

安装完成后,第一次需要login

wandb login

第二次重新登录可以

wandb login --relogin

然后输入刚刚保存的key,然后回车即可!

开始训练后就可以通过登录官网进行监听~

最终的效果如下:


也可以使用tensorboard

在训练的时候,启动另外的终端输入:

tensorboard --logdir=./yolo_chv

后面跟的是项目名称,若是没有填,则默认runs目录

有没有发现tensorboard没有上面的wandb好看,哈哈哈,个人觉得tensorboard不好看!! 

 7、测试评估模型

测试:

--sources:

python detect.py --weights yolov5s.pt --source         0              # webcam
                                                       img.jpg        # image
                                                       vid.mp4        # video
                                                       path/          # directory
                                                       path/*.jpg     # glob
                                                      'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                                      'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

例如:(使用图片进行测试) 

python detect.py --source ../datasets/CHV_dataset/images/test/ppe_0048.jpg --weights yolo_chv/base_m/weights/best.pt --conf-thres 0.3

评估:

python val.py --data ./data/coco_chv.yaml  --weights yolo_chv/base_m/weights/best.pt --batch-size 10

                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 14/14 [00:02<00:00,  5.93it/s]
                   all        133        917      0.925      0.873      0.892      0.534
                person        133        387      0.974      0.891      0.934      0.576
                  vest        133        171      0.882      0.789      0.828      0.504
           blue helmet        133         49      0.999      0.878      0.897      0.522
            red helmet        133         48      0.828      0.917      0.843      0.487
          white helmet        133         99      0.939       0.94      0.959      0.628
         yellow helmet        133        163      0.928      0.822      0.889      0.489
Speed: 0.2ms pre-process, 11.7ms inference, 2.0ms NMS per image at shape (10, 3, 640, 640)


四、目标检测常用的指标

具体相关知识可以参考以下博文:

【机器学习】模式识别基本概念_Q小鑫的博客-CSDN博客_机器学习模式识别

  • 真阳性TP(True Positive)    :预测是阳,实际是阳,预测正确
  • 假阳性FP(False Positive)  :预测是阳,实际是阴,预测错误
  • 假阴性FN(False Negative:预测是阴,实际是阳,预测错误
  • 真阴性TN(True Negative)    :预测是阴,实际是阴,预测正确

Precision:精度、查准率,是评估预测的(预测阳性)准不准

Recall:召回率、查全率,是评估找的全不全

IOU(交并比) intersection over union

 

  • IOU=1,表示预测与标注边界框完全匹配
  • 若设置IOU阈值,比如0.5
    • 如果IOU>=0.5,则表示TP(真阳性)
    • 如果IOU<0.5,则表示为FP(假阳性)
    •  如果有标注,但未检测出,则为FN(假阴性)
    • TN(真阴性)对目标检测没有用处,忽略

mAP(mean Average Precision)

  • AP衡量模型在每个类别上的好坏
  • mAP衡量模型在所有类型上的好坏;mAP取所有类别AP的平均值

 在这里插入图片描述

定义:PR线下方的面积就是AP(Average Precision)

Pascal VOC 2007:11点计算法

AP = (AP(0) + AP(0.1) + AP(0.2) + AP(0.3) + ... +AP(1.0))/ 11

Pascal VOC 2010-2012:所有的点计算 

 COCO mAP:使用101个recall 取值点:[0:.01:1]

COCO中AP和mAP不做区分,是对所有类别求平均值

AP^{IOU}=0.5 表示IOU=0.5 时的AP(相当于Pascal VOC 的mAP)

AP[.5:.05:.95]=\frac{AP^{IOU=0.5}+AP^{IOU=0.55}+...+AP^{IOU=0.95}}{10}

检测速度:

  • 前传耗时:输入图像到输出结果的耗时,包括前处理(如归一化)、网络前传耗时、后处理(如NMS非极大抑制)
  • FPS:每秒帧数,每秒钟能处理的图像数量
  • 浮点运算量(Flops):处理一张图所需要的浮点运算数量,与硬件无关


 五、如何得到最优的训练结果

参考:Tips for Best Training Results · ultralytics/yolov5 Wiki · GitHub

1、数据

  • 每类图片:建议>=1500张;

  • 每类实例(标注的物体):建议>=10000个;

  • 图片采样:真实图片建议在一天中不同时间、不同季节、不同天气、不同光照、不同角度、不同来源(爬虫抓取、手动采集、不同相机源)等场景下采集;

  • 标注:

    • 所有图片上所有类别的对应物体都需要标注上,不可以只标注部分;
    • 标注尽量闭合物体,边界框与物体无空隙,所有类别对应物体不能缺少标签;
  • 背景图:背景图用于减少假阳性预测(False Positive),建议提供0~10%样本总量的背景图,背景图无需标注;

2、模型选择

模型越大一般预测结果越好,但相应的计算量越大,训练和运行起来都会慢一点,建议:

  • 在移动端(手机、嵌入式)选择:YOLOv5n/s/m
  •  云端(服务器)选择:YOLOv5l/x

3、训练

  • 对于小样本、中样本,建议试用预训练模型开始训练:
python train.py --data custom.yaml --weights yolov5s.pt
                                             yolov5m.pt
                                             yolov5l.pt
                                             yolov5x.pt
                                             custom_pretrained.pt
  • 对于大样本,建议从0开始训练(无需预训练模型):
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
                                                      yolov5m.yaml
                                                      yolov5l.yaml
                                                      yolov5x.yaml
  • Epochs:初始设定为300,如果很早就过拟合,减少epoch,如果到300还没过拟合,设置更大的数值,如600, 1200等;
  • 图像尺寸:训练时默认为--img 640,如果希望检测出画面中的小目标,可以设为--img 1280(检测时也需要设为--img 1280才能起到一样的效果)
  • Batch size:选择你硬件能承受的最大--batch-size
  • 超参数(Hyperparameters):初次训练暂时不要改,具体参考Hyperparameter Evolution · Issue #607 · ultralytics/yolov5 · GitHub

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【YOLOv5】记录YOLOv5的学习过程 的相关文章

随机推荐

  • Jetson TX2 NX安装遇到的问题汇总

    Jetson TX2 NX安装遇到的问题汇总 1 刷入系统时候报错 xff08 虚拟机没有进入Rec模式 xff09 解决办法 xff1a 因为跳线帽没有将那两个引脚短路 xff0c 换一个跳线帽就行 2 刷入的时候报错 xff08 虚拟机
  • cmake 创建静态库、创建动态库、进行连接

    C 43 43 使用cmake编译 学习如何创建 静态库 动态库 学习如何连接现有的 静态库 动态库 生成静态库示例 xff1a 在account dir目录下 xff1a Account h span class token macro
  • 51单片机串口通信实操(中断函数)

    51单片机串口通信实操 xff08 中断函数 xff09 详细参考单片机手册 SM0 SM1分别为0 1时为模式一 xff0c 因为模式一最为常用 REN 61 1 xff0c 为接收 xff0c REN 61 0 为不接收 当 SM0 S
  • 【Qt学习】编写第一个Qt程序(使用纯代码)

    其实大部分情况下还是使用qtcreator这个工具去编写我们的Qt程序 xff0c 而为什么要记录下这一篇笔记呢 xff1f 主要是想走一遍Qt编译的一个流程 xff0c 更好的理解其内部的编译 xff01 一 创建存放Qt程序的文件夹 x
  • linux---线程安全(同步与互斥)

    1 什么是线程安全 2 如何实现线程安全 3 什么是互斥和互斥的实现 4 死锁 5 什么是同步和同步的实现 6 可重入和不可重入函数 1 什么是线程安全 多个线程同时操作临界资源 xff0c 而不会出现数据的二义性就说明这个线程就是线程安全
  • 【conda学习】记录conda命令

    我们在安装python环境依赖时都比较喜欢使用Anaconda或者Miniconda来进行配置 xff0c 因此本文主要记录一下conda命令的一些相关操作 目录 一 查看版本号 二 查看当前存在的环境空间 三 创建环境空间 四 激活环境空
  • 【STM32学习】(一)CubeMX安装

    安装的所需工具 xff1a 链接 xff1a https pan baidu com s 100vmpGWgrkjasTqhxFFcww 提取码 xff1a zw9i 1 安装JRE 打开JPE安装包 xff1a 然后按照默认即可安装成功
  • 【STM32学习】(二)CubeMX基于HAL库GPIO输出/输入

    本文主要记录下初学cubeMX进行HAL库配置 单片机 xff1a STM32F407ZGT6 一 新建工程 打开CubeMX xff0c Access To MCU SELETOR 二 配置CubeMX 1 设置Debug方式 因为我用的
  • 【科研】文献下载神器方式汇总

    目录 1 X MOL 2 文献小镇 3 文献部落 4 柠檬文献 5 SCI Hub 6 SCI Down 1 X MOL X MOL科学知识平台 学术综合平台 xff0c 查询和下载集成一体 2 文献小镇 sci hub网址 SCIHUB
  • 【Ubuntu】Ubuntu20.04安装GPU显卡驱动

    一 安装显卡驱动 方式一 xff1a 图形界面安装 等待安装即可 方式二 xff1a 命令行安装 sudo apt get install nvidia driver 515 有些显卡只支持455 安装完成记得重启一下 xff0c 然后验证
  • 【Ubuntu】Ubuntu20.04安装NVIDIA Container Toolkit

    基于Apollo的CUDA的docker镜像需要依赖于NVIDIA Container Toolkit xff0c 运行以下命令安装NVIDIA Container ToolKit xff1a distribution 61 etc os
  • 【Cyber RT】Apollo Cyber RT安装

    一 下载源码 克隆Apollo 源码仓库 git clone https gitee com ApolloAuto apollo git xff08 耗时30min xff09 二 启动Apollo Docker 开发容器 进入到Apoll
  • 【导航规划】导航规划背景知识总结

    导航规划类型 xff1a 固定路径引导 1 有人工标识导引 xff08 AGV xff09 磁条导航 磁感应线导航 磁钉导航 二维码导航 AGV xff1a Automatic Guided Vehicle 自动导引车 优点 xff1a 技
  • 【Ubuntu】树莓派4B安装Ubuntu18.04(超详细)

    本教程主要记录下近期给树莓派4B安装Ubuntu18 04的过程 xff01 xff01 xff01 目录 一 下载Ubuntu18 04 Server版本 二 烧录 三 修改WiFi登录以及树莓派分辨率 1 修改wifi 2 修改分辨率
  • 【Summary】机器人方法汇总

    目录 一 软件安装篇 1 安装ROS 2 树莓派4B安装Ubuntu18 04 3 Ubuntu20 04安装GPU 4 Ubuntu20 04安装NVIDIA Container Toolkit 5 Apollo Cyber RT安装 二
  • linux---生产者和消费者模型(条件变量和信号量实现)

    问题的提出 在我们对一些全局变量的进行非原子性操作的时候就可能出现非线程安全 xff0c 比如我们吃面的问题 我们做面的人就是生产者 xff0c 吃面的人就是我们的消费者 xff0c 当我们的消费者需要吃面的时候就唤醒我们的生产者进行生产
  • 【SLAM学习】一些必备依赖包的安装与问题总结

    Ceres xff1a 下载地址 xff1a https github com ceres solver ceres solver releases tag 1 14 0 1 修改 sources list sudo gedit etc a
  • 【数据集】数据集下载总结

    1 AI Studio 数据集 开放数据集 百度AI Studio 人工智能学习与实训社区 2 天池 数据集 数据集 阿里系唯一对外开放数据分享平台 3 Papers with code 数据集 Machine Learning Datas
  • 【RealSense】L515学习记录

    Intel RealSense SDK 2 0的安装 1 注册服务器的公钥 sudo apt key adv keyserver keyserver ubuntu com recv key F6E65AC044F831AC80A06380C
  • 【YOLOv5】记录YOLOv5的学习过程

    以下记录的是Ubuntu20 04版本 xff0c 其他Ubuntu版本也相差不大 一 安装pytorch GPU版本 显卡驱动 CUDA cuDNN 下载pytorch GPU版本 xff1a 最新版本链接 xff1a Start Loc