【 编者按】这篇文章概述了用于构建面部关键点检测模型的技术,这些技术是Udacity的AI Nanodegree程序的一部分。

作者 | 小白

责编 | 欧阳姝黎

概述

在Udacity的AIND的最终项目中,目标是创建一个面部关键点检测模型。然后将此模型集成到完整的流水线中,该流水线拍摄图像,识别图像中的任何面孔,然后检测这些面孔的关键点。

使用OpenC进行预处理

该项目的一部分是要熟悉OpenCV库。具体来说,是在预处理输入图像时使用它。在此项目中,它用于将图像转换为灰度并检测图像中的人脸。OpenCV的另一个有用功能是高斯模糊,可以用来隐藏检测到的面部的身份。下图显示了对图像应用面部检测和高斯模糊的结果。

使用OpenCV库中的面部检测器,然后可以裁剪图像中的面部,以将其输入到关键点检测模型中。

数据集

为了训练关键点检测模型,使用了具有相应关键点标签的面部数据集。该数据集来自Kaggle,由96个x 96灰度面部图像组成,带有15个(x,y)坐标标记了面部关键点。原始数据集包含7049张图像,但是并非所有图像都具有完整的15个关键点标签。为了解决这个问题,只使用了具有全部15个关键点的图像。剩下2140张图像,其中500张被分成了测试集。下图显示了数据集的样本。‍

增广

使用相对较小的1640张图像训练集,可以以几种方式增强数据,以增加模型可以从中学习的示例图像的数量。由于不仅需要增强输入图像,而且还必须增强关键点标签,以便它们与新增强的图像上的相同点相匹配,这一点变得更具挑战性。应用了两种类型的扩充,概述此过程的代码可以在Jupyter笔记本项目中找到。

水平翻转—这是相对简单的。图像的x值和关键点反映在图像的中心。对应于脸部左侧的关键点被替换为相应的右关键点。这使训练数据增加了一倍。以下是水平翻转的示例。

旋转和缩放—旋转和缩放更具挑战性,但是由于使用了OpenCV,因此很容易构造一个可同时应用于图像及其关键点的旋转/缩放矩阵。将旋转/缩放后的数据集版本添加到普通数据集后,训练示例再次加倍。下面是这种扩充的一个示例。

扩充原始数据集后,该模型现在有6560个示例可以进行训练。

建立模型

用于此模型的体系结构大致基于VGG16模型,该模型是为在ImageNet上进行分类而构建的卷积神经网络。VGG16模型使用5个卷积块从图像中提取特征。这些块由几个卷积层组成,后跟一个最大池化层,其中图像尺寸减小了一半。在用于该项目的模型中,每个卷积块只有一个卷积层。这样做的原因是,由于数据量有限,因此较简单的模型不太可能过拟合。

除了使用较少的卷积层之外,还将丢失层添加到前3个卷积块中,其丢失率为20%,并且在每个卷积层之后添加了批处理归一化层。最初的VGG16网络都缺少这两种更新的技术,有助于防止过度安装。

使用这种架构提取图像特征,将卷积层的输出馈送到全局平均池化层,然后馈送到30个节点(15个关键点中每个点的x,y值)的完全连接的输出层。下图说明了该模型的完整架构。

训练模型

为了训练模型,使用标记的关键点和预测关键点的均方误差来计算损失。发现Adam优化器提供了最佳结果。还发现,通过提高批量大小和学习率可以实现最低的损失。从0.001的学习率开始,对模型进行了针对32、64和128批次大小的15个时期的训练。对于0.0001和0.00001的学习率重复此步骤。原因是批次数量较小时,梯度下降步骤更加随机(随机性更高),因为它是在较少的示例中进行平均的结果。当优化达到最小值时,参数步应代表更通用的解决方案,方法是采用较大批次大小的平均梯度来提供。

下图显示了训练曲线,后者显示了最后时期的近距离视图。如你们在最后时期所看到的,训练损失的步骤是由每种学习率的批量大小增加而产生的。

伪标签

经过第一轮训练后,模型相对准确。为了利用原始数据集中的所有数据,使用经过训练的模型来预测缺失值的关键点并将其用作标签。本质上,数据集具有大量不完整的示例,这些示例被扔掉了,但它们仍然从确实存在的关键点那里获得有用的信息。为了从该信息中学习,模型以其最佳猜测填充了不完整的点。

以伪标签完整数据集并像以前一样对其进行扩充,使用29520个示例创建了一个新的训练数据集。然后,该模型继续对该数据集进行训练,然后再进行对原始的全标签数据集的另一轮训练。最终,模型误差被训练为低于0.0005。我们对此感到非常高兴,正如项目笔记本所述:“一个很好的模型将实现约0.0015的损失”。此外,当绘制在测试图像上时,关键点预测似乎位于你们期望的位置。

