详细讲述Yolov5从下载、配置及如何使用GPU运行

前言

自我感觉写得较为详细了,如果有不对的地方,或者报错的地方,可以私信我,我尽力提供帮助。

当然希望你是确定自己完整了阅读了这篇小博客,以及通过搜索引擎查询了相关问题,仍然没有解决的话,那么我觉得我们是可以进行交流的

cuda部分环境的安装,没有做记录(不太好重装,下次换电脑的时候再写),当下可能还是需要各位朋友自己去准备一下,我在博客中也给出了相关的文章可供参考。

笔者此次所编写的为系列文章,涵盖了Yolov5的环境安装、项目运行、模型训练、模型识别、模型部署等一系列文章。

笔者电脑相关环境:

  • Windows11
  • RTX 3050,(最高支持cuda 11.7,所以我装的是11.7版本的,不装也可以跑的,可以跑CPU版本,后续有说)查询版本命令:nvidia-smi

一、项目准备

1.1、下载项目

yolov5.6.1-github

yolov5s.pt是权重文件,后面需要用到的,先下载下来,后面直接放到项目中(也可以不下载哈,后面有命令也可以自动下载下来,不过看网速)

1.2、使用 conda 创建隔离环境

bash 复制代码
    conda create -n yolov5_6.1_demo_py3.8 python=3.8

备注:-n 就是指定名称,python=3.8 就是指定python版本为3.8。

显示如上输出,则表示输出成功。

基本命令:

bash 复制代码
    conda active [name] #根据环境名称激活某个环境
    conda deactivate [name] #根据环境名称退出某个环境
    conda env list # env list

补充:第一张图使用的是windows powershell,但是发现激活后,没环境前缀,又换回到cmd啦,成果激活会显示环境名称的前缀。

1.3、使用 PyCharm 打开下载的项目

备注:解压后,我修改了项目文件夹名称。

使用 PyCharm 打开项目时,会弹出一个创建虚拟环境的窗口,点击取消

因为我们此前已经使用conda创建了一个隔离环境啦。

打开设置,添加我们之前创建的环境:

后面就是点击ok,点击应用。

成功的话, pycharm的右下角会显示你选中的环境。

1.4、下载依赖

bash 复制代码
    pip install -r requirements.txt  # install 
    pip install -r requirements.txt  -i <https://pypi.tuna.tsinghua.edu.cn/simple> # 

网好随意,下面的命令是指定了豆瓣的镜像源,相对友好些。下载失败的话,多试几次就好。

显示如上图的输出,则是下载完成,如果失败,可重试几次。

二、项目运行

根据上面的步骤,基本环境应该是没啥问题啦吧,真要有,真没法啦,把能写的都写啦,完全是教小白啦。

想必大家看过yolov5,必然是见过下面这张图的。

下面就来看看如何识别吧。(关于项目基础结构和代码,后续会谈到的,目前重点是先跑起来)

2.1、运行 detect.py 代码

bash 复制代码
python detect.py --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 data/images/zidane.jpg  
# 如果是这么运行的话,它会自己去下载那个yolovs.pt 文件,也可以我们自己直接下好,放进项目中
                         
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/29672bb80535486c95826feba5eef02d~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1920&h=349&s=350981&e=png&b=2b2b2b)

执行这条命令的时候会自动下载 yolov5.pt 文件,网速好,随意,不然我建议先下载,免得搁这卡好一会。(亲测,无梯子时,网速感人)

可以一早下好,然后放进项目中,指定权重文件

bash 复制代码
    python detect.py  --weights weights/yolov5s.pt --source data/images/zidane.jpg  
    # --weights 就是指定 ps 权重文件的位置,path/**.pt 文件

报错解决:你看到这句话的时候,那么多半也是报错了,你放心,你要踩的坑,我这个周末全踩了一遍。

2.2、报错1:AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'

python 复制代码
#将156、157行代码注释掉
#return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
#                             recompute_scale_factor=self.recompute_scale_factor)

#修改为:
return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)

浅浅的说下,没细究,这里的代码是 torch 的源码,网上大多数的说法都是不兼容问题,好奇的朋友可以去查找一番。笔者在这里没有展开篇幅啦。

