基于 OpenCV 的面部关键点检测实战
【 编者按】这篇文章概述了用于构建面部关键点检测模型的技术,这些技术是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代码
点分享点收藏点点赞点在看
相关文章:

气温上升影响数据中心节能
也许一些公司都是你熟悉的名字。但你可能不知道的是,这样的公司拥有遍布美国的大型数据中心,包括北弗吉尼亚州。数据中心用于存储、备份和通信业务,使用了大量的电力,为IT设备供电,并保持其冷却其数据中心基础设施。 也…

如何将SQL Server表驻留内存和检测
将SQL Server数据表驻留内存是SQL Server提供的一项功能,在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料,演示如何把SQL Server中一个表的所有数据都放入内存中,实现内存数据库,提高实时性。 1, DBCC PINTA…

C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?
整理 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营(ID:rgznai100) 近日,编程语言 Crystal 发布了 1.0 版本。 Crystal 是一种通用的、面向对象的编程语言,其语法受到 Ruby 语言的启发,具有静态类型检查功能&am…

php in yii framework
为什么80%的码农都做不了架构师?>>> command line php yiic defined(STDIN) or define(STDIN, fopen(php://stdin, r));$_SERVER[argv](2013-12-30 22:44:10) 最近读这本书, 讲使用方法, 每章节各自独立, 配合些源码看(但不要细看, 会干扰进度, 浪费时…

selenium grid2 使用远程机器的浏览器
下载 selenium-server-standalone-3.4.0.jar包在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -jar selenium-server-standalone-3.4.0.jar -role hub 启用selenium grid hub, 默认端口 4444注册浏览器客户端,命令行执行ÿ…

Create a restful app with AngularJS/Grails(4)
为什么80%的码农都做不了架构师?>>> #Standalone AngularJS application In the real world applications, it is usually required to integrate the third party APIs into the project. Most of case, the third party service is provided as flexi…

无代码的时代真的来了吗?
所谓“无代码”,并不是不存在代码,无代码平台的开发,给开发者更大的挑战、更多 机会。所以,“无代码”不是解放程序员,而是给程序员提出了更高的要求、带来更大的挑战。作者 | 函子科技陆继恒,Jessica Tang…

实现自适应高度
天修改一个用Excel的报表,有一个数据格是跨两列,一般单格的数据格用自动换行就可以实现自适应高度,但是跨列是不行的.查找google良久,也没发现适合的办法,一阵头痛之后,突然有了灵感,于是马上做试验,还真的实现了.先写出来,如果有困于这个问题的朋友偶然路过,或许还能有一点用处…

分表分库之一:分布式数据库的常见用法
尽量减少事务边界 采用分库分表的方式将业务数据拆分后,如果每条SQL语句中都能带有分库分表键,分布式服务层对于SQL解析后都能精准地将这条SQL语句推送到该数据所在的数据库上执行,数据库将执行的结果再返回给分布式服务层,分布式…

打印自定义纸张大小
长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义纸张的代码给写出来了,看来必须用API,微软的.NET对打印的支持太菜了…

看完 50000 张专辑封面,AI 设计师开始疯狂输出
西班牙艺术家利用 StyleGAN2 打造了一个 AI 设计师,借助 50000 张图像自学成才,没想到培养一个印象派设计师这么简单。作者 | 三羊来源 | HyperAI超神经头图 | 网友整理抄袭事件的对比图也许是有些设计太经典出挑,总是让人情不自禁地模仿。日…

XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证
1. 申请许可证Citrix XenApp_XenDesktop7.6和XenServer 6.5申请许可证的步骤是一致的,由于之前我已经申请过XenApp_XenDesktop的许可证,本次以XenServer6.5的许可证申请为例。1.1 在申请试用或购买Citrix产品时,收到相应的邮件,其…

使用Windows操作系统的13个窍门
Windows操作系统的13个使用窍门,很适用。 1.删除Windows下不让删除的文件 有时想删除某个文件,系统会告诉无法删除,换到DOS下或是安全模式虽然可以删除,但是有点麻烦。这时可以用鼠标右键点击回收站,选择“属性”将“回…

如何让机器像人一样多角度思考?协同训练来帮你
作者 | 宁欣头图 | 下载于视觉中国出品 | AI科技大本营(ID:rgznai100)本文目录0. 摘要1. 引言2. 协同训练介绍3. 协同训练改进3.1 基于视图划分的协同训练3.2 基于学习器差异化的协同训练3.3 基于标签置信度的协同训练4. 协同训练应用5. 总结与展望摘要协…

PHP设计模式(4)命令链模式
命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他…

MFC界面库BCGControlBar v25.3新版亮点:Gauge Controls
2019独角兽企业重金招聘Python工程师标准>>> 亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v25.3正式发布!新版本添加了对Visual Studio 2017的支持、增强对Windows 10的支持等。接下来几篇文…

如何使用 ASP.NET 实用工具加密凭据和会话状态连接字符串
文章编号:329290最后修改:2006年4月10日修订:8.0 重要说明:本文包含有关如何修改注册表的信息。修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和修改注册表的更多信息,请单击下…

16款小米新品,刚刚雷军只发了5款
会前,雷军在微博上提前疯狂剧透小米即将发布的新品信息。要发布的产品实在太多了,整合提前发布的信息来看,此次发布会可能会是小米有史以来时间跨度最长、新品数量最多的新品发布会,包括小米11 Pro/Ultra、小米MIX新机、小米11青春…

windows下使用aspell开启emacs的单词拼写检查功能
第一步,你需要下载aspell安装文件和至少一个字典,下载地址为http://aspell.net/win32/. 下载之后,分别安装aspell和字典. 需要注意的是,在64位的WIN7下,“C:\Program Files (x86)”是32位安装程序的默认安装目录,而“C:\Program Files"是64位安装程序的默认安装目录,因此a…

老板来了:人脸识别 + 手机推送,老板来了你立刻知道!
背景介绍 学生时代,老师站在窗外的阴影挥之不去。大家在玩手机,看漫画,看小说的时候,总是会找同桌帮忙看着班主任有没有来。 一转眼,曾经的翩翩少年毕业了,新的烦恼来了,在你刷知乎,…

在C#中使用COM+实现事务控制
.NET技术是微软大力推广的下一代平台技术,自从.NET技术架构的正式发布,此项技术也逐渐走向成熟和稳定。按照微软的平台系统占有率,我们不难想象得到,在未来的一两年内.NET技术必定会势如破竹一般的登上主流的技术平台,…

深入理解 JavaScript 中的 replace 方法
2019独角兽企业重金招聘Python工程师标准>>> 字符串替换字符串 1 I am loser! .replace( loser , hero ) //I am hero! 直接使用字符串能让自己从loser变成hero,但是如果有2个loser就不能一起变成hero了。 1 I am loser,You are loser .replace( loser ,…

透过计算机视觉,看看苏伊士运河堵船
作者 | Edison_G来源 | 计算机视觉研究院头图 | 下载于视觉中国3月29日,长赐号终于重新上浮。船运代理公司Inchcape和苏伊士运河管理局皆证实,长赐号已经重新漂浮在水面上,但目前还不清楚需要多少时间重启运河。这张图片,相信大家…

泼点冷水,P2P借款限额是不是想的太美好?
8月24日等待了大半年的P2P网贷监管规则《网络借贷信息中介机构业务活动管理暂行办法(评估稿)》终于出现。办法中最引人注意的是对借款上限的规定: 同一自然人在同一网络借贷信息中介机构平台的借款余额上限不超过人民币20万元,在不…

SQL语句优化技术分析
SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将…

官方抓虫,PyTorch 新版本修复 13 项 Bug
整理 | 寇雪芹头图 | 下载于视觉中国出品 | AI科技大本营(ID:rgznai100)近日,PyTorch 发布了新版本 PyTorch 1.8.1,相比3月4日从 PyTorch 1.7 到 1.8 的重要更新( 1.8 版本主要包括编译器和分布式训练更新&…

开发webpart时建立图像文件夹和CSS,js文件夹
如图所示:是通过添加映射来完成,做好之后,把图像拷到文件夹时,当ascx文件里需要用到图像时,直接把图像拖到ascx文件里的位置。这样就知道该图像的路径 了。转载于:https://www.cnblogs.com/oymx/p/3490175.html

AI金融若不解决这些问题,等于在制造新的不可解问题
人们对新事物总是充满恐惧。就在大家担心无人驾驶汽车是否弊大于利的时候,AI重塑金融规律的创新也引起许多人对其中的法律和道德问题的顾虑。 让一个软件程序来决定,谁拥有投资开户的资格,谁能够获得贷款(征信)&#x…

Java 领域 offer 收割:程序员黄金 5 年进阶心得!
怎样才能拿到大厂的offer?没有掌握绝对的技术,那么就要不断的学习。如何拿下阿里等大厂的offer的呢,今天分享一个秘密武器,资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点…

TCP连接的状态转换图深度剖析
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。(1)第一次握手:建立连接时,客户端A发送SYN包(SYNj)到服务器B,并进入SYN_SE…