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的口罩佩戴识别的更多相关文章

  1. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  2. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn

    https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...

  3. Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)

    文章目录 一.项目背景 二.数据处理 1.标签与特征分离 2.数据可视化 3.训练集和测试集 三.模型搭建 四.模型训练 五.完整代码 一.项目背景数据集cnn_train.csv包含人类面部表情的图 ...

  4. 基于SVM的字母验证码识别

    基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波 ...

  5. 基于Tesseract组件的OCR识别

    基于Tesseract组件的OCR识别 背景以及介绍 欲研究C#端如何进行图像的基本OCR识别,找到一款开源的OCR识别组件.该组件当前已经已经升级到了4.0版本.和传统的版本(3.x)比,4.0时代 ...

  6. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

  7. [python 译] 基于面向对象的分析和设计

    [python 译] 基于面向对象的分析和设计 // */ // ]]>   [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...

  8. python中基于descriptor的一些概念

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  9. python实现基于CGI的Web应用

    python实现基于CGI的Web应用 本文用一个“网上书店”的web应用示例,简要介绍如何用Python实现基于CGI标准的Web应用,介绍python的cgi模块.cigtb模块对编写CGI脚本提 ...

随机推荐

  1. [atAGC048F]01 Record

    先将这个序列翻转,贪心找到最长的'101010--'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元 ...

  2. Java 插入html字符串到PPT幻灯片

    通过Java后端代码操作PPT幻灯片时,可直接在幻灯片中绘制形状,并在形状中添加文本字符串内容.本篇文章,介绍一种通过html字符串来添加内容到PPT幻灯片的的方法,可添加文字.图片.视频.音频等.下 ...

  3. 从零开始,使用Dapr简化微服务

    序言 现有的微服务模式需要再业务代码中集成大量基础设施模块,比如注册中心,服务发现,服务调用链路追踪,请求熔断,重试限流等等,使得系统过于臃肿重量级. Dapr作为新一代微服务模式,使用sidecar ...

  4. 记一次 .NET 某智能服装智造系统 内存泄漏分析

    一:背景 1. 讲故事 上个月有位朋友找到我,说他的程序出现了内存泄漏,不知道如何进一步分析,截图如下: 朋友这段话已经说的非常言简意赅了,那就上 windbg 说话吧. 二:Windbg 分析 1. ...

  5. 记一次使用 SelectMany 的经历

    最近在改造一个功能时为了减少循环的层数,于是想着将List列表映射为一个能直接使用颗粒大小的List列表,这样一层循环就可以解决问题.     public class ConflictWordIte ...

  6. 关于AnnotationHub的一些应用

    AnnotationHub是一个包含大量注释信息的数据库,里面有很多物种,以及来源于很多数据库的注释信息. 1,安装这个包 source("https://bioconductor.org/ ...

  7. 【NCBI教程】资源汇总整理 (转载)

    主题 网址 备注 [NCBI教程]资源汇总整理 http://www.omicshare.com/forum/thread-200-1-1.html (出处: OmicShare Forum)

  8. Linux搭建yum仓库

    1.安装nginx 2.为nginx搭建共享目录 3.安装createrepo,创建存储库 4.客户端测试 1.安装nginx yum list |grep nginx #查看是否有可用的nginx包 ...

  9. SpringCloud微服务实战——搭建企业级开发框架(三十一):自定义MybatisPlus代码生成器实现前后端代码自动生成

      理想的情况下,代码生成可以节省很多重复且没有技术含量的工作量,并且代码生成可以按照统一的代码规范和格式来生成代码,给日常的代码开发提供很大的帮助.但是,代码生成也有其局限性,当牵涉到复杂的业务逻辑 ...

  10. 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?

    作者 | 张攀(豫哲) 来源 | 尔达 Erda 公众号 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!**在 Erda 开源的同时,我们计划编 ...