文章目录
视频、文档(主要学习):
所有博客文件目录索引:博客目录索引(持续更新)
资源(需要自取):
# cuda11.1、11.0、10.2、10.1、10.0、8.0
链接:https://pan.baidu.com/s/1zA6-OEDNT8RPVJwCKarnKg 提取码:qrqy
在后面的步骤中进行构建GPU环境需要使用到CUDA、CUDNN(前者是能够辅助使用显卡进行并行计算的,后者是专门用于深度神经网络的SDK库来加速深度学习的速度的),以及对应CUDA的一个库pytorch库,一定要确定好版本后来进行安装。
确认版本的顺序:确认CUDA版本 -> 根据CUDA确认CUDNN、pytorch版本,下面是来确认自己的电脑硬件相匹配的各个版本信息!(若是无GPU的,无需下载CUDA)
我当前的电脑是RTX 3060,各个版本如下:
CUDA:11.1.0
CUDNN:11.2
# pytorch
pip --default-timeout=1000 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
确定CUDA、CUDNN、pytorch版本
如何确定CUDA版本?
打开cmd,输入命令:nvidia-smi

如何确定CUDNN版本?
进入官网来进行选择:cudnn-archive

如何确定pytorch?
方式一:在官网pytorch直接全文搜索对应CUDA的版本号,找到匹配的即可。

方式二:暴力,直接百度搜索CUDA版本号匹配的pytorch命令,直接安装(我之前是按照方式一然后下载发现依赖相关有报错说找不到对应版本的,然后就百度搜了一个)。
安装见:Anaconda使用指南
Pytorch的最终目标是什么?毫无疑问,我们是用它来进行深度学习训练和推理,深度学习本质上就是训练深度卷积神经网络。尽管我们已经可以用cuda使得显卡来完成并行计算任务,但是所有的操作还是比较底层的、复杂的。是否在cuda之上有一个专门用于深度神经网络的SDK库来加速完成相关特定的深度学习操作,答案就是cudnn。
NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如caffe、tensorflow、pytorch、mxnet等。cudnn简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是调整性能,同时还可以在GPU上实现高性能现代并行计算。
安装 CUDA(显卡驱动):版本为10.2
下载网址:CUDA Toolkit 10.2 Download

# cuda_10.2.89_441.22_win10.exe
链接:https://pan.baidu.com/s/1NlX41r0AntHz9d55etRNag
提取码:uu47
安装过程就是不断点击下一步即可。
步骤一:查看我cuda11.1对应cudnn版本:cudnn-archive

步骤二:注册登录下即可下载。
下载完后进行解压:

链接:https://pan.baidu.com/s/170B68IhXHqu6MKhmCNHMXA
提取码:7k6w
步骤三:找到CUDA的安装目录,然后将解压后三个文件夹覆盖原本CUDA安装目录下的三个文件即可

准备操作(构建yolov5环境)
接着开始yolov5的源代码:github-yolov5

# yolov5-5.0
链接:https://pan.baidu.com/s/1i4knLdNR8KrL5mPiq09wcw
提取码:627m
接着我们解压缩到一个文件目录,看一下当前目录有一个requirements.txt文件:
# base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
# logging -------------------------------------
tensorboard>=2.4.1
# wandb
# plotting ------------------------------------
seaborn>=0.11.0
pandas
# export --------------------------------------
# coremltools>=4.1
# onnx>=1.8.1
# scikit-learn==0.19.2 # for coreml quantization
# extras --------------------------------------
thop # FLOPS computation
pycocotools>=2.0 # COCO mAP
首先修改requirements.txt文件,将其中的下面两条先给删除:
torch>=1.7.0
torchvision>=0.8.1
只有torch以及torchvisison我们进行手动安装,不然的话下面执行批量安装命令就会失败!
我们可以提前去对应的pyTorch官网上看下对应CUDA的版本号所对应的这两个版本信息:pytorch

正式安装
接下来开始正式安装操作,我们的python环境使用的是conda来配置的:
我们的项目路径:D:\workspace\pycharm\fangshengstudio\yolov5-5.0-project

直接在这个目录中打开cmd命令:下面的所有命令都是在当前位置去执行。
步骤一:打开当前自己创建文件目录的cmd命令行,接着去执行命令

# 首先创建一个yolov5环境
conda create -n yolov5 python==3.7
# 切换到yolov5环境
conda activate yolov5
# 开始安装pytorch以及torchvision
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch
# 接着执行批量安装命令
# 下面是解释:
# 根据当前目录下的requirements.txt里的一些依赖包环境版本来进行对应的下载
# -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com:镜像源这里指定的是阿里云
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
若是最后显示这个信息,表示我们已经安装成功了:

额外说明:切换到conda的yolov5环境时,我们执行的pip命令就是使用的conda环境里的python3.7,那么对应的包也都会安装在yolov5对应的环境里,之后我们使用pycharm即可进行conda环境来进行使用!
步骤二:pycharm来配置编译器
使用pycharm来进行打开项目:

打开settings,来进行设置项目启动器:


点击确定,即可返回:

选择好该编译器我们来关闭:

预测的脚本文件使用的是:detect.py。
测试:
# 命令行切换到yolov5环境
conda activate yolov5
# 训练图片
# --source:需要进行训练的是data/images目录下的内容
# --weights:表示权重采用当前目录下的yolov5s.pt
python detect.py --source data/images/ --weights yolov5s.pt --conf 0.4
若是出现yolov5s.pt文件下载失败,因为github为外网可能无法访问可能导致下载失败,如何解决?
解决方案:
手动到官网下载:yolov5s.pt文件

