文章目录

  • YOLOv5训练自定义模型
  • 环境的适配与安装
    • pytorch和tensorflow与cuda的适配
  • 安装pytorch
    • 安装YOLO v5
  • YOLO v5训练自定义数据
    • 准备数据集
    • 选择合适的预训练模型
    • 训练
    • 可视化
    • 评估测试模型
  • 如何得到最好的训练结果
    • 数据
    • 模型选择
    • 训练

YOLOv5训练自定义模型

首先先把环境搭建起来,训练的过程往往需要好的gpu,使用英伟达的gpu和必要的cuda环境,需要驱动和cuda适配,然后深度学习框架与环境适配,我们就先来配置环境。训练我们使用pytorch深度学习框架。

环境的适配与安装

深度学习框架常用的有2个,pytorch和Tensorflow,一般深度学习都是依赖英伟达的gpu的,所以cuda,cudnn,显卡驱动的适配就很重要了,深度学习框架是适配cuda的所以有一系列的适配链条。
技巧提示:一般pytorch和Tensorflow会混用,所以适配pytorch的时候,最好也把Tensorflow适配了。

pytorch和tensorflow与cuda的适配

先去pytorch官网(https://pytorch.org/get-started/locally/)查看支持的CUDA版本。建议配合TensorFlow官网一起参考,以便两个库都可以使用。以cuda10.2为例在最新版已经不支持了win的配置了,但是找历史版本是可以找到的。
pytorch的最新版:https://pytorch.org/get-started/locally/
pytorch的历史版:https://pytorch.org/get-started/previous-versions/

查看Tensorflow支持cuda的列表–>GPU支持CUDA列表:https://www.tensorflow.org/install/source_windows?hl=zh-cn
注意,下面这个图可以作为cuda和cudnn的匹配参考,一般tensorflow是要求的比较严格的。

注意:需要科学上网才能看到这些网站。
深度学习框架跟cuda适配完了,再查看所需CUDA版本对应的显卡驱动版本,进行cuda与显卡驱动的适配。
参考信息:
https://docs.nvidia.com/deploy/cuda-compatibility/index.html#abstract
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
https://tech.amikelive.com/node-930/cuda-compatibility-of-nvidia-display-gpu-drivers/

注意,适配驱动的时候,官网说明只要大于某个版本就可以,实际使用的过程中,用高版本会出现不匹配的情况,所以驱动的选择不应该太高。比最小值高一点为宜,或者干脆选择最小版本。 不要使用beta版本。
下载最新版的英伟达驱动:https://www.nvidia.com/download/index.aspx

下载历史版本的英伟达驱动:https://www.nvidia.com/Download/Find.aspx

注意,驱动不要使用beta版本!尤其是一些主打游戏的显卡,会有DCH和游戏版本,用标准版就可以了。
然后下载对应版本的cuda:https://developer.nvidia.com/cuda-toolkit-archive
– 下载cuda对应版本的cudnn –
参考TensorFlow GPU支持CUDA列表:https://www.tensorflow.org/install/source_windows?hl=zh-cn
cudnn官网:https://developer.nvidia.com/zh-cn/cudnn
下载VS studio:https://visualstudio.microsoft.com/zh-hans/

安装顺序:
1.VS studio:安装社区版即可
2.显卡驱动:安装完重启电脑可以使用nvidia-smi查看显卡信息
3.CUDA:按流程安装即可
4.cudnn:
解压cudnn压缩文件:

进入cuda目录,将cudnn所有文件复制并替换,如我的cuda目录位置为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1

更改环境变量,增加path下的环境变量,新建2个路径(cuda bin、libnvvp)如我的路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp。 一般这俩装了cuda都会自己安装,此处大部分只是确认一下。
重启电脑,让安装的环境全部生效。
备注2个命令 :
nvidia-smi,查看驱动的版本,以及驱动最高支持的版本。

nvcc --version :查看安装cuda的真正的版本

安装pytorch

创建conda虚拟环境,参考你选择的版本安装即可。注意python的版本要参考框架的需求。不备注就是最新版的python。

conda create  --name env_name python=3.7

最新版:https://pytorch.org/get-started/locally/
历史版本:https://pytorch.org/get-started/previous-versions/

视频是:pip install torch1.8.1+cu101 torchvision0.9.1+cu101 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

我的是:pip install torch1.10.1+cu102 torchvision0.11.2+cu102 torchaudio==0.10.1 -f https://download.pytorch.org/whl/torch_stable.html

安装YOLO v5

  • 安装
    yolov5的安装是有前提的:install requirements.txt in a Python>=3.7.0 environment, including PyTorch>=1.7.
# 克隆地址
git clone https://github.com/ultralytics/yolov5.git
# 如果下载速度慢,参考课程附件:
Windows软件/yolov5-master.zip # 进入目录
cd yolov5
# 安装依赖
pip3 install -r requirements.txt
  • 下载预训练权重文件
    下载地址:https://github.com/ultralytics/yolov5/releases,附件位置:Windows软件/yolov5s.pt,将权重文件放到weights目录下(默认没有weights目录,需要自己新建):

    测试安装:
python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.4python detect.py --source 0 --weights weights/yolov5s.pt --conf-thres 0.4   # 开摄像头的版本

YOLO v5训练自定义数据

准备数据集

  1. 创建 dataset.yaml
    复制yolov5/data/coco128.yaml一份,比如为coco_chv.yaml。yolov5是一个目标检测的模型,在这个文件中说明了你要检测什么东西,有几类,分别是什么标签,以及你的训练集,测试集,验证集在磁盘上的位置。
# 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  # 数据所在目录
train: images/train  # 训练集图片所在位置(相对于path)
val:  images/val # 验证集图片所在位置(相对于path)
test:  # 测试集图片所在位置(相对于path)(可选)# 类别
nc: 6  # 类别数量
names: ['person','vest','blue helmet','red helmet','white helmet','yellow helmet']  # 类别标签名
  1. 数据打标
    使用LabelImg等标注工具(需要支持YOLO格式,使用的时候记得切换一下)标注图片:
    LabelImg可以通过github下载:https://github.com/tzutalin/labelImg

    YOLO格式标签:

    需要理解好,xywh相对于图像的意义。
  • 一个图一个txt标注文件(如果图中无所要物体,则无需txt文件);
  • 每行一个物体; 每行数据格式:类别id、x_center y_center width height;
  • xywh必须归一化(0-1),其中x_center、width除以图片宽度,y_center、height除以画面高度;
  • 类别id必须从0开始计数。

组织目录结构:

datasets与yolov5同级目录;

YOLO会自动将…/datasets/CHV_dataset/images/train/ppe_1106.jpg中的/images/替换成/labels/以寻找它的标签,如…/datasets/CHV_dataset/labels/train/ppe_1106.txt,所以根据这个原则,我们一般可以:

  • images文件夹下有train和val文件夹,分别放置训练集和验证集图片;
  • labels文件夹有train和val文件夹,分别放置训练集和验证集标签(yolo格式);

这里采用的是一种约定大于配置的思想,标签和图片必须同级,然后内部的目录结构必须一致。然后标签信息和图片信息需要同名,然后文件类型不同,jpg与txt,是严格对应的。

选择合适的预训练模型

为什么需要预训练模型?减少训练时间,提升训练效果。
根据神经网络的规模,我们把预训练模型分为了以下几种大小,规模越大的模型推理速度越慢,但是准确度越高。

根据你的设备,选择合适的预训练模型,具体模型比对如下:

复制yolov5文件夹下的models下对应模型的yaml文件,重命名。

并修改其中:

nc: 80  # 类别数量

这个文件是声明模型的相关参数的。一般模型越大,深度和高度的复杂度会越高,可以看一下几个文件对比一下。

训练

下载对应的预训练模型权重文件,可以放到weights目录下,设置本机最好性能的各个参数,即可开始训练,课程中训练了以下参数:

# 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_test# yolov5s
python .\train.py --data .\data\coco_chv.yaml --cfg .\models\yolov5s_chv.yaml --weights .\weights\yolov5s.pt --batch-size 16 --epochs 120 --workers 4 --name base_s --project yolo_test# yolov5m
python .\train.py --data .\data\coco_chv.yaml --cfg .\models\yolov5m_chv.yaml --weights .\weights\yolov5m.pt --batch-size 12 --epochs 120 --workers 4 --name base_m --project yolo_test# yolov5n6 1280
python .\train.py --data .\data\coco_chv.yaml --img-size 1280 --cfg .\models\yolov5n6_chv.yaml --weights .\weights\yolov5n6.pt --batch-size 20 --epochs 120 --workers 4 --name base_n6 --project yolo_test

data:数据集的说明文件
cfg:模型的参数,可以设置网络的规模
weights:预训练模型
batch-size:批处理的大小,越大越好,太大的话显存内存可能不够
epochs:训练多少代
name:给训练起个名字,会在项目文件夹下,新建name文件夹。
project:项目名,一个项目可以有多个训练。会在根目录下创建这个项目名对应的文件夹。
更多参数见train.py;
训练结果在runs/train/中可见,一般训练时间在几个小时以上。

可视化

  1. wandb

YOLO官网推荐使用: https://wandb.ai/。

  • 使用pip install wandb安装扩展包;
  • 去官网注册账号;
  • 训练的时候填写key秘钥,地址:https://wandb.ai/authorize
  • 打开网站即可查看训练进展。
  1. Tensorboard
    tensorboard --logdir=./runs runs 代表项目名 不填的话,默认去找runs 找根目录下正在运行的训练。

评估测试模型

  1. 测试
    训练的模型,在实际的图片中识别效果如何,需要测试一下。
Usage - sources:$ python path/to/detect.py --weights yolov5s.pt --source 0              # webcamimg.jpg        # imagevid.mp4        # videopath/          # directorypath/*.jpg     # glob'https://youtu.be/Zgi9g1ksQHc'  # YouTube'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream# 如
python detect.py --source ./test_img/img1.jpg --weights runs/train/base_n/weights/best.pt --conf-thres 0.3
# 或
python detect.py --source 0 --weights runs/train/base_n/weights/best.pt --conf-thres 0.3
  1. 评估
    如何判定训练出的模型是不是准确呢?就需要用到模型评估了,一般会产出一个报表。
# n
# python val.py --data ./data/coco_chv.yaml  --weights runs/train/base_n/weights/best.pt --batch-size 12
# 4.3 GFLOPsClass     Images     Labels          P          R     mAP@.5 mAP@.5:.95all        133       1084       0.88      0.823      0.868      0.479person        133        450      0.899      0.808      0.877      0.484vest        133        217      0.905      0.788      0.833      0.468blue helmet        133         44      0.811       0.75      0.803      0.489red helmet        133         50      0.865        0.9      0.898      0.425white helmet        133        176      0.877      0.807      0.883      0.467yellow helmet        133        147      0.922      0.885      0.917      0.543
Speed: 0.2ms pre-process, 4.7ms inference, 3.9ms NMS per image at shape (12, 3, 640, 640)# s
# python val.py --data ./data/coco_chv.yaml  --weights runs/train/base_s/weights/best.pt --batch-size 12
# 15.8 GFLOPsClass     Images     Labels          P          R     mAP@.5 mAP@.5:.95all        133       1084      0.894      0.848      0.883      0.496person        133        450      0.915       0.84      0.887      0.508vest        133        217      0.928      0.834      0.877      0.501blue helmet        133         44      0.831       0.75      0.791      0.428red helmet        133         50        0.9      0.899      0.901      0.473white helmet        133        176      0.884      0.858       0.91      0.496yellow helmet        133        147      0.908      0.905       0.93      0.567
Speed: 0.2ms pre-process, 8.3ms inference, 3.9ms NMS per image at shape (12, 3, 640, 640)# m
# python val.py --data ./data/coco_chv.yaml  --weights runs/train/base_m/weights/best.pt --batch-size 12
# 48.0 GFLOPsClass     Images     Labels          P          R     mAP@.5 mAP@.5:.95all        133       1084      0.928      0.845      0.886      0.512person        133        450      0.935      0.794      0.895      0.529vest        133        217      0.922      0.813      0.868      0.508blue helmet        133         44      0.916      0.818      0.812      0.464red helmet        133         50        0.9        0.9      0.892      0.488white helmet        133        176      0.932      0.841      0.899      0.511yellow helmet        133        147      0.964      0.905      0.948      0.574
Speed: 0.4ms pre-process, 18.8ms inference, 4.6ms NMS per image at shape (12, 3, 640, 640)# n6 1280 :
# python val.py --data ./data/coco_chv.yaml  --weights runs/train/base_n6_1280/weights/best.pt --batch-size 12 --img-size 1280
# 4.3 GFLOPsClass     Images     Labels          P          R     mAP@.5 mAP@.5:.95all        133       1084      0.906      0.858      0.901      0.507person        133        450      0.903      0.831      0.887      0.503vest        133        217      0.922      0.816       0.86      0.486blue helmet        133         44      0.843      0.795      0.828      0.465red helmet        133         50      0.899       0.92      0.954      0.507white helmet        133        176      0.921      0.865      0.925      0.515yellow helmet        133        147      0.947      0.918      0.954      0.566
Speed: 1.5ms pre-process, 14.1ms inference, 2.2ms NMS per image at shape (12, 3, 1280, 1280)

P:精度
R:召回率
基本可以得出结论:模型越大,检测精度越好,但是需要的算力越高,推理速度越慢。

常见GPU卡的算力(几乎都是以T为单位的)如下,理论上,一张T4可以运行几百个模型,实际上不可以。

需要思考,如果自己做web界面的可视化,需要如何打通?

如何得到最好的训练结果

github地址:https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results

数据

  • 每类图片:建议>=1500张;
  • 每类实例(标注的物体):建议>=10000个;
  • 图片采样:真实图片建议在一天中不同时间、不同季节、不同天气、不同光照、不同角度、不同来源(爬虫抓取、手动采集、不同相机源)等场景下采集;
  • 标注:所有图片上所有类别的对应物体都需要标注上,不可以只标注部分;
  • 标注:标注尽量闭合物体,边界框与物体无空隙,所有类别对应物体不能缺少标签;
  • 背景图:背景图用于减少假阳性预测(False Positive),建议提供0~10%样本总量的背景图,背景图无需标注;

模型选择

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

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

训练

  • 对于小样本、中样本,建议试用预训练模型开始训练:
python train.py --data custom.yaml --weights yolov5s.ptyolov5m.ptyolov5l.ptyolov5x.ptcustom_pretrained.pt
  • 对于大样本,建议从0开始训练(无需预训练模型):
# --weights ''python train.py --data custom.yaml --weights '' --cfg yolov5s.yamlyolov5m.yamlyolov5l.yamlyolov5x.yaml
  • Epochs:初始设定为300,如果很早就过拟合,减少epoch,如果到300还没过拟合,设置更大的数值,如600, 1200等;
  • 图像尺寸:训练时默认为–img 640,如果希望检测出画面中的小目标,可以设为–img 1280(检测时也需要设为–img 1280才能起到一样的效果)
  • Batch size:选择你硬件能承受的最大–batch-size;
  • 超参数(Hyperparameters):初次训练暂时不要改,具体参见https://github.com/ultralytics/yolov5/issues/607
  • 更多:官网建议 查看http://karpathy.github.io/2019/04/25/recipe/

2.yolov5目标监测-实践部分相关推荐

  1. YOLOv5目标检测源码重磅发布了!

    YOLOv5目标检测源码重磅发布了! https://github.com/ultralytics/yolov5 该存储库代表了对未来对象检测方法的超解析开源研究,并结合了在使用之前的YOLO存储库在 ...

  2. Yolo-V5目标检测 项目实战

    引言 本文将一步一步的指导训练 Yolo-v5并进行推断来计算血细胞并定位它们. 我曾试图用 Yolo v3-v4做一个目标检测模型,在显微镜下用血液涂抹的图像上计算红细胞.白细胞和血小板,但是我没有 ...

  3. 腾讯 QQ 看点图文多目标推荐实践经验

    作者:zhongzhao,腾讯 PCG 应用研究员 在推荐系统中,最常用的排序模型是以用户点击为目标的 CTR 预估模型,它没有考虑用户点击后的消费深度,也没有考虑用户的多种互动行为带来的生态方面的收 ...

  4. 腾讯信息流推荐业务实践:内容分发场景的多目标架构实践

    猜你喜欢 0.2022年1月份热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  5. 【推荐实践】内容分发场景的多目标架构实践

    猜你喜欢 0.2022年1月份热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  6. 腾讯QQ看点信息流推荐业务:内容分发场景的多目标架构实践

    猜你喜欢 0.2022年1月份热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  7. 基于高通SNPE推理引擎的yolov5目标检测算法

    上图源自Snapdragon Neural Processing Engine SDK Reference Guide,它展示了一个Deep Learning Neural Network在SNPE环 ...

  8. YOLOv5目标检测➕声音告警

    首先是YOLOv5目标检测模型,在此基础上加上当检测到目标后,使用电脑自带的喇叭进行声音告警,可以应用于烟雾火焰声音告警 入侵区域检测声音告警等项目

  9. Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)

    本文介绍了如何搭建yolov5目标检测代码的环境,详细记录了python虚拟环境.安装pytorch.加载yolov5项目以及运行检测程序的全过程. 完成了本文的yolov5项目搭建后,可以查看本文下 ...

