根据之前我笔记中的水果识别 接下来我们可以开始进阶的识别
电脑中最好已经下载好 pycharm anaconda git这些软件
以下的内容来自哔哩哔哩UP主肆十二-
在我们的桌面建立一个新建文件夹,我这里是新建了一个命名为123的文件夹
在新建文件夹下输入cmd
然后我们可以更换镜像源,这样做的目的是为了让我们后续下载各类包更快
这里推荐中科大的
conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
如何更换镜像源*(可以学习一下)
先查看一下当前的镜像
conda config --get
在123文件夹下输入cmd 删除一下原来的通道
conda config --remove channels 通道地址
删除全部通道
conda config --remove-key channels
conda config --remove-key channels
如上述所示,我们再更换为清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
可以看到我们已经更换成功了
代码下载地址
YOLOV5-mask-42: 基于YOLOV5的口罩检测系统-提供教学视频
安装好后解压 并移入我们之前创建的123文件夹里
在123文件夹中的yolov5-mask42文件夹中 输入Cmd运行以下命令创建环境
注意输入cmd的位置
输入cmd后,再运行下面的代码创建我们的环境
注:环境配置好之后,都要先激活再运行代码,不需要重新配置
conda create -n py14 python==3.8.5
可以看到我们这里更换镜像后,下载速度变快了,之后按一下回车
我们可以看到这里他会提示我们是否去激活这个虚拟环境
不激活虚拟环境是调用不到自己安装的那些包的
这里你会发现左侧有个小括号,表明激活成功了
安装pytorch
浏览器输入pytorch.org就是他的官网
点击这里我们可以看到以前的版本
比如我们这里安装1.8.0的版本
CUDA 10.2 后面的10.2对应我们的显卡驱动是10.2
如果是30系的显卡那么就是11.1
CPU版本
如果没有显卡 用CPU Only下面那个命令就可以
由于我们这里用的是pytorch 所以可能出现了下载失败的情况
下面就是失败的案例 可以更换镜像源试试
问题就是后面是不用加-c pytorch 因为这样就还是在国外下载
直接执行下面不带-c pytorch代码 就会在我们的国内镜像源去下载
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly
GPU版本
GPU版本的话 我们需要先安装CUDA 和CUDNN
查看自己电脑驱动的版本,win+r,输入cmd,再输入下面的命令
nvidia-smi
我这里CUDA的版本号就是11.4 所以知道了我们的最高支持版本之后,我们就可以在小于等于该版本的CUDA(最好就下载对应的版本)
具体的CUDA安装可以在CSDN上 搜到
cmd中输入
nvcc -V
可以看到我们这里是安装成功了
输入
set cuda
可以看到我们设置的环境变量
安装好CUDNN(CSDN中有教程)
cuDNN 其实就是 CUDA 的一个补丁而已,专为深度学习运算进行优化的。
打开C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite,在此路径下打开powershell(shift+鼠标右键选择在此处打开Powershell窗口(S)),执行命令.\bandwidthTest.exe,显示结果如下图:
————————————————
版权声明:本文为CSDN博主「姚路遥遥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Roaddd/article/details/115449155
安装Pytorch
conda install 下载pytorch(不推荐)
还是去之前那个官网找历代版本
激活环境后 执行下面的代码
conda install pytorch==1.10.0 torchvision torchaudio cudatoolkit=11.3 # 30系列以上显卡gpu版本pytorch安装指令
回车
注:一定要记得激活虚拟环境
查看是否安装成功
conda list
我这里是没有安装成功 因为里面没有显示pytorch 说明下载失败了
安装成功就会显示done
那我们就换一种方法
Pip方式下载(推荐)
这个是如何去下载我们相应CUDA版本的 pytorch的链接
这里由于我找不到CUDA11.4版本的pytorch所以我下载了11.3版本的
(天杀的 总算配置成功了)
我们再使用conda list查看一下
这三个是不是很熟悉呢 可以看一下我们之前安装的版本
pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 -f https://download.pytorch.org/whl/torch_stable.html
这个代码就是我刚刚下载的pytorch 是不是就对应上了
然后我们再检查一下我们pytorch的GPU是否可以使用
依次输入这三个箭头的内容 出现true则表示我们可以使用了
(配置环境真不容易)
安装pytorch完毕
安装其他的依赖包
注意要在我们这个文件夹下 安装
requirements文件里有我们所需要的依赖包
F:\42\yolov5-mask-42-master 在这个文件夹下cmd输入
pip install -r requirements.txt
这里可以看到我们这里出现下载失败了 说明bfsu那个镜像源不好用了 那么我们就换一个
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
然后我们再重新输入一下
pip install -r requirements.txt
成功啦
安装pycocotools 是用来计算我们目标检测的精度和MAP的
非windows环境下去掉-windows 例如linux
pip install pycocotools-windows
安装完成
安装支撑我们图形化界面的依赖包pyqt5
pip install pyqt5
安装成功
可以看到我们的文件夹下有个pretrained的预训练模型
这个预训练模型是具有检测物体模型的能力的 因为他已经是在COCO数据集上做过训练了
就是说——先在一个比较大型的数据集上做一个训练 比如之后我们应用在口罩的检测上
然后我再对口罩这样一个数据集做一个微调就可以
测试图像
我们可以看到文件夹中有这样的一张图像 我们可以对其进行测试
相应目录环境下执行
python detect.py --source data/images/bus.jpg --weights pretrained/yolov5s.pt
CPU测试图像
这是我用CPU版本跑出来的
期间出现了pillow 版本过高的问题 大家可以先卸载原有的
再安装上requirements里相应的版本
pip uninstall Pillow
pip install Pillow == 8.4.0
GPU测试图像
这是我用GPU跑出来的 期间出现了
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
AssertionError: Image Not Found F:\YOLO5练习\42\yolov5-mask-42-master\data\images\bus.jpg
这是因为路径下不能有中文 我们把练习两个字去掉就可以
weights=['pretrained/yolov5s.pt'] 这个意思是告诉你使用的权重文件是pretrained文件下的yolov5s这个模型
source=data/images/bus.jpg 需要检测的图片是bus这张图片
imgsz=[640, 640]图片输入大小是640*640
conf_thres=0.5 置信度是0.5 也就是说当你有50%这样的信心认为这样的图片是有目标的 就可以把它输出出来
然后iou_thres=0.45 iou的阈值是0.45 也就是说你的交并比要达到0.45才要把它输出出来
YOLOv5 2022-7-28 torch 1.12.0+cu113 CUDA:0 (NVIDIA GeForce RTX 3060 Ti, 8192MiB)
当前设备的信息
测试结果
这个就是我用GPU跑出来的测试结果
再次说明一下 用GPU跑的话要提前在相应的环境装好pytorch跟CUDNN
如何在我们的pycharm环境下执行检测的代码呢
我们可以鼠标右键选择用pycharm执行
右下角选择我们的interpreter settings
这样就选择好啦
这样右下角就会出现我们的环境 后续我们都在这个环境下执行命令
用我们pycharm环境下执行命令
选择这里的terminal 以及cmd终端
输入我们之前的测试代码
可以看到他被输出到了相应的runs里的detect文件下
数据标注
可以看下面这篇博客
对应的视频
模型的训练及使用
打开我们之前的pycharm打开的文件
在训练中我们主要会调用到train.py这个文件
train.py在使用中会指明两个配置文件
一个是关于数据集的配置文件 一个是关于模型的配置文件
数据集的配置文件
打开我们的数据集的配置文件
一共是四项内容
分别是
训练集图片的路径
验证集图片的路径
类别数量
类名
我们需要分别更改他们的位置
注意:不要使用中文路径 不然会崩溃
这是我的文件路径
关于数据集的获取 CSDN上也有
文件路径演示:
YOLO5
└─ score
├─ images
│ ├─ test # 下面放测试集图片
│ ├─ train # 下面放训练集图片
│ └─ val # 下面放验证集图片
└─ labels
├─ test # 下面放测试集标签
├─ train # 下面放训练集标签
├─ val # 下面放验证集标签
模型的配置文件
本次我们使用到的模型文件就是yolov5s 只需要更改我们nc就可以了 标签类的数量 这里是两个
train.py下拉到最下面 我们可以看到这样一行的训练代码
意思就是我们数据集的配置文件是mask_data,yalm 他会根据mask_data.yaml去找我们口罩数据集所在的位置 去做一个检索
另外他会去调用一个模型的配置文件 这个配置文件会告诉他他会去训练一个yolov5s 也就是small这样一个模型出来
weights就表示告诉它会使用到的一个预训练的模型
另外的话他会再数据集上去跑100轮
跑的过程中每一次喂入的图片是10张
如果你是用cpu跑的话 就把我们这里的--device 0改为--device cpu
然后我们直接ctrl+c在我们的terminal下的cmd终端下执行这行命令
执行这行命令后 首先就会对我们的数据集进行一个扫描
训练ing
我们可以看到我们的训练结果就被保存在了runs\train\exp12下
weights主要是保留我们训练过程中的权重文件 他会有两个 一个是best 一个是last
best表示在验证集上表现得最好的模型
last表示最后一轮的模型
在这里除了产生一些权重文件之外还会产生最终的验证结果
就不用单独的去执行验证的过程了
这里有我们的混淆矩阵 这个混淆矩阵主要是去指明他在类别上的一个精度
检测为face的准确度为0.94 检测为face的准确度为0.76
另外的话 还有我们的f1_curve
失去衡量我们的精度的
所有的精度大概是0.88-0.337
这里的hyp.yaml是表明我们的超参数的
比如我们第一行 指的是学习率为0.01
第三行的momentum有一个下降的趋势就是0.937
我这里还少了一个labels.jgp的数据集
正常应该是这样 可能是我的数据集出问题了
在我们这张图片上 戴口罩的数据集大概是2000
人脸的数据大概是2000+
这个表示数据集的分布 我自己跑的没有显示出来 也是数据集有问题(可能是标签没做好)
这里的P是我们精度的曲线
PR是我们map综合指标的曲线
然后R是我们的召回率的曲线
这个是我们训练过程中整个的一个变化
可以看到我们的损失 也就是误差是不断在下降的
然后精度是不断升高的
这里的train表示了我们实际的标签是什么样的
val表示我们的模型所预测出来的效果是什么样的‘
注:mask_data.yalm里的这个顺序要对 跟你的 train里的类名要对上 不然会出错误或顺序颠倒
我刚刚的exp12就是因为这个问题
如何单独的对权重文件去做验证呢
跟之前的train.py一样
我们用val.py
我们需要去指明我们数据集的配置文件和权重文件的配置文件
注意:一定要使用我们训练好的权重文件 就不要去用预训练的模型了
直接调用过来 开始验证
这里我验证失败了
可能是由于显存不足或者是pytorch的版本与我的CUDA版本不匹配
val.py验证失败解决办法
方法一:
卸载原来的pytorch版本
pip uninstall torch
我的CUDA版本是11.4 但是pytorch官网上没有相应的版本
我尝试了一下11.3的 发现可以运行
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
方法二:
减小我们显存的使用 更换一下代码
# python val.py --data data/mask_data.yaml --weights runs/train/exp13/weights/best.pt --img 640
# python val.py --data data/mask_data.yaml --weights runs/train/exp13/weights/best.pt --img 640 --batch-size 4
# python val.py --data data/mask_data.yaml --weights runs/train/exp13/weights/best.pt --img 416
这行代码下面两个任选一个
这里他显示 他发现了100张图片 然后他就会对这100张图片 去做一个推理 然后与我们真实的标签去做对比 得到最终的结果
这就是我们输出的结果
比如他在全部的精度上可以达到0.925
口罩可以达到0.958
在人脸的精度可以达到0.891
然后speed这里会显示 推理一张图片需要0.2ms的预处理时间
4.3ms的推理时间 和0.7ms的后处理时间
另外验证的结果会保存在runs\val\exp10
也会有我们之前提到的那几张图
最后就是我们图形化的过程
图形化过程
在我们windows.py这里的第54行
我们只需要更改数据就可以
如果是有GPU的我们就把
0表示的是使用第0号的GPU卡 速度比较快
weights="runs/train/exp_yolov5s/weights/best.pt"
另外这里如果是针对自己的数据集新训练出来的模型
需要把这里更改我们实际模型所对应的路径
是相对于我们项目的路径
修改完后直接右键run就可以了
模型使用
模型的使用全部集成在了detect.py
目录下,你按照下面的指令指你要检测的内容即可
# 检测摄像头
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt --source 0 # webcam
# 检测图片文件
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt --source file.jpg # image
# 检测视频文件
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt --source file.mp4 # video
# 检测一个目录下的文件
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt path/ # directory
# 检测网络视频
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt 'https://youtu.be/NUsoVlDFqZg' # YouTube video
# 检测流媒体
python detect.py --weights runs/train/exp_yolov5s/weights/best.pt 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
代码讲解
data目录主要是用来指明数据集的配置文件
docs是用来放一些其他不太重要的文件
imags是因为我们做了一个图形化的界面 会有一些中间图片在这里面
models主要是用来指明整个模型的配置文件yolov5s、yolov5l、yolov5n等等
其他地方不用做修改 只需要改之前说的路径和nc
pretrain主要是放我们预训练的模型
预训练模型主要是指我们在coco上已经训练过的这样的一个模型
在训练的时候会提供辅助作用
runs是用来保存代码运行过程中产生的一些结果或权重文件等
比如train就是执行train.py产生的东西
detect是执行detect这样的一个结果
val主要是放一些验证的结果 比如模型没有完全训练完 中间中断了之后 然后要去验证自己的模型 就可以去执行val
utils主要是去放一些工具包 包括画框的可视化都会放在utils这样一个目录下
detect.py 是用来做可视化的
license是用来声明版权的
train.py是训练用到的
val.py是训练用到的