补充:在这里修改的时候,选让你选择修改当前文件,还是将修改于应用于全部文件。选择this file 即可。

重新运行命令,我们可以在项目中看到,识别结果已经出来啦yolov5s.pt 文件也被成功下载啦。

补充 :不知道细节的朋友有没有看到,我标记了这里默认是使用了 CPU 来进行识别 ,我们通常都会说,跑xxx算法,要用到GPU才会更快,更xxx样,那么我们该如何修改成使用GPU来进行识别呢?对啦, 这里的原因又是为什么呢?

小小的demo总算是运行完成啦,接下来,来简单说一下项目的基本结构,然后再说明该如何使用GPU来进行识别,这篇文章大概率也就步入尾文了。

2.3、项目基本结构和detect.py参数解读

detect.py 文件,初次接触,我们只需要了解其中部分代码就可以,后续有什么特殊的需求,去阅读代码即可,代码阅读难度不高,细心点读就好(纯纯谈应用层面的修改,难度还好)。

别看着吓人,很多我们暂时都还用不上,这里简单陈述几个简单常用的参数。

  1. --weights:weights 权重文件
  2. --source:为需要推理的数据来源,可以是rtsp视频流,也可以是图片,或者是本地mp4文件,如果有需求,也可以改代码,让它支持更多的。
  3. --data :data参数 数据配置,默认使用 coco128.yaml
  4. --imgsz :训练配置图片的大小
  5. --conf-thres : 置信度阈值 默认0.25,越大标注框越少
  6. --iou-thres :交并比阈值 默认0.45,越大所得的重叠框越多
  7. --max-det :每张图片最大的目标个数 默认1000
  8. --device :设置代码执行的设备 cuda device, i.e. 0 or 0,1,2,3 or cpu
  9. --view-img :是否展示预测之后的图片或视频 默认False
  10. --save-txt :是否将预测的框坐标以txt文件格式保存 默认True 会在runs/detect/expn/labels下生成每张图片预测的txt文件
  11. --save-conf :是否保存预测每个目标的置信度到预测tx文件中 默认True
  12. --save-crop :是否需要将预测到的目标从原图中扣出来 剪切好 并保存 会在runs/detect/expn下生成
  13. --nosave :是否不要保存预测后的图片 默认False 就是默认要保存预测后的图片
  14. --classes :在nms中是否是只保留某些特定的类 默认是None 就是所有类只要满足条件都可以保留
  15. --agnostic-nms :进行nms是否也除去不同类别之间的框 默认False
  16. --augment : 预测是否也要采用数据增强 TTA
  17. --visualize :可视化特征,默认False
  18. --update :是否将optimizer从ckpt中删除 更新模型 默认False
  19. --project :当前测试结果放在哪个主文件夹下 默认runs/detect
  20. --name :当前测试结果放在run/detect下的文件名 默认是exp
  21. --exist-ok :是否存在当前文件 默认False 一般是 no exist-ok 连用 所以一般都要重新创建文件夹
  22. --line-thickness :画框的框框的线宽 默认是 3
  23. --hide-labels :画出的框框是否需要隐藏label信息 默认False
  24. --hide-conf :画出的框框是否需要隐藏conf信息 默认False
  25. --half :是否使用半精度 Float16 推理 可以缩短推理时间 但是默认是False 注意:参数含default的为默认值,可以直接在文件进行修改,那么运行时直接python detect.py也可;直接在命令行指定也可以。

含action的一般为'store_true',使用该参数则需要在命令行指定。

三、如何换成使用GPU运行项目呢?

上面已经说到了目前是使用CPU来进行图像的识别的?如果要换成GPU来进行图像的识别,该如何做呢?一步一步往下看吧。

3.1、尝试修改参数

在上面的参数说明的时候,有个--device :设置代码执行的设备 cuda device, i.e. 0 or 0,1,2,3 or cpu,这里说的0,1,2,3就是指定哪块显卡,我看了下,这好像只会读取你电脑上的独立显卡设备。

那么我电脑上只有一块辣鸡的RTX3050显卡,那么默认就是指定为0,那么我改掉之前的命令试一试。

