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

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

前言

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

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

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

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

笔者电脑相关环境:

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

image.png

一、项目准备

1.1、下载项目

yolov5.6.1-github

image.png

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

1.2、使用 conda 创建隔离环境

    conda create -n yolov5_6.1_demo_py3.8 python=3.8

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

image.png

image.png

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

基本命令:

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

image.png


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

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

image.png

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

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

image.png

image.png

image.png

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

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

image.png

image.png

image.png

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

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

image.png

1.4、下载依赖

    pip install -r requirements.txt  # install 
    pip install -r requirements.txt  -i https://pypi.tuna.tsinghua.edu.cn/simple  

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

image.png

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

二、项目运行

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

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

image.png

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

2.1、运行 detect.py 代码

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 文件,网速好,随意,不然我建议先下载,免得搁这卡好一会。(亲测,无梯子时,网速感人)

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

    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’

image.png

#将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 即可。

image.png

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

image.png

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

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

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

image.png

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

image.png

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

  1. --weights:weights 权重文件
  2. --source:为需要推理的数据来源,可以是rtsp视频流,也可以是图片,或者是本地mp4文件,如果有需求,也可以改代码,让它支持更多的。
  3. --data :data参数 数据配置,默认使用 coco128.yamlimage.png
  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,那么我改掉之前的命令试一试。

    python detect.py --device 0 --weights weights/yolov5s.pt --source data/images/zidane.jpg  

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

image.png

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 的版本信息等,来安装相应版本的依赖image.png

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

查看CUDA runtime API的版本:nvcc -Vimage.png

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

pytorch 官网install 文档

image.png

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

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 依赖,命令如下:

    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 环境执行以下指令:

    import torch
    print(torch.__version__)
    print(torch.cuda.is_available())
    print(torch.backends.cudnn.version())

image.png

3.5、重新测试使用GPU识别


    python detect.py --device 0 --weights weights/yolov5s.pt --source data/images/zidane.jpg

image.png遇到报错1:ModuleNotFoundError: No module named 'chardet’

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

pip install chardet

image.png

再测试:

image.png

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

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

最后

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

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

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

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


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
2月前
|
机器学习/深度学习 并行计算 调度
CuPy:将 NumPy 数组调度到 GPU 上运行
CuPy:将 NumPy 数组调度到 GPU 上运行
127 1
|
4月前
|
并行计算 TensorFlow 算法框架/工具
Windows11+CUDA12.0+RTX4090如何配置安装Tensorflow2-GPU环境?
本文介绍了如何在Windows 11操作系统上,配合CUDA 12.0和RTX4090显卡,通过创建conda环境、安装特定版本的CUDA、cuDNN和TensorFlow 2.10来配置TensorFlow GPU环境,并提供了解决可能遇到的cudnn库文件找不到错误的具体步骤。
583 3
|
6月前
|
机器学习/深度学习 并行计算 算法框架/工具
为什么深度学习模型在GPU上运行更快?
为什么深度学习模型在GPU上运行更快?
84 2
|
5月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
6月前
|
运维 Serverless 文件存储
Serverless 应用引擎产品使用合集之函数实例运行期间相关的依赖资源(vcpu、临时磁盘、GPU)是否会随函数运行完毕而释放
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
缓存 Serverless API
函数计算产品使用问题之GPU实例留运行但未进行 GPU 计算,是否还会计费
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
Ubuntu Shell Docker
GPU_nvidia-container-toolkit安装和配置
GPU_nvidia-container-toolkit安装和配置
1901 1
|
7月前
|
机器学习/深度学习 存储 弹性计算
阿里云GPU服务器价格多少钱?2024年阿里云GPU服务器价格配置及性能测评
2024年阿里云GPU服务器是一款高性能的计算服务器,基于GPU应用的计算服务,多适用于视频解码、图形渲染、深度学习、科学计算等应用场景。阿里云GPU服务器具有超强的计算能力、网络性能出色、购买方式灵活、高性能实例存储等特点。 阿里云提供了多种配置的GPU服务器,包括gn6v、gn6i、vgn6i-vws和gn6e等,这些服务器配备了不同型号的GPU计算卡、不同规格的内存和存储空间,可以满足不同用户的计算需求。同时,阿里云还为新用户提供了特惠价格,包年购买更是低至3折起,使得用户可以更加经济地购买到高性能的GPU服务器。
396 0
|
7月前
|
弹性计算 大数据 测试技术
2024年阿里云服务器价格配置表汇总(轻量服务器、ECS服务器、游戏服务器、GPU服务器)
今天整理了阿里云服务器价格,包含了阿里云轻量应用服务器、阿里云ECS云服务器、阿里云游戏服务器、阿里云GPU云服务器。阿里云服务器租用费用,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月,幻兽帕鲁4核16G和8核32G服务器配置,云服务器ECS可以选择经济型e实例、通用算力u1实例、ECS计算型c7、通用型g7、c8i、g8i等企业级实例规格。
652 0
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。