Python小组作业:基于yolov5的口罩佩戴识别
Python老师给了三个小组项目:1.自身专业问题 2.人工智能 3.游戏或者小工具
提前告知了,写游戏不好拿高分,小工具又不能展示自己的水平。大一刚来也没碰到什么专业问题,于是经过讨论,决定了做人工智能项目。
又因才疏学浅,只好践行拿来主义,把现成的yolov5拿来用,做一个口罩佩戴识别。
1.环境配置:本项目使用miniconda + pytorch + yolov5,IDE使用的是Pycharm。
miniconda官网:https://conda.io/en/latest/miniconda.html
pytorch官网:https://pytorch.org/get-started/locally/
Pycharm官网:https://www.jetbrains.com/pycharm/download/#section=windows
miniconda配置pytorch教程:https://blog.csdn.net/weixin_41297324/article/details/109478948
Pycharm安装教程:https://www.runoob.com/w3cnote/pycharm-windows-install.html
Anaconda可以虚拟化管理python环境,自带许多科学计算的python库。这是个非常方便的选择,也为后面封装exe挖了个坑。
不使用conda配置pytorch教程:https://blog.csdn.net/qq_23013309/article/details/103965619
Yolov5项目地址:https://github.com/ultralytics/yolov5
python版本是3.8,cuda版本我选择的是11.3,yolov5使用的是v6.0版本。
2.收集数据、打标签
训练人工智能是很吃数据的,推荐的数据规模是每一类1000+图片,因为是小组项目,所以采用的是小数据集。
目标数据部分来自:https://www.bilibili.com/video/BV1i7411376y
背景数据来自我手机相册、朋友圈。
打标签工具Labelimg:https://github.com/tzutalin/labelImg
将所有数据进行打标签,过程应当是十分痛苦的。
3.调整代码训练数据
yolov5-v6.0下载解压后,找到train.py,对其中代码进行修改。
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
选择预训练的模型,如果数据集足够大,不选择预训练模型也可以取得很好的成果。
parser.add_argument('--epochs', type=int, default=100)
训练次数,这里默认是300,因为性能有限所以选择了100.
parser.add_argument('--batch-size', type=int, default=3, help='total batch size for all GPUs')
default需要根据显卡和内存性能修改,电脑是GTX3060+16G内存,我这里设置的比较保守。如果设置过大,会导致显存溢出。
其他的配置可以保持默认,直接把数据和标签扔进coco128的train2017文件夹中进行训练即可。
找到coco128.yaml,对其中的代码进行修改:
` # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)
# Classes
nc: 2 # number of classes
names: ['masked','no_mask'] # class names`
nc改成2,names改为masked no_mask。
4.运行train.py,训练模型。




