1.环境的搭建
自己去pytorch官网下载相关的pytorch,搭建属于自己的环境。值得注意的是如果和项目的环境不一样的话可以会造成一系列的报错。而且最好使用python的集成开发环境,减少自己搭建环境的难度。这里推荐Anaconda3,可以减少很多工作。最后受限于显卡的CUDA版本的影响,如果要想代码可以正常的运行需要降级驱动(windows下)。这里记录一个网站驱动回滚可以下载很早之前的各种驱动版本,另外Nvidia显卡控制面板上的版本是上限,还受制于对于关系,如下图。以前版本的pytorch选择属于自己的版本的环境软件。
之后因为是在国内访问国外网站,使用Anaconda3可能会下载失败,而且国内清华源和阿里源也可能没有你所需要的版本,这里就需要手动进行一个下载whl安装包下面的下载方式最后的方式是使用IDM+pip的网站进行一个下载,可以跑满校园宽带。当然也可以直接在Pytorch上使用conda命令下载,不过需要提前进行换源,速度也没有IDM快。
还有就是查看NV显卡驱动(AMD的没有研究过可以百度一下),保证驱动版本的CUDA必须是一一对应的的。对应关系还有CUDA下载地址,注意的是,Pytorch安装pip版的CUDA,要不要安装CUDAwindows端看你的软件需求,比如OpenPose在windwos上运行Demo的时候就需要。
Nvidia显卡控制面板
![](../image/My20220529184627.jpg)
![](../image/cf697a60af4954aef0cd5e8a17cd67b7.png)
1 | pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html # CUDA 11.0 |
1 | conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch # CUDA 11.0 |
2.训练
重要的是数据和标签。在一个目录下创建两个文件夹images和labels,在目录下创建两个文件夹一个是训练的集合的图片,一个是对训练集合的验证,一般是进行一个7:3防止模型出现过拟合的状态。官方教程
![](../image/ccc4f377e7a1ec5ff1ced54c402509a7.png)
3.tensorboard的使用
要执行这个命令的条件是在一个logs文件夹的上级目录下运行,这个命令,而且需要安装tensorboard
![](../image/488deec039e719233558d93ea7f82a5d.png)
![](../image/4d3daf379a920fa570916bbeea046a5a.png)
1 | tensorboard --logdir=logs |
4.基本概念
可以在detect中修改需要匹配的文件路径,之后再detect的main函数里面修改相关的参数进行调试。其中open_rf为是否开启活体检测,device设置为0就是调用电脑GPU,也可以设置文件的路径就是使用本地的视频或者图片进行一个识别。还有就是yolov5一个是置信度的阈值一个是IOU的阈值,一般将识别率认为是置信度即可,在这个置信区间的识别率。iou-thres是IOU的阈值,conf-thres置信度的阈值。
numpy和python本身的数据类型是不支持gpu的。所以要先转换成tensor类型,在放入cuda。同理tensor在cuda内也不能直接转成其他类型,先拿到cpu才能变换成numpy或其他类型
下面是现实识别率的代码,如果要现实可以加到label里面去。
1 | f'{names[int(cls)]}{conf:.2f}' |
5.训练指令说明
有参:
–weights (⭐)指定权重,如果不加此参数会默认使用COCO预训的yolov5s.pt,–weights ‘’则会随机初始化权重
–cfg 指定模型文件
–data (⭐)指定数据文件
–hyp指定超参数文件
–epochs (⭐)指定epoch数,默认300
–batch-size (⭐)指定batch大小,默认16,官方推荐越大越好,用你GPU能承受最大的batch size,可简写为–batch
–img-size 指定训练图片大小,默认640,可简写为–img
–name 指定结果文件名,默认result.txt
–device 指定训练设备,如–device 0,1,2,3
–local_rank 分布式训练参数,不要自己修改!
–log-imgs W&B的图片数量,默认16,最大100
–workers 指定dataloader的workers数量,默认
–project 训练结果存放目录,默认./runs/train/
–name 训练结果存放名,默认exp
无参:
–rect矩形训练
–resume 继续训练,默认从最后一次训练继续
–nosave 训练中途不存储模型,只存最后一个checkpoint
–notest 训练中途不在验证集上测试,训练完毕再测试
–noautoanchor 关闭自动锚点检测
–evolve超参数演变
–bucket使用gsutil bucket
–cache-images 使用缓存图片训练
–image-weights 训练中对图片加权重
–multi-scale 训练图片大小+/-50%变换
–single-cls 单类训练
–adam 使用torch.optim.Adam()优化器
–sync-bn 使用SyncBatchNorm,只在分布式训练可用
–log-artifacts 输出artifacts,即模型效果
–exist-ok 如训练结果存放路径重名,不覆盖已存在的文件夹
–quad 使用四分dataloader
6.训练
快速检测命令
1 | # 快速推理,--source 指定检测源,以下任意一种类型都支持: |
自定义检测:使用权重./weights/yolov5s.pt去推理./data/images文件夹下的所有媒体,并且推理置信度阈值设为0.5:
1 | python detect.py --source ./data/images/ --weights ./weights/yolov5s.pt --conf 0.5 |
检测指令说明
有参:
–source(⭐) 指定检测来源
–weights 指定权重,不指定的话会使用yolov5s.pt预训练权重
–img-size 指定推理图片分辨率,默认640,也可使用–img
–conf-thres 指定置信度阈值,默认0.4,也可使用–conf
–iou-thres 指定NMS(非极大值抑制)的IOU阈值,默认0.5
–device 指定设备,如–device 0 –device 0,1,2,3 –device cpu
–classes 只检测特定的类,如–classes 0 2 4 6 8
–project 指定结果存放路径,默认./runs/detect/
–name 指定结果存放名,默认exp
无参:
–view-img 图片形式显示结果
–save-txt 输出标签结果(yolo格式)
–save-conf 在输出标签结果txt中同样写入每个目标的置信度
–agnostic-nms 使用agnostic NMS(前背景)
–augment 增强识别,速度会慢不少。详情
–update 更新所有模型
–exist-ok 若重名不覆盖
7.测试
测试命令,首先明确,推理是直接检测图片,而测试是需要图片有相应的真实标签的,相当于检测图片后再把推理标签和真实标签做mAP计算。使用./weights/yolov5x.pt权重检测./data/coco.yaml里定义的测试集,图片分辨率设为672。
1 | python test.py --weights ./weights/yolov5x.pt --data ./data/coco.yaml --img 672 |
有参:
–weights(⭐) 测试所用权重,默认yolov5sCOCO预训练权重模型
–data(⭐) 测试所用的.yaml文件,默认使用./data/coco128.yaml
–batch-size 测试用的batch大小,默认32,这个大小对结果无影响
–img-size 测试集分辨率大小,默认640,测试建议使用更高分辨率
–conf-thres目标置信度阈值,默认0.001
–iou-thresNMS的IOU阈值,默认0.65
–task 指定任务模式,train, val, 或者test,测试的话用–task test
–device 指定设备,如–device 0 –device 0,1,2,3 –device cpu
–project 指定结果存放路径,默认./runs/test/
–name 指定结果存放名,默认exp
无参:
–single-cls 视为只有一类
–augment 增强识别
–verbose 输出各个类别的mAP
–save-txt 输出标签结果(yolo格式)
–save-hybrid 输出标签+预测混合结果到txt
–save-conf 保存置信度至输出文件中
–save-json 保存结果为json
–exist-ok 若重名不覆盖
8.效果展示
直接贴上我汤神的照片:
![](../image/1aa435ba387fec0585d9eb5d2e2fea6c.png)
- 本文作者: windfill
- 本文链接: https://windfill.github.io/article/2391c58c.html
- 版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!