首页 > 其他分享 >facial-cnblog-cnblog

facial-cnblog-cnblog

时间:2023-10-09 10:34:51浏览次数:34  
标签:nn self 人脸 facial 热图 cnblog channel 关键点

Facial Keypoint

image

人脸关键点检测的技术原理

人脸关键点是人脸相关的项目中需要使用的, 是在人脸检测获取到人脸在图像中具体位置的基础上, 进一步定位人脸器官的位置。
获取到人脸上的关键点, 可以极大地提升人脸识别、人脸属性分析、表情分类等算法的性能和稳定性。人脸关键点可以使要识别的人脸做一个空间归一化,这个空间归一化的操作就叫:人脸对齐(face alignment)。这个操作可以使后续模型提取到与五官的位置无关,只有五官的形状纹理相关的特征。

人脸关键点分为2D关键点和3D关键点。2D关键点输出的是人脸关键点的x、y的坐标信息,常用的 2D 关键点数量 5 点、68 点、106 点等。

3D关键点,则输出关键点的 x、y、z的坐标信息。3D关键点的检测,是采用3DMM模型,重建人脸的3D mesh,再将3D mesh投射到2D的图像空间。由于3D关键点比2D关键点多了深度信息,在人脸姿态估计、3D 物体穿戴方面,优势较为明显。

人脸关键点检测算法演进与应用

人脸关键点检测的方法分为传统机器学习方法和深度学习方法。传统机器学习的方法,典开的代表包括 ASM(Active Shape Model)、AAM(Active Appearance Models)。

ASM 是一种基于点分布模型的算法,外形相似的物体的身体形状,可通过若干关键点的坐标依次串联形成的一个形状向量表示。ASM 算法需要人工标定的方法预先标定训练集,经过训练获得形状模型,再通过关键点的匹配实现特定物体的匹配。ASM 算法的优点是模型简单,架构清晰,对轮廓形状有较强的约束,但近似于穷举搜索的关键点定位方式,限制了其运算的效率。AAM 是 ASM 的进阶版,在形状约束的基础上,加入整个脸部的纹理特征。传统机器学习的方法,检测的速度相对较快,但关键点检测的精度有限,难以满足应用的要求。

基于深度学习的人脸关键点检测方法,大致可分为两个流派:热力图方法和和直接回归方法。

热力图方法,是每个关键点生成一个热力图,关键点处的值最大,离关键点越远,值越小。该类方法常用MSE损失,也有论文提出对损失函数进行改进, 如Wing loss。热力图方法,关键点检测的精度高,并可判断关键点是否被遮挡,对遮挡的鲁棒性较好。由于热力图大小通常是输入图像的 1/4,对内存的占用大。检测关键点的数量越多,内存占用越大,限制了热力图方法在端侧设备上的应用。直接回归方法,通过卷积神经模型预测关键点的坐标,内存占用小,关键点检测的精度较热力图方法差一些。由于直接回归方法内存占用小,检测速度快,在端侧设备上的应用前景广阔。

人脸关键点的应用领域十分广泛,如人脸姿态对齐、人脸美颜、虚拟面部重现

挑战与困难

  1. 输入样本多样性问题:多变的人脸姿态和遮挡,不同的光照情况
  2. 大场景小样本问题:在图像中存在非常多的小尺寸人脸
  3. 检测速度: 在端侧的应用

数据集

image

  1. 现阶段常见的数据集有5关键点、21关键点、68关键点、98关键点,以及超过100关键点的数据集。数据集地址: 300WWFLWCOFWAFLW

  2. 评价指标

    \[NME = \frac{1}{K} \sum_{k=1}^{K}{NME_k} \quad (1) \]

NME:Normalized Mean Error, 归一化平均误差。Y是真实标注的关键点矩阵, Yˆ是预测的关键点矩阵, d是数据集的归一化系数。Nl是数据集中每张图片的关键点数量, K是测试图片数量。此指标越小越好

FR: Failure Rate, 表示NME高于10%阈值的图像数量。指标值越低越好。

CED-AUC: Cumulative Error Distribution – Area Under Curve, 累计误差分布-曲线下面积。绘制出NME小于或等于X轴上NME值的图像的比例, 然后计算出曲线下的面积。通常,NME的范围是[0: 10%]。计算出的CED-AUC值在[0:1]范围内进行缩放。计量值越大越好。