5.修改并调用detect.py
在yolov5的文件夹下新建一个mask_kid.py,内容如下:
`
from detect import run
run_dict = {
'weights': 'best.pt',
'source': 0,
'imgsz': [640, 640],
'conf_thres': 0.85,
'iou_thres': 0.75,
'max_det': 10,
'device': '0',
'view_img': False,
'save_txt': False,
'save_conf': False,
'save_crop': False,
'nosave': True,
'classes': None,
'agnostic_nms': False,
'augment': False,
'visualize': False,
'update': False,
'project': 'runs/detect',
'name': 'exp',
'exist_ok': False,
'line_thickness': 3,
'hide_labels': False,
'hide_conf': False,
'half': False,
'dnn': False
}
run(**run_dict)
`
从训练结果文件夹中找到best.pt复制到yolov5文件夹下。
图形界面还没写,主要是加载参数并且调用detect.py。基本没有太大技术含量。
运行此代码尝试一下,似乎效果还可以?
5.优化
虽然能够正确识别无遮挡的人脸和口罩遮挡的人脸,但是此模型在面对其他类型的遮挡攻击时表现较差。
目前的优化思路有两个:
1、二次识别
2、增加攻击数据
二次识别需要更多的数据,需要更多的代码。才疏学浅,只好选择增加攻击数据重新训练。
6.封装项目
由于之前使用的是虚拟环境,在使用Pyinstaller打包时遇到问题无数。
打包后的程序在自己电脑上运行正常,去其他电脑上运行频繁报错。
最后经高人指点乃是conda导致部分库打包不完全,需要在实际环境中打包或是指定路径,在此一并感谢。
时间紧迫,后续工作就不开展了。
附模型分享:
链接:https://pan.baidu.com/s/1tmT_9oE6tWw7s2Wa_KYpTA
提取码:z3k1
Python小组作业:基于yolov5的口罩佩戴识别的更多相关文章
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn
https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...
- Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)
文章目录 一.项目背景 二.数据处理 1.标签与特征分离 2.数据可视化 3.训练集和测试集 三.模型搭建 四.模型训练 五.完整代码 一.项目背景数据集cnn_train.csv包含人类面部表情的图 ...
- 基于SVM的字母验证码识别
基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波 ...
- 基于Tesseract组件的OCR识别
基于Tesseract组件的OCR识别 背景以及介绍 欲研究C#端如何进行图像的基本OCR识别,找到一款开源的OCR识别组件.该组件当前已经已经升级到了4.0版本.和传统的版本(3.x)比,4.0时代 ...
- 基于Deep Learning 的视频识别方法概览
深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...
- [python 译] 基于面向对象的分析和设计
[python 译] 基于面向对象的分析和设计 // */ // ]]> [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...
- python中基于descriptor的一些概念
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- python实现基于CGI的Web应用
python实现基于CGI的Web应用 本文用一个“网上书店”的web应用示例,简要介绍如何用Python实现基于CGI标准的Web应用,介绍python的cgi模块.cigtb模块对编写CGI脚本提 ...
随机推荐
- [luogu7092]计数题
由于$\mu(i)$,因此每一个素数最多存在1次,当$k=0$答案必然为0 根据莫比乌斯和欧拉函数的积性,答案与对素数的划分无关,仅与每一个素数是否出现有关,换言之枚举素数出现的集合$P'$,答案即为 ...
- pyinstaller进行打包exe文件
百度直接pip安装,报错 下载离线文件报错. 百度了一下:还真好使 Python生成可执行文件主要有三种方法,利用py2exe,pyInstaller或cx_Freeze. 这里选择pyinstall ...
- (前端)面试300问之(3)this的指向判断
一.this的相关理解与解读 1.各角度看this. 1)ECMAScript规范: this 关键字执行为当前执行环境的 ThisBinding. 2)MDN: In most cases, the ...
- 基于Vue简易封装的快速构建Echarts组件 -- fx67llQuickEcharts
fx67llQuickEcharts A tool to help you use Echarts quickly! npm 组件说明 这本来是一个测试如何发布Vue组件至npm库的测试项目 做完之后 ...
- 【2020五校联考NOIP #4】今天的你依旧闪耀
题面传送门 题意: 对于一个长度为 \(n\)(\(n\) 为偶数)的排列 \(p\),定义一次"变换"后得到的排列 \(p'\) 为: \(p'_i=\begin{cases}p ...
- 普通用户iptables规则持久化,开机自动恢复
本文档对于docker环境下并不适用,docker环境的iptables持久化请参考https://www.cnblogs.com/wiseo/p/15000745.html 添加iptables规则 ...
- Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- 日常Java 2021/10/5
java 异常处理 Throwable中包括Error 和Exception,Exception包括IOException和RuntimeException 抛出异常 1.异常运算条件 Arithme ...
- 日常Java(测试 (二柱)修改版)2021/9/22
题目: 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱一下打印出好多份不同的题目,让孩子做了.老师看了作业之后,对二柱赞许有加.别的老师闻讯, 问二柱 ...
- 「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
前言 Apache Spark 自 2010 年面世,到现在已经发展为大数据批计算的首选引擎.而在 2020 年 6 月份发布的Spark 3.0 版本也是 Spark 有史以来最大的 Release ...