引言

如果关注Kaggle 机器学习项目的同学,一定很熟悉人脸关键点检测这个任务,在2013 年的时候,ICML举办一个的challgene,现在放在kaggle 上作为 一种最常规kaggle入门任务而存在。

本文的主要目的在于验证深度学习模型在人脸点检测效果,踩踩里面的坑。

任务介绍

人脸关键点检测,也称之为人脸点检测,是在一张已经被人脸检测器检测到的人脸图像中,再进一步检测出五官等关键点的二维坐标信息,以便于后期的人脸对齐(face alignment)任务。

根据不同的任务,需要检测的关键点数目有多有少,有些仅要求检测2只眼睛的坐标位置,有些要求检测眼睛、嘴巴、鼻子的5个坐标位置,还有更多的,68个位置,它包含了五官的轮廓信息。
如图所示:

根据任务,可以把要学习的模型函数表示为:

Y=F(X,W)

其中,X 是输入的人脸图像,W是我们要学习的模型参数,Y∈[(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)] 是我们需要检测的人脸点坐标位置。

这是一个典型的回归问题,可以采用最简单的平方误差损失函数,然后用机器学习方法学习这个模型。

Loss=15∑i=15((xi−xi′)2+(yi−yi′)2)

其中(xi,yi)为预测的位置,(xi′,yi′) 为标注的关键点位置。

很显然,也很容易的就将该任务放到caffe中进行学习。

实验过程:

数据准备

由于港中文[1]他们有公开了训练集,所以我们就可以直接使用他们提供的图像库就好了。
数据是需要转化的:

1、框出人脸图像部分,从新计算关键点的坐标
2、缩放人脸框大小,同时更新计算的关键点坐标
3、一些数据增强处理:我只采样了左右对称的增强方法(还可以采用的数据增强方法有旋转图像,图像平移部分)
转换脚本如下:

  • 1

数据转化

跟以往的图像分类采用LMDB或者LevelDB 作为数据处理不同,这里我们的标签是一个向量,而不是一个值,所以不能直接用LMDB来作为存储,还好,caffe提供了另外一种数据存储方法来处理这种需求,那就是HDF5, 直观的差别就在于LMDB的标签是一个数,而HDF5 的标签可以是任意(blob),也就是说对于分类任务,我们也可以采样HDF5作为存储的数据模式,但是HDF5直接读取文件,相比LMDB 速度上有所损失。

脚本如下:

  • 1

网络结构

数据处理好之后,就可以开始设计网络结构了。
网络结构采样的是参照[1]的网络结构,相比于其它的大型的网络的特点在于:
1,输入图像小。
2,权值非共享。
这样的网络相比ImageNet 上的那些模型的优点很明显,参数比较少,学习相对快一些,

图片1:是论文中描绘的网络结构:

图片2:是caffe实现的网络结构:

需要注意的是,caffe 的master分支是没有local 层的,这个local 层去年(Caffe Local)就已经请求合并,然而由于各种原因却一直未能合入正式的版本。大家可以从上面那个链接里面clone 版本进行实验。

实验结果

正确的结果

失败的结果
//update 2015.11.19://由于之前实验人脸镜面对称的时候,没有将左右眼睛和嘴巴的坐标也对换,导致嘴巴和眼睛都不准的情况出现。感谢 @cyq0122 指出

实验分析

用深度学习来做回归任务,很容易出现回归到均值的问题,在人脸关键点检测的任务中,就是检测到的人脸点是所有值的平均值。在上面失败的例子中,两只眼睛和嘴巴预测的都比较靠近。//修正bug 过后就不会出现这个问题了。

这篇文章中,我只是尝试复现人脸关键点检测文章[1]的第一步,后面有时间的话,也会考虑用caffe 复现所有的结果。

要想完全的复现文章的结果,还需要:
1,级联,从粗到细的检测
2,训练多个网络取平均值(各个网络的输入图像块不一样)

代码托管

DeepFace GitHub 托管 欢迎提改进建议~

//update 2015.11.18:添加了数据处理的python文件。

引用

