20230510MTCNN3

news2025/1/21 15:25:56



在这里插入图片描述


MTCNN数据制作 - 1


  • 多任务 = 分类任务 + 回归任务
    模型增加任务,其实就是增加输出

  • 级联即减少数据量,又增加模型精度

  • 级联可以让网络变得越快 越好
    单独这三个网络,它们的效果不会好,因为网络太浅
    但,当前任务是比较复杂
    因为:
    人脸的特征比较相似
    人脸所处环境比较复杂

  • 训练的时候,P.R.O三个网络单独训练
    测试的时候是P+R+O=3+4+5=12层,把3个小模型串起来使用
    训练的时候网络很浅
    使用的时候是组装到一起用,可以用来找到人脸的位置



MTCNN如何保证精度和速度? (面试题)

级联 训练的时候把模型拆开使用的时候把模型组装到一起
(理解:组装到一起,精度保证了,因为组装到一起,相当于12层的网络了)

怎么保证速度?

逐级在做筛选逐级 减少数据 (理解:数据量减少了,速度就提高了)
训练P R O分开训练 (理解:这样训练的时候,也比较快了,训练个3层 4层 5层网络很快)
使用的时候,把3个小模型串起来,当成一个大模型来使用



PRO三个网络都可以看成 一个 单目标检测模型

P网络做的事,是检测一个12 * 12的图片上面有没有人脸和人脸的位置
R网络做的事,是检测一个24 * 24的图片上面有没有人脸和人脸的位害
O网络做的事,是检测一个48 * 48的图片上面有没有人脸和人脸的位置



MTCNN 最慢 的地方是 图像金字塔

(理解:所以要 提高 MTCNN的 检测效率,就是在 优化 图像金字塔,怎么优化?可以优化 缩放比例,以及结束条件)
因为:
图像金字塔 缩放多少次,p网络 就要检测多少次
p网络排除了大量的数据



MTCNN的 优势

1.使用的时候 每个网络 排除了 大量无用数据,提高了 速度
2.通过 级联思想 更好训练




在这里插入图片描述

MTCNN数据 分为 正样本 负样本 部分样本

在这里插入图片描述

  • 两个任务
    • 分类任务 (包含 人脸的图片 和 不包含 人脸的图片) 正样本和负样本
    • 回归任务 (正样本,部分样本)

MTCNN数据制作 - 2


数据集用 celeba

CelebA是CelebFacesAttribute的缩写,意即名人人脸属性数据集,其包含10177个名人身份的
202.599张人脸图片,每张图片都做好了特征标记,包含人脸bbox标注框5个人脸特征点坐标以
及40个属性标记,CelebA由香港中文大学开放提供,广泛用于人脸相关的计算机视觉训练任务。
可用于人脸质性标识训练,人脸检训训练以及landmark标记笔,官方网址:arae-scale
CelebFaces Attributes(CelebA)Dataset

数据集问题:欧美人脸

所以拍点自拍,并标注
拍照要求:
上午、下午、中午、晚上
正脸、稍微测点脸

标注人脸的标准

从眉毛到下巴
在这里插入图片描述


celeba数据集的问题:

框太大了,我们只需要 眉毛到下巴的区域
在这里插入图片描述

test5.py

import cv2

"""
celeba 数据集的问题:
框太大了,我们只需要 眉毛到下巴的区域
"""