总结

通过训练关键点检测模型,将面部检测器和模型组合起来,将关键点应用于图像中的面部。下图给出了此过程的示例产品。

此外,该模型已扩展为可与网络摄像头一起使用,并使用关键点功能应用蒙版滤镜(在这种情况下为太阳镜)。

更多精彩推荐
☞百度香港二次上市,12 岁开发者、AI 机器人同台敲响“芯片代码锣”☞GitLab 在中国成立公司极狐,GitHub 还会远吗?☞又一个Jupyter神器,操作Excel自动生成Python代码
点分享点收藏点点赞点在看

基于 OpenCV 的面部关键点检测实战相关推荐

  1. 【项目实战课】基于Pytorch的RetinaFace人脸与关键点检测实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的RetinaFace人脸与关键点检测实战>. 所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题 ...

  2. 【项目实战课】基于Pytorch的PFLD人脸关键点检测实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的PFLD人脸关键点检测实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲 ...

  3. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  4. 运用特征脸方法的基于Opencv的猫脸检测实现

    本文禁止转载.抄袭,请尊重作者权利. 使用特征脸方法的基于Opencv的猫脸检测实现 摘要 目前,在计算机视觉和模式识别领域,脸识别技术是一个很活跃的课题,人脸识别的方法已经十分丰富,而对于日常生活中 ...

  5. 川普撞脸希拉里(基于 OpenCV 的面部特征交换)-1

    基于 OpenCV 的面部特征交换--实验一 一.课程介绍 今天这门课程将通过 OpenCV 库来实现人脸面部特征交换,其实就是将第二张人脸的眼睛.鼻子和嘴巴通过程序自动裁剪适配并覆盖到第一张人脸上, ...

  6. 川普撞脸希拉里(基于 OpenCV 的面部特征交换)-2

    基于 OpenCV 的面部特征交换--实验二 一.课程介绍 今天这门课程将通过 OpenCV 库来实现人脸面部特征交换,其实就是将第二张人脸的眼睛.鼻子和嘴巴通过程序自动裁剪适配并覆盖到第一张人脸上, ...

  7. RTMPose关键点检测实战——笔记3

    文章目录 摘要 安装MMPose 安装虚拟环境 安装pytorch 安装MMCV 安装其他的安装包 下载 MMPose 下载预训练模型权重文件和视频素材 安装MMDetection 安装Pytorch ...

  8. 使用OpenCV进行人脸关键点检测

    使用OpenCV进行人脸关键点检测 1 双脸效果 2 单脸效果

  9. 基于OpenCV的条形码区域检测(一)

    基于OpenCV的条形码区域检测(一) 1.已有方案  能够很轻松地在网上找到这一篇文章<使用Python和OpenCV检测图片上的条形码_Adrian Rosebrock>,原文:'De ...

最新文章

  1. 使用Python将PDF转成文档
  2. 苏州大学9月计算机考试试题,2016年9月计算机一级考试题及答案
  3. 软件测试江湖之公会武器之争
  4. Matlab与C++混合编程(依赖OpenCV)
  5. 【科大星云诗社动态20201204
  6. OC学习之面向对象三大特征
  7. spring mvc 中文乱码 post与get的方法解决
  8. 高质量c/c++编程(9)
  9. Oracle 备份与还原
  10. 同一条sql在mysql5.6和5.7版本遇到的问题。
  11. abb工业机器人指令lf怎么用_工业机器人十万个怎么办-不清楚机器人MoveL直线运动指令怎么办?...
  12. 我的个人作品——室内效果图
  13. 个人号微信SCRM客服系统功能介绍
  14. java项目-第150期ssm网络视频播放器-java毕业设计_计算机毕业设计
  15. numpy中按条件查找,搜索某些值的方法
  16. Redis数据库简介
  17. HTML——前端实时可视化开发工具
  18. 适配器的作用计算机网络,网络适配器的作用
  19. Uniapp 应用开机自启插件 Ba-Autoboot
  20. 关联规则Apriori 流程以及思想

热门文章

  1. checkbox点击切换选中状态
  2. 检查是否支持 SO_REUSEPORT
  3. C语言实现汉诺塔问题
  4. 遇到的浏览器兼容问题及应对方法
  5. PHP下载/采集远程图片到本地
  6. DIY强大的虚拟化环境-技术可行性部分
  7. Java知识积累——String引用的判断问题
  8. Android 对象型数据库 db4o
  9. PagedGeometry 笔记03
  10. SpringBoot最新面试题及答案,汇总版