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

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

电脑中最好已经下载好 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是训练用到的

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值