最近在看一些视线检测(Gaze Estimation)相关的东西,由于之前没怎么接触过,所以也算是从头开始,很多新的东西要学。写一个系列笔记,把慢慢看懂的东西记录下来,做个整理,也方便以后回头查阅的时候能快速捡起来。
  第一篇写的是基于normalization图像的工作,包括一系列类似的方法。这类方法的关键之处在于对输入的图像(face/eye)先进行normalization操作,将不同head pose、 不同距离等一般情况下的图像转化到预先定义好的不变的normalization模式下的照片,然后再进行视线检测的工作。在所谓的normalization模式下,相机的姿态和距离是预先定义好的不能改变的。说白了就是,训练和测试时人离相机的姿态和距离等是不可控的,那直接采集得到的图像情况会很复杂,为了解决这些问题之前的方法需要标定相机,保证拍摄出来的人的照片的头部角度、位置和距离是不动的,只有眼睛在动。换言之,如果有一只无形的手,能够始终通过平移和旋转,把相机调整到一个预先定义好的姿态去拍摄人脸图像,那是最好的了。但是这种物理移动相机的操作是显然不可能的,normalization的意义在于通过图像变换的方式模拟相机的物理移动,使得变换后的图像尽量逼近于相机物理移动后拍摄的图像。

目录

  • Data Normalization
    • 几个坐标系
    • Normalization模式
    • Normalization过程

Data Normalization

  这个data normalization是这类方法中最关键的一步,需要首先理解清楚,其本质就是一点立体几何和图像变换的东西。这类方法最早提出于东京大学的一篇论文,先把论文的题目贴上来《Learning-by-Synthesis for Appearance-based 3D Gaze Estimation》。
  如前所述,我们希望有一只无形的手能够时刻的调整相机的位置,实际无法做到,则通过图像变换来近似模拟这个相机的物理移动过程。当然这样的模拟也是有缺陷的。首先通过已经投影为2d的图像去还原3d姿态变化后的投影图像这件事虽然在3d立体几何上是严格准确的,但是和真值还是有误差。另外这样的模拟变换方式也需要首先估计出人头的姿态等数据,估计的准确性也会影响还原的准确性。
  首先给个整体的input-output,比如我们希望通过normalization得到人脸左眼的还原图像。下图左侧为任意角度和姿态下相机拍摄的人脸照片,下图右侧为通过normalization变换后的左眼图片,基于此再进行后续的视线检测,后面会详细分析normalization过程。

几个坐标系

  这个问题涉及到几个坐标系,分别是世界坐标系,相机坐标系和人头坐标系,各自的含义从名字中就能看出来。其中人头坐标系的x轴为两个眼睛的连线且从左眼指向右眼,y轴为人脸平面(这里认为人脸是平的哈)内垂直于x轴方向向下,z轴按右手系确定,坐标系的原点无所谓取哪个点,仅仅多了一个平移的环节。这里认为相机安装好之后是不动的,因此世界坐标系和相机坐标系是一样的,简化为只有相机坐标系和人头坐标系。所谓拍照,从立体几何的角度来讲就是三维物体沿着相机坐标系zcz_czc​方向在xcx_cxc​和ycy_cyc​所构成平面内的投影。后面的部分对照着下图进行解释:

Normalization模式

  一般情况下,相机与人脸的相对位置与姿态是任意的,data normalization的过程就是将任意相对姿态、位置下拍摄的人脸照片转化到normalization模式下,那么什么是normalization模式呢?normalization模式就是,假设有一只无形的手,能在当前的相机姿态和位置下:

  1. 仅对相机进行旋转,使得相机坐标系的z轴指向我们感兴趣的人脸上的某个点O(比如眼睛的中心或脸的中心等),这样可以使得normalization之后的图像中,我们之前感兴趣的那个点O位于图像中央。此时相机有无数种姿态(相机可以绕着z轴旋转),为了固定一种姿态,再要求人头坐标系中的水平线(垂直于人头坐标系z轴的任意直线)经过投影后在相机中的成像仍然是水平的,此时相机的旋转姿态就唯一确定了。例如,要求人眼在旋转后的相机中成像是水平的,且某个预先选取的点(例如眼睛中心)位于图像中央,此时对应的相机旋转姿态就是唯一确定的。
  2. 完成第一步后,仅对相近进行沿着z轴的平移,使得相机距离感兴趣的点O的距离是个定值。