bash 复制代码
    python detect.py --device 0 --weights weights/yolov5s.pt --source data/images/zidane.jpg  

然后就会报下面这样的一个错误。

cuda不可用报错,现实没有有效的驱动可使用,让我们自己检查。

原因就是我们根本没下载这方面的依赖啦。


3.2、CUDA、cuDNN

写到这里的时候很纠结,到底要不要写安装cuda驱动部分的文章,不写有点不完整,写的话,坦白说,有点折腾。最后还是采取了曲线救国的方式,给朋友们,找了几篇可供参考的文章。

补充:pytorch 分为 cpu 版本和gpu版本,像项目中原本下载的就是非GPU版本的,所以即使不看下面的文章,也是可以正常运行的,CUDA和cuDNN都是为了加速计算而准备的

安装附带 cuda 版本的pytorch,首先需要安装nvidia cuda 驱动和cuDNN,那cuda 到底是什么呢?

CUDA统一计算设备架构 (Compute Unified Device Architecture, CUDA ),是由NVIDIA推出的通用并行计算架构。解决的是用更加廉价的设备资源,实现更高效的并行计算。

NVIDIA cuDNN :是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。

安装CUDA和cuDNN,👉Pytorch05_torch安装(GPU版)、Cuda和cuDNN安装教程(超级详细)


3.3、下载 pytorch

下面所编写的内容,暂时默认各位小伙伴安装好了 CUDA 和 cuDNN哈(有需求以后再补充吧)

PyTorch 官网查看 pytorch 安装指令:pytorch.org/

1)在选择之前,要使用 nvidia-smi 来查看 cuda 的版本信息等,来安装相应版本的依赖

注意此处说的 CUDA Version 11.7 ,说的是最高支持到 11.7,不一定非得是这个版本。

查看CUDA runtime API的版本:nvcc -V

2)根据上面的信息,来选择相应的版本安装

pytorch 官网install 文档

选择适合自己的安装命令即可

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

会下载比较多的依赖,中间也会出现输入y/n,输入y即可。

在写后面训练自定义数据集文章时,发现在 torch 2.0.1的版本下,发现会报下面错误:

RuntimeError: result type Float can't be cast to the desired output type __int64

导致一直无法正常进行训练,主要原因还是 torch 版本的原因。

后面我降至 torch 1.10.1 ,重新安装了 torch 依赖,命令如下:

bash 复制代码
    conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge

补充:但是在 torch 2.0.1的版本下,运行 detect.py 是完全没问题的。如果不是需要训练自己数据集的需求,这点倒是无所谓。

3.4、验证是否安装成功

python 环境执行以下指令:

bash 复制代码
    import torch
    print(torch.__version__)
    print(torch.cuda.is_available())
    print(torch.backends.cudnn.version())

3.5、重新测试使用GPU识别

bash 复制代码
    python detect.py --device 0 --weights weights/yolov5s.pt --source data/images/zidane.jpg

遇到报错1:ModuleNotFoundError: No module named 'chardet'

没找到哪个,那就安装谁。

pip install chardet

再测试:

从输出上可以看出,已经是使用显卡来进行工作啦。

可能会遇到的错误:AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor',还是遇到之前的这个错误,照着之前说的方式,去修改一下代码即可。

最后

写到这里的时候,本文的大部分内容已经是写完啦,从下载项目到完整的运行起项目,测试观察到效果,形成闭环。

不过这也仅仅是开端罢啦,后续的话,会继续写到如何标注自己的数据集,如何训练自定义数据集等等,以及后续会写到的如何部署等问题。

文章中如有不足,还请各位阅读的朋友,能够指正,我会及时修正和更新,非常感谢大家

在无聊且无趣的日子里,听着音乐,独自敲着代码、文字,享受自由的孤独的周末时光

相关推荐
千澜空1 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
2402_857589363 分钟前
SpringBoot框架:作业管理技术新解
java·spring boot·后端
学习前端的小z4 分钟前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
斯凯利.瑞恩8 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
一只爱打拳的程序猿22 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
yannan2019031330 分钟前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法32 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR32 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️38 分钟前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
蒙娜丽宁40 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