img=cv2.imread("notes/1-correct_face_box/img_celeba/000001.jpg")
cv2.rectangle(img,(95,71),(95+226,71+313),(0,0,255),2)
cv2.imshow("src",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

正样本 已经有了,我们标的标签,就是正样本

如何得到 负样本 和 部分样本?

给定一个位置随机大小随机正方形标签IOU,在 原有的数据 上面
进行 数据增样

在这里插入图片描述

iou值分类:

数据集:Wider face 和 CelebA

0-0.3:非人脸 (负样本)
0.65-1.00:人脸 (正样本)
0.4-0.65:Part人脸 (部分样本)
0.3-0.4:地标

训练样本的比例,负样本:正样本:part样本:地标=3:1:1:2

在这里插入图片描述

为什么负样本要比正样本多很多?

图片上面 人脸的地方 要比 非人脸的地方 小很多
负样本 一定要比 正样本 多



再制作点 正样本

完全随机,可能生成的数据 大部分都是 负样本 和 部分样本
在这里插入图片描述
在红框的中心点随机的方向 移动 随机的距离 得到蓝框

随机的边长:蓝色的框的边长 控制在 红框的边长 的 0.8倍和1.25倍 之间

(理解:位置随机大小随机 --> 位置标签框中心点方向随机 , 大小标签框边长倍数范围内 随机)




在这里插入图片描述
蓝框是训练时,我们输入 到模型里面的部分
蓝框 我们叫做 建议框




MTCNN数据制作 - 3


坐标如何归一化?

在这里插入图片描述
偏移量相对坐标0 到 1 之间,实际 输出的坐标输入图片相对位置
offx1 =(x1-x1)/w (黄色打钩点的x1的偏移量,即标签坐标点的偏移量)
offy1 = (y1-y1)/w
在这里插入图片描述

把 偏移量 当做 标签

注意:我们 输入到模型 里面的 不是原图,而我们 扣出来正方形区域输入到模型的是 蓝框输出红框



但是,做数据的时候,红框标签蓝框随机扣出来 的,有可能 红框蓝框 大
在这里插入图片描述
红框 的坐标 在 蓝框 面,做出的 标签 有可能 为 负值-1 到 1 之间
在这里插入图片描述




输入 到模型 的区域 是 蓝框的区域

红框x1的坐标:
x1 = offx1 * w + x1
在这里插入图片描述

模型 可以 反推 出来 红框,找到 输入的区域 的之两个点
因为 红框可以 通过 公式 反算 出来

之前为了 防止丢脸,我们给的 步长 比较速度比较
在有些情况下,我们做 单人脸识别,在 人脸切分 的过程中,有可能 只切了一部分 人脸
根据一部分人脸,我们可以 把完整人脸 找出来,这样模型就有一个 预测能力
哪怕 蓝框不准,我们是能进行 预测

如果直接把 坐标 作为 标签能检测到 蓝框之内 信息
p网络 又比较 ,哪怕 步长 ,得到 也是不准确

我们在 做数据 的时候,要考虑怎么让 模型 能预测蓝框之外坐标点
半张人脸,怎么能推算出 整个人脸坐标




在这里插入图片描述

p网络传了 一部分人脸 给 R网络
R网络 可以 把 整个人脸 的坐标 给 推算 出来
R网络 和 O网络 能够 校准p网络 的不准确

要对扣出来的蓝框的区域 做 等比例缩放?

抠出来的蓝框区域 尺寸不匹配
因为输入到模型里的是
12 * 12
24 * 24
48 * 48

为什么 偏移量 不需要 resize

标签不是坐标,是相对位置
是一个比值
在这里插入图片描述


MTCNN训练模型


负样本里面 一定不能有人脸,如果有,就删了
正样本中一定要有人脸
部分样本可以有脸,也可以有部分人脸
在这里插入图片描述
人脸(红框区域)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【嵌入式烧录刷写文件】-1.3-删除/修改Motorola S-record(S19/SREC/mot/SX)文件中指定地址范围内的数据

案例背景(共6页精讲): 有如下一段S19文件,如何“自动”地完成地址范围0x9110-0x9113数据的删除或修改。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775B…

t检验前世今生

1、背景 t检验是科研中非常常用的一种方法和手段,但是理解到位的人并不多,虽然这也不影响其使用。本文主要目的在于将与t检验有关的前前后后都讲明白。 2、补充知识 理解t检验,我们需要补充一些统计学有关的先验知识。 2.1 正态分布 概率…

【文本三剑客】SED

SED 一、sed编辑器1.2sed简介1.3sed工作流程1.4sed命令格式1.5常用选项1.6常用操作 二、sed实验2.1打印内容2.2删除行2.3替换2.4插入 一、sed编辑器 1.2sed简介 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可…

链表详解 - C语言描述

目录 认识链表 链表的分类 链表的实现 单链表的增删查改 增操作 删操作 查操作 改操作 带头双向循环链表 认识链表 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。链表由一系列节点(结点)组…

最火爆ChatGPT知识星球分享,开启与GPT的神奇之旅

今天给大家介绍的是一个讲解ChatGPt的知识星球,这个星球是专门为ChatGPT爱好者和AI绘画感兴趣的朋友们打造的。这个知识星球主题是关于ChatGPT的,旨在提供一个交流、学习和探索GPT的平台。 这里有一个强大的阵容,汇集了许多对人工智能和自然…

.Net平台下OpenGL绘制图形(2)(VS2019,Winform,C#)

本节主要讲诉图形绘制的原理,使用介绍和代码演示。 原理介绍 我们先来讲讲OpenGL的图形绘制。其实,所有的图形都是由许多个小图形连接而成的。你可以理解为是图片的像素,一张彩图是由很多个色彩不一的像素点组合而成。要实现色彩绚丽的图形设…

安装旧版本chrome 浏览器方法

1、下载 国内推荐下载网址:https://www.slimjet.com/chrome/google-chrome-old-version.php 我自己目前再用的103.0.5060.53版本,也可以到我网盘下载[若失效可联系我更新]。 2、安装之前,请先卸载干净当前版本 打开控制面板,找打…

挣值管理专题

挣值管理 基本思路 该方法的基本思想是应用统计学的原理,通过引进一个中间变量即“挣值”来帮助项目管理者分析项目成本的变动情况,并给出项目成本与工期相关变化的信息及对项目成本发展趋势作出预测与决策。 挣值的定义 挣值是一个表示项目“已完成作业…

Linux多路复用机制原理分析--select/poll

前言 Linux访问设备的IO模型主要有五种,分别是非阻塞IO模型、阻塞IO模型、IO多路复用模型、信号驱动模型以及异步IO模型。本文主要分析IO多路复用模型,Linux下的IO多路复用模型主要有select/poll/epoll等机制实现。 IO多路复用模型可以实现以非阻塞的方…

Dijkstra算法图解,C++实现Dijkstra算法

目录 Dijkstra算法简介数据结构抽象初始化开始计算第一轮计算第二轮计算第三轮计算第四轮计算算法总结 C实现Dijkstra算法 Dijkstra算法简介 Dijkstra算法计算是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起…

1929-2022年全球气象站点的逐日平均能见度

气象数据是我们在各项研究中都非常常用的数据,之前我们分享过全球范围的1929-2022年的具体到气象站点的逐日气象数据,包括平均气温、最高气温、最低气温、平均风速(可查看之前的文章获取)。 本次我们带来的是全球范围的1929-2022…

单链表的成环问题

前言:链表成环问题不仅考察双指针的用法,该问题还需要一定的数学推理和分析能力,看似简单的题目实则细思缜密,值得斟酌~ 目录 1.问题背景引入-判断链表是否成环: 1.1.正解:快慢指针 1.2 STL的集合判重 …

kubespray部署k8s 1.26集群安装指南

Kubespray 是一个自由开源的工具,它提供了 Ansible 剧本(playbook) 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。 它支持一系列操作系统,包…

Spring的第十五阶段:Spring的事务管理(02)

1、自定义设置回滚异常 rollbackFor和rollbackForClassName回滚的异常 /*** Transactional 表示使用通知( 启用事务 ) <br/>* rollbackFor 属性可以自定义哪些异常可以回滚事务 <br/>* rollbackForClassName 属性可以自定义哪些全类名的异常回滚事务 <br/>…

Java实现八大排序

&#x1f495;“汲取知识&#xff0c;分享快乐&#xff0c;让生命不留遗憾”&#x1f495; &#x1f386;作者&#xff1a;不能再留遗憾了&#x1f386; &#x1f43c;专栏&#xff1a;Java学习&#x1f43c; &#x1f3c0;该文章主要内容&#xff1a;直接插入排序、希尔排序、…

VMware安装Ubuntu系统

VMware安装Ubuntu系统 1.首先选择文件&#xff0c;点击新建虚拟机 2.选择自定义&#xff0c;点击下一步 3.点击下一步 4.选择稍后安装操作系统&#xff0c;点击下一步 5.选择Linus操作系统&#xff0c;版本选择Ubuntu64位&#xff0c;点击下一位 6.自己看图 7. 这里根据自…

「2023 最新」 Github、Gitlab Git 工作流「常用」 git 命令、规范以及操作总结 Rebase

Git commit 规范 关于提交信息的格式&#xff0c;可以遵循以下的规则&#xff1a; feat: 新特性&#xff0c;添加功能fix: 修改 bugrefactor: 代码重构docs: 文档修改style: 代码格式修改test: 测试用例修改chore: 其他修改, 比如构建流程, 依赖管理 Git 基础知识 当我们通过…

ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数

ThinkPHP6&#xff0c;视图的安装及模板渲染和变量赋值 tp6视图功能由\think\View类配合视图驱动&#xff08;也即模板引擎驱动&#xff09;类一起完成&#xff0c;新版仅内置了PHP原生模板引擎&#xff08;主要用于内置的异常页面输出&#xff09;&#xff0c;如果需要使用其…

mysql数据库的数据类型 -- 4

目录 数据类型 4.1&#xff1a;数据类型的分类 4.2&#xff1a;数值类型 4.3&#xff1a;字符类型 4.5&#xff1a;enum和set类型 数据类型 4.1&#xff1a;数据类型的分类 数值类型 描述 TINYINT [UNSIGNED]整数&#xff0c;占用1字节SMALLINT [UNSIGNED] 整数&#xf…

springboot+vue滴答拍摄影项目(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的滴答拍摄影项目。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌…