热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人脸识别5.1.2insightface人脸检测模型RetinaFacePaddle

人脸图片-人脸检测-人脸对齐-人脸识别-测试结果参考知乎RetinaFaceArcFace人脸识别测试:https:zhuanlan.zhihu.comp35215208
人脸图片->人脸检测->人脸对齐->人脸识别->测试结果

在这里插入图片描述

参考

知乎RetinaFace+ArcFace人脸识别测试:https://zhuanlan.zhihu.com/p/352152080
AIStudio:AIStudio仓库
paddle github:https://github.com/GuoQuanhao/RetinaFace-Paddle
pytorch github:https://github.com/biubug6/Pytorch_Retinaface

理解

在这里插入图片描述
(2)进一步添加自监督网络解码器(mesh decoder)分支,与已有的监督分支并行预测像素级的3D形状的人脸信息。和三维密集对应回归(3D dense correspondence regression)。这种密集的人脸定位为所有不同的尺度提供了精确的人脸位置信息。

1、RetinaFace的人脸检测和人脸对齐代码

人脸检测和人脸对齐部分代码参考:https://github.com/biubug6/Pytorch_Retinaface,该代码中也包含人脸识别,测试过期效果,不如ArcFace,感兴趣的可以试下。

2、ArcFace的人脸识别代码

人脸识别代码参考:https://github.com/TreB1eN/InsightFace_Pytorch。
整合了RetinaFace的人脸检测和人脸对齐代码和ArcFace的人脸识别代码,使用LFW数据进行测试,即LFW人脸图片->人脸检测->人脸对齐->人脸识别->测试结果。测试方案如下:

3、对比

(1)人脸检测中,对于RetinaFace,采用代码中的MobileNet0.25-RetinaFace和Resnet50-RetinaFace两种模型;
(2)人脸对齐中,代码中的人脸对齐有相似变换(get_similarity_transform_for_cv2)、仿射变换(getAffineTransform);为了验证不同变换的效果,本人也加入了透视变换(getPerspectiveTransform),共3种变换进行测试;
(3)对于ArcFace,采用代码中的MobileFacenet-ArcFace和IR-SE50-ArcFace两种模型。上述三种情形共组成12种方案。
在这里插入图片描述
从图中可以看出,Resnet50-RetinaFace+相似变换+IR-SE50-ArcFace组合取得最优效果,准确率为99.43%

关键点

密集人脸关键点准确性除了人脸框和5点,Retinaface还输入密集人脸关键点,并且是自监督训练。
在AFLW2000-3D数据集上评价密集人脸关键点定位
(1)2D投影下的68人脸关键点
(2)所有关键点的3D坐标。平均误差通过人脸框大小归一化。图8a和图8b是当前最好方法的CED曲线。尽管自监督和有监督方法的性能差异还比较大,但是RetinaFace相比较而言是最好的方法。
特别的,可以看出:
(1)五点回归可以避免密集回归分支的训练困难并且可以显著提升密集回归的效果。
(2)使用单级特征来预测密集人脸比使用RoI特征(如网格编码)要困难的多。如图8c所示,RetinaFace可以很容易的处理人脸姿态变化但是在复杂场景下就比较困难。这表示没有对齐以及过于压缩的特征表示(1x1x256)会妨碍单级框架获取高精度的密集回归输出。尽管如此,回归分支中投影出来的回归区域依然有助于人类检测结果的提升。
在这里插入图片描述

训练

解压数据,自动创建文件夹

unzip -d Data /home/aistudio/data/data75233/widerface.zip

启动训练

python train.py --network resnet50

代码流程


制作先验框


读取数据、打乱、批量输入格式


构造模型架构


喂入数据,关键的框四个点损失,五个关键点损失,是否是人脸的分类损失

四个坐标点

loss_l = F.smooth_l1_loss(loc_p, loc_t, reduction='sum')

十个坐标点

loss_landm = F.smooth_l1_loss(landm_p, landm_t, reduction='sum')

交叉熵

loss_c = F.cross_entropy(conf_p, targets_weighted.astype('int64'), reduction='sum')

笔记

annotations

详解Python中函数和模块的特殊属性__annotations__
Python是一种动态类型语言,也是强类型语言。在Python语言中,使用变量之前不需要声明其类型,直接赋值即可创建变量,变量初始类型取决于等号右侧表达式的值的类型。创建之后,变量的类型可以随时发生变化,但在任何时刻,每个变量都有确定的类型。
在这里插入图片描述
在这里插入图片描述
函数的__annotations__属性只包含形参和返回值的注解,在Python中,函数会维护一个特殊属性__annotations__,这是一个字典,其中的“键”是被注解的形参名,“值”为注解的内容。使用时并不要求注解的内容是Python中的类型,可以是任意内容。

len,类里面定义,引用类的时候会触发这个魔法函数

dataset = WiderFaceDetection(training_dataset, preproc(img_dim, rgb_mean, rgb_std))epoch_size = math.ceil(len(dataset) / batch_size)

def __len__(self):return len(self.imgs_path)

iter(self),for循环的时候触发

for images, labels in batch_iterator:if iteration % epoch_size == 0:if (epoch % 5 == 0 and epoch > 0) or (epoch % 5 == 0 and epoch > cfg['decay1']):


推荐阅读
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 本文整理了Java中org.apache.pig.backend.executionengine.ExecException.<init>()方法的一些代码 ... [详细]
author-avatar
天生笑丷丶话
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有