backbone

概述

一般地,人脸关键点和人体关键点算法使用的backbone类似。人脸关键点算法分类两种,直接回归方法和基于热力图的方法。直接回归方法即直接预测每个关键点的x,y的坐标。基于热力图的方法则是为每个关键点构建2d热力图,热图中的值表示为关键点在某个图像位置的概率,使用argmax来获取热图中关键点的精确位置。

直接回归方法通常采用分类中较为常用backbone,如Resnet、Mobilenetv2、Mobilenetv3、ShuffleNet-v2等。基于热力图的方法通常使用Hourglass网络架构,以及HRNet和CU-Net等。

Hourglass

如上图所示为hourglass的网络结构。

  1. 为减少计算和内存,首先使用卷积将输入缩放至64*64, 并保持这个分辨率直至结束。输入的图片先通过一个卷积层,卷积核大小为7*7,slide为2,pad为3,输出层数为64。经过这一层的卷积后,conv1的大小为64*128*128,再接batch normalization和用ReLU激活。conv1接下来通过一个Residual的网络,接下来的网络依次是一个池化层和两个Residual模块网络,到这边为止,得到将是N*64*64的特征, 这里N一般是256

  2. 另外网络会以这个分辨率为每个关键点生成一个热图。Hourglass是典型的编码器解码器结构, 通过多种分辨率处理特征图,来提高姿态估计和关键点检测的准确率。hourglass模块的堆叠会导致降低训练的速度, 于是作者在模块之中加入跳跃连接, 改善梯度传播,加快网络收敛。Hourglass还加入了中继监督,即在每个模块结束时生成特征图(红色)和预测图(绿色), 不仅最终预测,这些中间的预测的损失也会加入损失函数的计算。

  3. gt由关键点生成的二维高斯图, 损失函数是所有stack的输出热图与GT之间的MSE

    import torch
    
    class HeatmapLoss(torch.nn.Module):
        """
        loss for detection heatmap
        """
        def __init__(self):
            super(HeatmapLoss, self).__init__()
    
        def forward(self, pred, gt):
            L = ((pred - gt)**2)
            L = L.mean(dim=3).mean(dim=2).mean(dim=1)
            return L ## L of dim bsize
    
  4. 预测时,输入任意一张人物图片(256*256),得到最后一个stack的输出热图(不是所有的)。算出每一个joint对应的热图中最大值元素所在的坐标(argmax),然后scale回去,作为最后预测到的关键点位置。

CU-Net

CU-Net试图在精度、内存占用、推理速度上改进Hourglass的这种编码解码的unet结构,作者不仅在同一模块内添加跳跃链接而且在不同模块之间增加了跳跃链接。CU-Net通过避免不必要的特征复制、共享内存以及量化特征和参数来减少内存消耗并提高推理速度。

HRNet

关于hrnet的论文、应用以及代码地址可以参考王井东博士主页,包含hrnet姿态估计、语义分割、人脸对齐、图像分类、目标检测这几项任务上实现的详细介绍。HRNet-pose。姿态估计中多数方法如上一节说到的Hourglass都是高分辨率到低分辨率,再逐步恢复提高分辨率。但是hrnet在整个过程中始终保持高分辨率的表征。如上图所示,输入图像首先经过卷积下缩放到64*64的大小, 在每组卷积块之后,添加一个分辨率小四倍的并行分支。总体而言,在网络端创建了 4 个并行分支,最小分辨率为 8×8。不同分辨率块之间的特征被交换。为了将特征传递给更高分辨率的块,使用最近邻上采样(橙色箭头)。为了将特征传递给分辨率较小的块,使用了跨步卷积(绿色箭头)。蓝色箭头表示特征图未重新缩放。最终输出包含所有尺度的特征总和。文章中的 Repeated multi-scale fusion, 也就是不同分辨率feature map的fusion。如下图所示图所示exchange unit:

  1. 同分辨率之间的直接复制
  2. 需要升分辨率的使用bilinear upsample, 并利用1x1卷积统一通道数
  3. 需要降分辨率的使用stride 3x3卷积。这里降分辨率之所以不使用池化,是想利用stride3x3 可学习的方式降低信息的损耗