将这个文件放置到yolov5-5.0-project文件中:


看下当前项目的runs/detect/exp文件,即可查看训练好的图片内容:

我们将带有人的视频放入到当前目录下的data/videos下,取名为streets.mp4,接着我们来去进行执行训练的视频:

# 命令行切换到yolov5环境
conda activate yolov5
# 视频
python detect.py --source data/videos/streets.mp4 --weights yolov5s.pt --conf 0.4
训练效果:


此时出现这个问题:根据报错信息表示我的当前GPU版本不适合当前下载的PyTorch版本

我的电脑是RTX3060,那么就应该选择cuda11.1版本,若是选择cuda10.2,就会在深度学习训练时导致不匹配。
首先卸载CUDA:使用geek工具卸载



重新下载安装CUDA11.0:
链接:https://pan.baidu.com/s/1a3jl_eIefVjhEH5lwIzfMw
提取码:l0dg
安装完成之后,对应的CUDA环境变量也会给我们配置好:

对应的pytorch对应的cuda11.1的版本为:pytorch版本

# 切换到yolov5环境
conda activate yolov5
# 安装pytorch (已经更正torchvision版本)
pip --default-timeout=1000 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
若是出现了下面的报错:表示当前没有torchvision==0.11.2+cu111匹配的,我们在下面的内容中找cu111的版本即可:

最终下载成功:

训练的脚本模型文件使用的是:train.py
报错描述:

解决方案:首先需要去下载提前准备的一些图片以及标注好的数据集
源头:可以看到在train.py中指定的数据集的一个yaml配置文件

看下这个yaml配置文件:

实际操作:
提前去下载对应的官方给的一些图片以及标注好的类别坐标:https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip

链接:https://pan.baidu.com/s/1QBuzGRpE_WgvdOyysbb4OA
提取码:ohgl
看下其中的内容:

报错原因:

解决方案:
# 切换到yolov5环境
conda activate yolov5
# 主要原因原本的setuptools为63.41版本太高,需要安装低版本的
pip uninstall setuptools
pip install setuptools==59.5.0
报错原因:

解决方案:
# 在train.py的39行中去添加这个变量
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
报错描述:RuntimeError: DataLoader worker (pid(s) 12332) exited unexpectedly
解决方案:设置对应的进程数为1,当前是在windows环境中

上面的问题都解决之后,我们直接运行train.py文件即可:
若是看到下面出现starting trainint for …,表示现在正在进行训练模型


官方文档:Train Custom Data
数据集准备:最起码要100组左右,训练轮数300论。

对应的images与labels要对应好
└──xx
└── images
└── xx
└── labels
└── xx
在images/train目录中我们存储了一些需要进行训练的图片,在labels/train中存储对应图片的数据标注。
其中图片的话我们无需做改动直接放入到目录中,对应每张图片的数据标注则需要我们通过一些途径例如网站进行标注并导出拿到。
①图片:

②数据标注
首先要对标注的物体来进行类别汇总,我们可以提前在一个txt中编写一个个类别以换行符作为区分:

car
person
我们可以使用网站来对图片进行标注并导出:makesense



# 训练图片以及数据位置(当前项目)
train: mydata/images/train
val: mydata/images/train
# 类别的数量
nc: 2
# 类别名称
names: [ 'car', 'person' ]
进入命令行,然后去执行train.py文件来进行训练模型:
# 切换到yolov5环境
conda activate yolov5
# 指定配置文件来进行训练数据集
# --data:配置数据配置文件
# --epochs:指定训练的轮数
python train.py --data data/clcl.yaml --epochs 300
训练结果我们就可以拿到weigths文件中的best.pt也就是训练最好的一个数据:

中途异常问题解决

在所有的with open中添加encoding=‘utf-8’:

之后就可以运行了
之后我们就可以去拿到对应的best.pt文件来对之前的图片进行预测:
# 切换到yolov5环境
conda activate yolov5
# 执行预测脚本
# --weights:训练好的数据集
# --source:要进行预测的数据
python detect.py --weights runs/train/exp/weights/best.pt --source mydata/images/train

接着我们就可以看到预测出来的结果了,但是由于我们之前训练的数据集太少,此时预测得到的效果并不好,这里的话仅仅是一个训练自己数据集的基本步骤演示。
官网:colab
[1]. pytorch官方文档
[2]. RTX3050ti、3060等系列显卡正确安装cuda、cudnn,配置Pytorch深度学习环境(避免由于版本不适应导致重装):选择正确的CUDA版本,安装cudnn
[4]. PyTorch和CUDA版本对应关系
[5]. 解决 Could not find a version that satisfies the requirement torch==1.4.0
[6]. python通过pip安装torch错误及解决办法ERROR: Could not find a version that satisfies the requirement torch
[7]. PackagesNotFoundError: The following packages are not available from current channels
[8]. 【Yolov5】1.认真总结6000字Yolov5保姆级教程(2022.06.28全新版本v6.1)
[9]. 深度学习 — yolov5 算法环境(GPU / CPU)搭建与使用
[10]. ERROR: Could not find a version that satisfies the requirement torch==1.7.0 ERROR: No matching……
[11]. 解决OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
[12]. AttributeError:module ‘distutils‘ has no attribute ‘version
[13]. yolov5篇—官方代码docker部署训练
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h