最新文章

  1. 投影元素直接隔离_Angular ngcontent 内容投影
  2. Spring远程支持和开发RMI服务
  3. mysql并发获取唯一数值_高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]...
  4. 浅谈JavaScript中闭包
  5. 出栈顺序 与 卡特兰数(Catalan)的关系
  6. 飞鸽传书mayfish 数据入库验证
  7. 信息学奥赛C++语言: 跑步
  8. geoserver rest 导入shape文件错误
  9. ReactNative之Flex布局总结
  10. 项目管理九大知识领域
  11. java中将json转换成map
  12. Web 前端常用插件
  13. JavaScript 3D动画库three.js入门篇
  14. Java中集合retainall_Collection中的之retainAll()方法的理解
  15. 必备24个宝藏工具,赶紧收藏,在家做自媒体8天收益4100
  16. php难学习吗,学php难吗
  17. win10安装虚拟机
  18. 百度BML飞桨训练营(五)商品种类识别
  19. kali Linux升级后问题一大堆,Kali linux 2020 常见问题的解决方法(持续更新)
  20. python 编辑距离_最小编辑距离(Levenshtein)的 Python 实现

热门文章

  1. 人工神经网络模型、人类的大脑和人类社会本身相似性 (一家之言,仅供一笑)。
  2. 今天看到一个不错的漫画网站(E文)
  3. 石家庄神月软件java笔试
  4. ReID中PCB模型输出维度_小白入门系列—— ReID(三):进阶:学习分块局部特征
  5. Python——图像处理(crop()函数、thumbnail方法)
  6. 【“Unfortunately,app has stoped”问题与解决】
  7. 腾讯开放平台提交app审核无法上传apk文件
  8. XShell安装报错1605或1608
  9. 字符串中的截取,分割,转换方法
  10. 算法笔记 揭开广度优先遍历BFS的神秘面纱 HERODING的算法之路