参数对比

上图展示了不同backbone浮点运算量和参数量的对比。Hourglass、CUNet、HRNet参数量相对较少,但是浮点计算量要更大。这是因为这些网络是基于热图估计的方法,需要为每个关键点生成大分辨率的热图。

人脸关键点检测

基于回归的方法

DCNN

2013

标签:nn,self,人脸,facial,热图,cnblog,channel,关键点
From: https://www.cnblogs.com/xle97/p/17750866.html

相关文章

  • from_rnn_2_transformer-cnblog
    从RNN到Transformer各式各样的“attention”不管是在CV领域还是NLP领域,attention实质上就是一种取权重求和的过程。使得网络focus在其应该focus的地方。根据Attention的计算区域,可以分成以下几种:1)SoftAttention,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一......
  • 【转载https://www.cnblogs.com/niuben/p/12017242.html】Linux top命令详解
    Linuxtop命令详解转载出处:https://www.cnblogs.com/niuben/p/12017242.htmltop参数详解第一行,任务队列信息,同uptime命令的执行结果系统时间:07:27:05运行时间:up1:57min,当前登录用户:3user负载均衡(uptime)loadaverage:0.00,0.00,0.00average后面的三个数分......
  • 关于getClass().getClassLoader().getResourceAsStream——转载自https://www.cnblogs
    关于getClass().getClassLoader().getResourceAsStreamInputStreamis=getClass().getClassLoader().getResourceAsStream("helloworld.properties");getClass():取得当前对象所属的Class对象getClassLoader():取得该Class对象的类装载器类装载器负责从Java字符文件将字符流读......
  • 从cnblogs转到知乎写笔记,从评论中向大家学习
    Friday,June24,2022,11:29:29AM从cnblogs转到知乎写笔记,从评论中向大家学习本来是想把知乎账号的一句话介绍改成上面这句话的,但是在手机或者电脑上不同日期、时间尝试改了几次,都提示系统维护中。这简单的改个自我介绍都如此麻烦,让我不由得怀疑这可能不是技术问题,而是某种......
  • 捐助 cnblogs 园子的商业化努力-困境求助:开设捐助通道
    访问一个不存在的页面时,会显示“园子的商业化努力-困境求助:开设捐助通道”https://www.cnblogs.com/xiaoyaoju/archive/2013/03/05/2944929.html官方原文:https://www.cnblogs.com/cmt/p/17320765.html......
  • JavaWeb-cnblog
    javaweb基础HTML和CSS<fontcolor=""size=""face=""></font><br>//换行<hr>//无序//有序//超链接//Javaweb相对路径表//表格//行//列1.11.2..tr行标签th表头标签td单元格标签b加粗cellspacing单元格间距colspan=“#”表跨#列合并row......
  • MYSQL基础语法-cnblog
    MYSQL基础语法基础语法:1.创建数据库:creatdatabase***;(数据库名称自定义)2.使用数据库:use***;(已经创建好的数据库名称)3.描述表的结构:desc**(表字段成员)4.显示表格:showtables;5.查询当前数据库:selectdatabase();6.重命名文件:select--as(as可省略)--(中文......
  • SpringMVC-cnblog
    SpringMVCspringmvc原理1.配置web.xml资源2.编写配置文件3.编写Controllerspringmvc底层原理HelloSpringMVC(配置版)新建一个Moudle,添加web的支持!确定导入了SpringMVC的依赖!配置web.xml,注册DispatcherServlet<?xmlversion="1.0"encoding="UTF-8"?>......
  • SpringBoot-cnblog
    SpringBoot1.微服务1.1什么是微服务架构微服务是一种架构风格(可以对比mvc三层架构,mvvm前端架构对比),要求我们在开发一个应用的时候,这个应用必须构建成一系列小的服务组合。可以通过http的方式进行互通。其演变过程:1.1.1单体应用架构单体应用架构(allinone)是指,将一个应用中......
  • Spring5框架-cnblog
    Spring5框架基础使用:JavaBean目的解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,本身是一个大杂烩,整合了现有的技术框架范围:任何Java应用Spring框架以interface21框架为基础,经过重新设计,不断丰富,于2001年发布1.0正式版,轻量级的控制反转(IOC)h和面向切......