[1] Y. Sun, X. Wang, and X. Tang. Deep Convolutional Network Cascade for Facial Point Detection. In Proceedings of IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2013.

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于Caffe的人脸关键点检测实现相关推荐

  1. OpenCV基于dlib进行人脸关键点检测(摄像头)

    1. dlib.get_frontal_face_detector()获取人脸检测器 2. dlib.shape_predictor()预测人脸关键点 人脸关键点模型,下载地址: http://dli ...

  2. PyTorch深度学习实战 | 基于ResNet的人脸关键点检测

    人脸关键点检测指的是用于标定人脸五官和轮廓位置的一系列特征点的检测,是对于人脸形状的稀疏表示.关键点的精确定位可以为后续应用提供十分丰富的信息.因此,人脸关键点检测是人脸分析领域的基础技术之一.许多应 ...

  3. 【Opencv】基于dlib的人脸关键点检测和闭眼检测

    关键点定位 #导入工具包 from collections import OrderedDict import numpy as np import argparse import dlib impo ...

  4. OpenCV实战之人脸美颜美型(三)——人脸关键点检测

    目录 前言 标注方式 4点/5点/6点标注 68点标注 人脸关键点评价指标 检测方法概述 使用OpenCV实现人脸关键点检测 Facemark API 基于LBF的人脸关键点检测 API调用 前言 人 ...

  5. 【Caffe实践】基于Caffe的人脸检测实现

    from: http://blog.csdn.net/chenriwei2/article/details/50321085 0. 引言 深度学习可以说是在人脸分析相关领域遍地开花,近年来在人脸识别, ...

  6. caffe 人脸关键点检测_密集人脸关键点检测

    把人脸关键点检测的门槛给我打下来, 本文的代码可以在mrlandmark下载,提供一键式运行的能力 MTCNN联合人脸检测和对齐任务提供了5点关键点的能力,但是对于姿态姿态恢复等应用是远远不够的,经常 ...

  7. caffe 人脸关键点检测_人脸检测关键点新增至81个,比Dlib更精准、更贴边

    人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别.表情分析.三维人脸重建及三维动画等其它人脸相关问题的前提和突破口. 虽然人脸的结构是确定的,由眉毛.眼睛.鼻子和嘴等部位组成,近似 ...

  8. MTCNN——基于级联模型的人脸关键点检测网络

    目录 1 致谢 2 前言 3 MTCNN--基于级联模型的人脸关键点检测网络 3.1 P-Net 3.1.1 训练数据是12x12,那么检测时也是要把所有的图像都放缩到12x12吗? 3.1.2 图像 ...

  9. 基于人脸关键点检测的驾驶员睡意检测系统

    摘要 驾驶员注意力不集中或者分心是道路交通事故的主要原因. 为了减少道路交通事故,设计开发驾驶员疲劳检测系统至关重要. 本研究利用人脸关键点检测方法提出了驾驶员睡意检测系统,目的是使驾驶更安全. 一. ...

  10. caffe 人脸关键点检测_人脸关键点对齐

    摘要: 从传统方法到深度学习方法,对人脸关键点定位/人脸对齐的发展进行梳理,对该领域中经典的方法,最新成果进行汇总,并给出相应的paper原文,项目主页及代码链接.重点介绍深度学习的几种最新方法. 1 ...

最新文章

  1. Windows活动目录系列---活动目录版本迁移概述
  2. java trace优化_使用Arthas trace定位并优化接口响应慢的问题.md
  3. Java 基础数据类型
  4. 神曲背后的故事:算法工程师带你理性解构“蚂蚁呀嘿”
  5. 东拉西扯:那些“老”互联网公司
  6. python os函数_python os模块主要函数
  7. HashMap由浅入深(jdk8)
  8. mysql 查看密码_Ubuntu安装和配置MySQL数据库
  9. saltstack 初始化LINUX系统
  10. python做excel自动化-Python控制Excel实现自动化办公
  11. vb查询mysql数据库实例_初识vb数据库开发之实例5(数据查询)
  12. 【190105】VC++ 家庭理财系统1.0(Access)源码源代码
  13. 扫雷外挂的设计与实现
  14. java pem 签名_如何在Java中验证PEM格式证书
  15. 德鲁克日志读后感之五十三
  16. The following packages have unmet dependencies错误
  17. 帆软(FineReport)报表学习——一个简单的报表
  18. 现代服务业行业税收筹划,信息技术公司节税方案
  19. vue项目实现大屏展示 自适应问题
  20. 今日踩坑Maven:omitted for duplicate

热门文章

  1. SpringCloud之Eureka
  2. nginx allow 多个ip ipv4的网段表示方法解析
  3. codevs——1517 求一次函数解析式
  4. php7.1.1一键安装/配置文件简单优化
  5. virtualbox centos并配置网络使宿主机和虚拟机能够互相访问 host-only
  6. 在linux系统下安装与配置SVN服务器
  7. Divide Two Integers leetcode java
  8. Mysql之InnoDB之更换表空间
  9. 基于C++的模板引擎
  10. 基于MATLAB步态算法仿真的六足仿生机器人