Normalization过程

  按照前面对normalization模式的定义,则可以对任意姿态下相机拍摄的图像进行normalization,得到normalization模式下的图像。图像的变换过程也就是遵循着上面两部的描述,通过几何和数学变换算出来即可。假设我们感兴趣的点即为右眼的中心,人头坐标系的原点也是右眼的中心。

  1. 首先通过关键点检测匹配或者其他什么方法,得到人头坐标系和相机坐标系之间的平移向量tr⃗\vec{t_{r}}tr​​与转换矩阵 RrR_{r}Rr​。为了使得旋转后的相机z轴指向右眼的中心,旋转后的相机坐标系z轴就是tr⃗\vec{t_{r}}tr​​,即zc′⃗\vec {z_{c}'}zc′​​=tr⃗\vec{t_r}tr​​。
    其次,为了使得normalization之后的眼睛是水平的(即人头坐标系的x轴在旋转后的相机坐标系内的投影也是水平的),需要xh⃗\vec{x_h}xh​​平行于xc′⃗\vec{x_c'}xc′​​与zc′⃗\vec{z_c'}zc′​​构成的平面,或者说将xh⃗\vec{x_h}xh​​平移与zc′⃗\vec{z_c'}zc′​​相交后,xc′⃗\vec{x_c'}xc′​​位于xh⃗\vec{x_h}xh​​与zc′⃗\vec{z_c'}zc′​​构成的平面内。此时,yc′⃗\vec{y_c'}yc′​​垂直于xc′⃗\vec{x_c'}xc′​​与zc′⃗\vec{z_c'}zc′​​构成的平面且满足右手系,即yc′⃗\vec{y_c'}yc′​​=xh⃗\vec{x_h}xh​​×\times×zc′⃗\vec{z_c'}zc′​​。最后,xc′⃗\vec{x_c'}xc′​​也可以根据右手系求出,xc′⃗\vec{x_c'}xc′​​=yc′⃗\vec{y_c'}yc′​​×\times×zc′⃗\vec{z_c'}zc′​​。这一步对应的坐标系变换矩阵记做RR=[xc′⃗∥xc′⃗∥\frac{\vec{x_c'}}{\left\|\vec{x_c'}\right\|}∥xc′​​∥xc′​​​,yc′⃗∥yc′⃗∥\frac{\vec{y_c'}}{\left\|\vec{y_c'}\right\|}∥yc′​​∥yc′​​​,zc′⃗∥zc′⃗∥\frac{\vec{z_c'}}{\left\|\vec{z_c'}\right\|}∥zc′​​∥zc′​​​]
  2. 对旋转后的相机坐标系沿着z轴进行缩放,缩放到某个预先定义好的定值dnd_ndn​即可,这一步对应的变换矩阵记做S=diag(1,1,dn∥xc′⃗∥\frac{{d_n}}{\left\|\vec{x_c'}\right\|}∥xc′​​∥dn​​)。

    后面有时间再写写基于normalization data的几个视线检测方法吧。

Gaze Estimation笔记——data normalization相关推荐

  1. 视线估计(Gaze Estimation)简介概述

    ©PaperWeekly 原创 · 作者|俞雨 单位|瑞士洛桑联邦理工学院博士 研究方向|视线估计.头部姿态估计 本文七个篇章总计涵盖 29 篇论文,总结了自深度学习以来,视线估计领域近五年的发展. ...

  2. Weakly-Supervised Physically Unconstrained Gaze Estimation论文翻译

    Weakly-Supervised Physically Unconstrained Gaze Estimation弱监督物理无约束凝视估计 Abstract 物理上不受约束的凝视估计的一个主要挑战是 ...

  3. OpenCV注视估计Gaze Estimation的实例(附完整代码)

    OpenCV注视估计Gaze Estimation的实例 OpenCV注视估计Gaze Estimation的实例 OpenCV注视估计Gaze Estimation的实例 #include < ...

  4. HALCON 21.11:深度学习笔记---Data(数据)(3)

    HALCON 21.11:深度学习笔记---Data(数据)(3) HALCON 21.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...

  5. Gaze360: Physically Unconstrained Gaze Estimation in the Wild(在野外非受控的360°视线估计)

    Kellnhofer, Petr, et al. "Gaze360: Physically unconstrained gaze estimation in the wild." ...

  6. 【视线估计】Appearance-Based Gaze Estimation via Evaluation-Guided Asymmetric Regression

    0. 前言 这是一篇2018年北航博士Yihua Cheng发表的关于视线估计的论文,被ECCV收录.该论文通过多分支卷积神经网络提取双眼图像特征并结合头部姿态实现视线估计,通过设计非对称损失函数来估 ...

  7. 《A novel non-intrusive eye gaze estimation using cross-ratio under large head motion》论文阅读

    标题:A novel non-intrusive eye gaze estimation using cross-ratio under large head motion 作者:Dong Hyun ...

  8. python normalize函数_数据正规化 (data normalization) 的原理及实现 (Python sklearn)

    原理 数据正规化(data normalization)是将数据的每个样本(向量)变换为单位范数的向量,各样本之间是相互独立的.其实际上,是对向量中的每个分量值除以正规化因子.常用的正规化因子有 L1 ...

  9. 数据正规化(data normalization)的原理及实现(numpy)

    原理 数据正规化(data normalization)是将数据的每个样本(向量)变换为单位范数的向量,各样本之间是相互独立的.其实际上,是对向量中的每个分量值除以正规化因子.常用的正规化因子有 L1 ...

最新文章

  1. Django设计模型1.2
  2. 看看你是《老朋友》(青春六人行)里的哪一个
  3. 应用缓存的基本概念,香(Redis)
  4. Android 广播机制---BroadCast
  5. css3实现背景渐变的方法
  6. avs v7.0 php,AVS v7.0 – PHP在线视频上传分享程序
  7. 远程桌面漏洞poc_【漏洞复现】CVE 2019-0708 漏洞利用
  8. git安装步骤_详解linux安装git的方法步骤(超实用)
  9. C#/VB.NET与西门子PLC进行ModbusTcp通信
  10. [Flink]Flink DataStream window join 和interval join
  11. requirej入门(二)
  12. 深入理解计算机系统第四版_深入理解计算机系统第三版2.4节中文版的一处翻译问题及英文版可能的一处错误...
  13. python+Selenium2+chrome构建动态网页爬虫工具
  14. 商城系统源码开发技巧分享
  15. Java项目:ssm党员管理系统
  16. 小众绿软|媒体:Soprano Audio Player v1.60
  17. XGBoost资料( 多届竞赛冠军获得者 周耀 整理)
  18. 分享第三方支付申请流程政策
  19. css图片九宫格布局
  20. JetBrains Account验证时JetBrains账户连接错误:连接拒绝(连接拒绝) 或 用于签署许可证的证书不是由JetBrains root certifi签署的。

热门文章

  1. 大数据环境下的存储系统构建:挑战、方法和趋势
  2. 生物效应大数据评估聚类算法的并行优化
  3. 2016年《大数据》高被引论文Top10
  4. 【Java】浅析Java位移运算符<<、>>、>>>
  5. 【Java】不使用比较运算符构造max()和min()
  6. 【Java】睡眠排序
  7. 【算法分析与设计】图的着色问题
  8. sublime Text3安装及配置与解决安装插件失败
  9. 为什么那么多人转型做大数据
  10. cloudstack+ceph中解决ceph单点问题