机器视觉案例——检测口罩——实战以及遇到的问题(已解决)

根据之前我笔记中的水果识别 接下来我们可以开始进阶的识别

电脑中最好已经下载好 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方式下载(推荐)

http://t.csdnimg.cn/3201A

这个是如何去下载我们相应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'

解决方法AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor' - 码农教程 (manongjc.com)icon-default.png?t=N7T8http://www.manongjc.com/detail/29-yfjpzcpordsjlka.html

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文件下

数据标注

可以看下面这篇博客

http://t.csdnimg.cn/F1Vyv

对应的视频

3. 数据标注_哔哩哔哩_bilibili

模型的训练及使用

打开我们之前的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是训练用到的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值