摘要
新型冠状病毒可以通过空气中的飞沫、气溶胶等载体进行传播,在公共场所下正确佩戴口罩可以有效地防止病毒的传播。本实验介绍了一种自然场景下人脸口罩佩戴检测方法,该方法对RetinaFace算法进行了改进,增加了口罩人脸识别检测任务,优化了损失函数。在特征金字塔网络中引入了一种改进的自注意力机制,增强了特征图的表达能力。建立了包含3000张图片的数据集,并进行手工标注,用于网络训练。实验结果表明该算法可以有效进行口罩佩戴检测,在自然场景视频中也取得了不错的检测效果。
目录
第1章引言 1
1.1国内研究现状分析 1
1.2国外研究现状分析 .1
第2章RetinaFace算法原理 2
2.1预测部分 3
2.2.1主干网络Mobilene介绍…………………… 3
2.2.2 FPN特征金字塔…………………… 4
2.2.3 SSH进一步加强特征提取…………………… 5
2.2.4从特征中获取预测结果…………………… 6
2.2.5对预测结果进行解码…………………… 6
2.2训练部分 7
2.2.1 真实框的处理…………………… 7
2.2.2 利用处理完的真实框与对应图片的预测结果计算loss…………………… 7
第3章改进RetinaFace算法用于口罩佩戴检测 9
3.1改进的自注意力机制 9
3.2多任务联合损失 10
第4章实验分析 11
4.1数据集分析 11
4.2网络模型训练 11
4.3实验结果分析 12
第5章 总结与心得体会 14
5.1实验总结 14
5.2实验心得体会 14
参考文献 16
附录1:关键代码 17
2.2训练部分
2.2.1真实框的处理
真实框的处理过程可以分为3步:
1、计算所有真实框和所有先验框的重合程度,和真实框iou大于0.35的先验框被认为可以用于预测获得该真实框。
2、对这些和真实框重合程度比较大的先验框进行编码的操作,所谓编码,就是当我们要获得这样的真实框的时候,网络的预测结果应该是怎么样的。
3、编码操作可以分为三个部分,分别是分类预测结果,框的回归预测结果和人脸关键点的回归预测结果的编码。
2.2.2利用处理完的真实框与对应图片的预测结果计算loss
loss的计算分为三个部分:
1、BoxSmoothLoss:获取所有正标签的框的预测结果的回归loss。
2、MultiBoxLoss:获取所有种类的预测结果的交叉熵loss。
3、LamdmarkSmoothLoss:获取所有正标签的人脸关键点的预测结果的回归loss。
由于在Retinaface的训练过程中,正负样本极其不平衡,即存在对应真实框的先验框可能只有若干个,但是不存在对应真实框的负样本却有几千上万个,这就会导致负样本的loss值极大,因此我们可以考虑减少负样本的选取,常见的情况是取七倍正样本数量的负样本用于训练。
在计算loss的时候要注意,BoxSmoothLoss计算的是所有被认定为内部包含人脸的先验框的loss,而LamdmarkSmoothLoss计算的是所有被认定为内部包含人脸同时包含人脸关键点的先验框的loss。(在标注的时候有些人脸框因为角度问题以及清晰度问题是没有人脸关键点的)。
多任务损失函数
对于一个训练的先验框i,多任务联合损失函数定义为:
L= (1)
其中,是分类损失函数,是先验框中包含预测目标的概率,∈(0,1)分别表示是负先验框和正先验框。是目标检测框回归损失函数,其中={,}i表示与正先验框相关的预测框的坐标信息,同理={}表示与负先验框相关的预测框的坐标信息。是面部标志回归损失函数,其中={}i和={}分别表示正先验框中预测的五个人脸标志点和标注的五个人脸标志点。Lpixel表示的是面部密集点回归损失函数。λ1、λ2和λ3表示的是损失平衡权值参数,在RetinaFace算法中分别设置为0.25、0.1和0.01,意味着在有监督的学习中再加关注检测框和面部标志点的信息。
本文来转载自:http://www.biyezuopin.vip/onews.asp?id=16536

1. MobileNet关键代码:
import time
import torch
import torch.nn as nn
import torchvision.models._utils as _utils
import torchvision.models as models
import torch.nn.functional as F
from torch.autograd import Variabledef conv_bn(inp, oup, stride = 1, leaky = 0):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride, 1, bias=False),nn.BatchNorm2d(oup),nn.LeakyReLU(negative_slope=leaky, inplace=True))def conv_dw(inp, oup, stride, leaky=0.1):return nn.Sequential(nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),nn.BatchNorm2d(inp),nn.LeakyReLU(negative_slope= leaky,inplace=True),nn.Conv2d(inp, oup, 1, 1, 0, bias=False),nn.BatchNorm2d(oup),nn.LeakyReLU(negative_slope= leaky,inplace=True),)class MobileNetV1(nn.Module):def __init__(self):super(MobileNetV1, self).__init__()self.stage1 = nn.Sequential(conv_bn(3, 8, 2, leaky = 0.1),    # 3conv_dw(8, 16, 1),   # 7conv_dw(16, 32, 2),  # 11conv_dw(32, 32, 1),  # 19conv_dw(32, 64, 2),  # 27conv_dw(64, 64, 1),  # 43)self.stage2 = nn.Sequential(conv_dw(64, 128, 2),  # 43 + 16 = 59conv_dw(128, 128, 1), # 59 + 32 = 91conv_dw(128, 128, 1), # 91 + 32 = 123conv_dw(128, 128, 1), # 123 + 32 = 155conv_dw(128, 128, 1), # 155 + 32 = 187conv_dw(128, 128, 1), # 187 + 32 = 219)self.stage3 = nn.Sequential(conv_dw(128, 256, 2), # 219 +3 2 = 241conv_dw(256, 256, 1), # 241 + 64 = 301)self.avg = nn.AdaptiveAvgPool2d((1,1))self.fc = nn.Linear(256, 1000)def forward(self, x):x = self.stage1(x)x = self.stage2(x)x = self.stage3(x)x = self.avg(x)# x = self.model(x)x = x.view(-1, 256)x = self.fc(x)return x













基于RetinaFace的口罩人脸检测算法相关推荐

  1. 【人脸识别(五)】:基于Haar+Adaboost的人脸检测算法,及实例教程

    人脸识别(一):Ubuntu Python安装dlib C++ library 人脸识别(二):如何使用 dlib 实现简单的人脸识别功能 人脸识别(三):使用face_recognition库实现人 ...

  2. 基于TensorFlow的MTCNN人脸检测算法(生成PNet的人脸关键点数据 代码注解)

    代码源自Github:https://github.com/AITTSMD/MTCNN-Tensorflow 该阶段代码取自 Git主 代码目录下 MTCNN-Tensorflow-master / ...

  3. 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)

    目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...

  4. RetinaFace,最强开源人脸检测算法

    作者 | CV君 来源 | 我爱计算机视觉(ID:aicvmlaicvmlaicvml) 人脸检测为目标检测的特例,是商业化最早的目标检测算法,也是目前几乎各大 CV 方向 AI 公司的必争之地. W ...

  5. 人脸检测算法_目前最强!开源人脸检测算法:RetinaFace

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  6. 目前最强开源人脸检测算法RetinaFace

    点击我爱计算机视觉标星,更快获取CVML新技术 人脸检测为目标检测的特例,是商业化最早的目标检测算法,也是目前几乎各大CV方向AI公司的必争之地. WIDER FACE数据集是由香港中文大学发布的大型 ...

  7. 基于肤色空间建模+连通域处理的人脸检测算法的MATLAB仿真

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  8. matlab rgb 到 ycgcr,基于混合肤色模型的快速人脸检测算法

    摘   要: 提出了一种基于混合肤色模型" title="肤色模型">肤色模型" title="肤色模型">肤色模型" ...

  9. 【Matlab】基于皮肤概率建模的人脸检测算法雏形

    原理 通过色度计算图像中每个像素点是皮肤的概率,当概率大于某一值时就确定这个像素点是皮肤,并将它涂白,其余不是皮肤的像素点涂黑:对图像做适当处理后,把图像中不是脸部皮肤的区域分割开,随后把脸部特征还原 ...

最新文章

  1. 高压桥电路-驱动旧式电话机振铃
  2. MyBatisPlus中删除方法deletetById、deleteBatchIds、deleteByMap的使用
  3. pycharm中的console退出问题以及console和pycharm各自运行结果不一样的问题
  4. hive数据类型转换
  5. 【数据库原理及应用】经典题库附答案(14章全)——第六章:关系数据库设计过程
  6. Linux 查看 占用内存最多 占用cpu最多 程序(类似top,监视)
  7. mysql 单表查询
  8. 不是明年年初?苹果明年三季度才会推出AirPods Pro 2
  9. 80-200-040-原理-MySQL服务端架构
  10. nginx main user
  11. 蓝桥杯 ALGO-123 算法训练 A+B problem
  12. 使用python读取kafka实时topic数据demo,包括安装kafka module
  13. EF框架step by step(1)—Database-First
  14. ORACLE PATCH 版本的查询 PL/SQL
  15. linux上scrapy项目的创建,Python网络爬虫4 ---- Linux下编写最简单的scrapy网络爬虫项目...
  16. linux 安装tomcat
  17. PX4 代码中 position_estimator_inav(互补滤波)理解
  18. 双叉积——拉格朗日公式证明
  19. PB中导入EXCEL数据
  20. android开启wifi热点命令,Win7共享WIFI热点让Android手机上网

热门文章

  1. Python--猜拳小游戏
  2. 微型计算机周明德课后答案,微机原理与接口技术(第2版)
  3. 游戏服务器端开发的基本大纲
  4. WebRTC源码下载
  5. 2013秋季校招,你准备好了吗?
  6. 双十二,WAVE SUMMIT+2021峰会亮点抢先看!
  7. AndroidStudio git代码冲刷
  8. 实在智能与浙江工商大学官宣战略合作,共建人工智能联合实验室和实习基地
  9. 读书笔记:田博士五年之后五年的总结
  10. 有趣的110道LeetCode算法题小抄,势如破竹的面试