写在前面
最近老板总让我整理一些资料(做人难啊 做研究生更难),那我顺带就在这里记录一下吧~
一、基于深度学习的视线跟踪背景概述
1、视线跟踪
基于模型的视线跟踪技术:通过提取瞳孔中心、虹膜中心等特征对视线方向进行估计,能达到较高的测量精度,但此种方法具有依赖外部光源、标定过程繁琐等瓶颈。
基于外观的视线跟踪技术:为解决上述瓶颈提供了途径,利用多变光照的可见光图像,提取整个眼部区域的特征进行视线估计,不需要依赖外部光源。
基于深度学习的视线跟踪技术则隶属于基于外观的视线跟踪技术。
2、深度学习
人工智能的概念,在很早之前就已出现;
1943年,人工神经网络的概念被提出;
1959年,机器学习的概念由Arthur Samuel提出,后面由Tom M.Mitchel提出了更加书面的概念;
1965年出现了多层感知机,这其实就是深度学习的雏形,只是这时候深度学习的概念没有被正式提出;
1980年,受到生物视觉系统的启发,卷积神经网络的概念被提出;
1986年,深度学习的概念被正式提出,深度学习被引入机器学习的社区。
3、基于神经网络的视线跟踪
1)基于KNN(K紧邻)的视线估计
KNN是一种常见的机器学习算法,在聚类分析中常常被大家用到。其基本思想为将测试数据与带标签的训练数据进行比较,在训练数据中找到与之最为相似的前K个数据,这K个数据中出现频率最高的类别为此测试数据的类别。
KNN由三个基本要素组成:K值的选择、距离度量、分类决策。
在基于外观的视线跟踪研究中,KNN在合成的人眼图像中取得了不错的结果,合成的图片可以将像素直接作为特征进行分类训练。
合成图像如下图所示,包括 8 个视角的眼部图像,使用了基于补丁的多视图立体算法对图像进行三维图像的重建。 此方法中对每个视角的合成图像建立估计量,其中 K 设置为 10,利用欧氏距离进行度量,最终通过计算 K 个最近预测值的平均值作为输出。
一般在普通的图像问题中, KNN 在未提取特征的情况下很难得到好的结果,因为将图像像素直接输入容易产生尺度问题。而在合成图像中没有尺度问题,经过测试,KNN算法效率比较高,而准确率只达到了8°。此方法在追求效率的场景下有一定优势。
参考文献:Sugano Y, Matsushita Y, Sato Y. Learning-by-Synthesis for Appearance-Based 3D Gaze Estimation[C]. 2014 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE Computer Society, 2014, 1-8.
2)基于自适应线性回归的视线估计
自适应线性回归ALR (adaptive linear regression)是特定于稀疏训练样本集设计的。其基本思想为,在一个映射关系中,当输入特征样本的数量大于可映射的维数时,无法用线性组合精确地映射每一个样本。这时在特征样本中建立最优子集,利用最优子集找到映射矩阵。当在此输入新的样本时,在最优子集中找到最相似的样本,利用其映射矩阵进行计算求解。
此方法的应用也是建立在提前提取高级特征的基础上。
此方法, 在稀疏的样本下仍然能够取得比较高的准确率,但是只能容忍非常轻微的头部运动, 稍大范围的头部运动便会降低准确率。
参考文献:Lu F, Sugano Y, Okabe T, et al. Adaptive Linear Regression for Appearance-Based Gaze Estimation [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2014, 36(10):2033-2046
3)基于支持向量机(SVR)的视线估计
支持向量机最早在20十世纪末被提出,但一直沿用至今。面对样本数据集少的回归运算,它能够有效的升高维度,得到线性化的结果。一个支撑向量机可以映射到一个超平面,可以找到两类中的最大化差异,再把高维空间的分类面映射回低维,这是在分类中的应用;在回归中,SVM的思想是把左右数据看作一类,将映射的所有数据做到类内方差最小,其在应用中具有较好的泛化能力。
SVM在视线跟踪技术的应用中,应该称之为SVR,因为是对注视点的回归,跟普遍机器学习方法的步骤是一致的。此方法在面对丰富样本时能够省略配准过程,但是对于头部运动仍然只有很低的容忍度。
参考文献:Schneider T, Schauerte B, Stiefelhagen R. Manifold Alignment for Person Independent Appearance-Based Gaze Estimation[C]. International Conference on Pattern Recognition. IEEE, 2014:1167-1172.
4)基于随机森林的视线估计
随机森林(Decision Tree),是目前机器学习中的一种流行算法,其基本单元为决策树,通过将多棵决策树集成在一起进行投票得到结果。随机森林有以下优势:
1)决策树的准确率高;对大数据集友好;
2)能够处理含有高为特征的样本且不需要降维;
3)能够对特征进行权重分析;
4)可以得到内部生成误差的一种无偏估计;
5)有效解决缺省值问题。(在估计推断映射方面有优势,不需要像SVM做很多参数的调试。)
基于外观的视线跟踪技术,上述3种方法都是固定头部姿态的方法,没有考虑头部运动的影响。在随机森林方法的应用中,可以将回归问题分解为头部姿态与眼部外观同时与视线的回归,两者之间有以下关系:
1)无论头部姿态如何,眼部外观与注视方向直接相关。
2)注视方向分布在头部方向的有限范围内。
利用随机森林的方法将二者进行结合。
随机森林整体结构如图所示:
此方法提出用合成的眼部图像来解决基于外观的视线跟踪,并对头部姿态进行了定义(限制在水平方向的 8 个视角),取得了不错的结果,但是此方法的实验环境复杂,数据集扩展难度较大。
参考文献:Sugano Y, Matsushita Y, Sato Y. Learning-by-Synthesis for Appearance-Based 3D Gaze Estimation[C]. 2014 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE Computer Society, 2014, 1-8.
5)基于CNN的视线估计
卷积神经网络是深度学习中比较经典的算法之一,为包含卷积运算的前馈型网络,在计算机视觉领域应用广泛。随着深度学习在人脸检测中取得的成就,也有研究者将其应用到视线跟踪领域。
1) 获取大量数据集
深度学习与机器学习相比优势有两点:
i.不用人工提取高级特征, 通过多层连接的网络来自动提取特征;
ii.可以处理更多样、 更丰富的数据集。 数据集通过多个实验对象制作日常数据集, 因此包含了丰富的光照变化, 如下图所示。
2)面部对齐
利用人脸特征检测 68个 landmark标志点,选择四个眼角和两个嘴角进行面部对齐,如下图所示。将双眼中心和嘴部中心的这三个点连接为一个三角形, 在此基础上定义了头部坐标系。头部坐标系的 x 轴被定义为从右眼中心到左眼中心的方向, z 轴被定义为从三角形平面到物体后部的垂直方向, y 轴为三角形平面内与 x 垂直向下的方向。
3)利用头部估计器计算头部姿态—人眼提取
此部分利用已有的头部姿态估计器对头姿进行计算,得到头部姿态 h 。从 68 个landmark 中提取眼部图像。
4)利用 CNN 模型 LeNet 进行训练
4、视线跟踪技术的发展趋势
视线跟踪技术经过几十年的发展,已经不断趋于成熟并应用在了不同的领域,但是目前其发挥的功能还是有很多限制,比如在易用性、便携性、环境适应性、人群广泛性等各方面都未达到成熟,而突破限制的方向,即目前的视线跟踪技术的发展趋势,集中在解决头部运动、适应自然光照、 简化复杂的配准流程等问题上。
针对以上三个问题:
1)头部姿态的准确估计可以一定程度上解决头部运动问题;
2)基于外观的视线跟踪方法,可以脱离对光源的依赖,适应自然光照;
3)基于深度学习的映射关系求取,基于大规模、丰富多变的数据集,可以省略配准流程。
因此融合头部姿态,对基于外观的深度学习视线跟踪技术进行研究,是解决上述问题的一种可行方案。
二、基于深度学习的视线跟踪流程
1、数据集
之前博客:两个大型公开眼动数据集
当今时代下,深度学习热潮使各种优秀的深度学习框架百花齐放,同时计算机硬件的快速发展,都为研究者们训练前沿的学习模型提供了条件。但是,训练一个好的模型,最重要的前提是数据集的建立。
已公开的数据集如下:
在视线跟踪技术中,数据集通常至少需要包含眼部图像和对应的注视点坐标。
举例(如图所示):
如桌面式眼部数据集的采集流程为:采集设备负责采集人脸图像数据(包括了眼部图像数据),采集的同时,实验者需要注视屏幕上随机出现的标记点,标记点(x,y)以像素为单位,以屏幕为坐标系,在注视确定时将人脸图像数据采集下来。
深度学习的数据集在制作时,需满足可靠性、可扩展性、多样性,一个完备的数据集对深度网络模型的性能有很大的影响。
针对数据集需要满足的以上三点,可以对目前常用的两种数据采集方式进行优缺点分析,主要包括:
1)在受控的实验室环境中采集
优点:实验室中的环境更容易控制,对采集人员可以进行培训,采集到的数据更容易满足可靠性;
缺点:实验环境大都设置在固定位置,数据采集时采集人员均需到达同一地点,可扩展性较差;实验室中的人力物力有限,很难得到大规模的数据集(比如需要包含各个国家的人脸数据),在满足多样性上受到限制。
2)众包采集策略
优点:通过网上在线进行数据的采集,以一定报酬召集大量用户进行数据集的采集,由于互联网的世界连通性,此方法可以获取到更加丰富的数据集;通过网上的程序进行采集,可以同步更新和升级,世界各地都可以进行采集,降低了对采集人员的限制,可扩展性强;
缺点:由于数据采集线上进行,无法控制每一个用户的采集行为,只能尽量通过程序设计对用户进行一些限制,有时得到的数据可靠性不强。
综上比较,目前众包采集策略在基于深度学习的视线跟踪技术中更有优势,也有研究者已经对其进行了实施,Kyle Krafka等人中提出用众包的方法获取了数量非常丰富的脸部数据集,这些数据集来自于手机、平板等可移动设备。
2、数据预处理
基于外观的视线跟踪方法,其第一步就是要获取有确切信息的眼部图像,从采集设备获得原始图像后,需要进行以下预处理步骤:
1)需要将人脸与人眼图像进行提取;
haar+adaboost方法;
dlib库;
libfacedetection库;
2)将模糊数据进行剔除;
3)将眨眼的无效数据进行剔除;
4)数据增广;
基于深度学习的视线跟踪技术中,大量的数据集是必要的,数据增广在一定程度上扩大了数据集的数量,也提高了模型的泛化能力。可以通过图像对比度、图像平移、图像加阴影、图像亮度等数据增广方式对数据集进行处理。
3、网络构建
1)深度框架的选取
构建深度网络之前,首先需要确定要使用的深度学习网络架构,下图为各个开源框架在Github上的数据统计(截止至2019年11月):
2)深度网络的搭建
一个模型的构建,需要确定大量的参数,将深度学习应用在视线跟踪技术的研究中,可以参考目前已经取得成果的网络模型。
目前,针对不同问题,涌现了大量的深度学习网络模型:
1)面向手写字符识别的Lenet模型;
2)面向图像分类的AlexNet模型;
3)探索卷积神经网络深度与其性能关系的VGG Net模型;
4)探索更深网络的图像分类与检测的GoogleNet模型;
5)解决深层网络梯度消失的ResNet模型;
6)面向目标检测的RCNN模型;
7)面向目标定位的YOLO 模型;
8)面向图像分割问题的SegNet模型;
9)面向图像生成问题的GAN模型等等。
视线跟踪实现的是一个回归问题,通过对以上模型的了解,比较合适的选择有以下三种:
1)AlexNet模型
2)GoogleNet模型
3)ResNet模型
在2016年,Krafka等人利用深度学习和众包的大型数据集实现了面向移动媒体的视线跟踪技术,达到了较高的准确率,深度网络模型为iTracker。
该网络模型是在AlexNet的基础上设计完成。输入包括左眼、右眼、脸部图像以及一个面部网格二值图,此二值图为脸部在整幅图像中的大小和位置。输出为移动设备屏幕中注视点。其模型网络结构如图所示。
3)模型优化
1)提高dropout比率
Dropout方法的提出最早出现在2012年AlexNet发表的文章中,是一种避免过拟合有效的方法,其大概操作是在训练过程中按照某一概率 (通常是50%)舍弃一部分神经元。Dropout操作使得每次训练并不是所有的神经元都会参加,而是每次随机舍弃一部分神经元,这样可以增加模型的健壮性,减少神经元之间的关联性。
2)降低学习率
学习率越小越容易得到局部最优,然而训练时长的增长,会使得收敛速度也随之减缓。一般而言,学习率首先可以选择一个较大的经验值,当每轮迭代后的误差越来越大(甚至变成了NaN)或者测试集的学习误差或精度不怎么变化时,可以适当减小超参数配置文件(solver.prototxt)中的基础学习率(base_lr),一般是减小一个数量级。直到训练误差和测试误差都达到最小值时,就可以终止训练,此时获得的就是最优模型。
3)增大批尺寸
为了得到更好的模型,数据集越来越大,这就带来了一个问题,内存是有限的,一次训练不能够加载所有的数据,因此需要设置一个合适的批尺寸参数。
批尺寸(batch_size)是一个很重要的超参数。每次在更新权重参数时,如果只依赖一个样本(因为总共有成千上万个样本),模型不能很好地收敛。通常的做法是依赖多个样本(通常是2的倍数),这样能够加速计算,加快模型收敛速度。
批尺寸太小的话,不能充分利用内存,相同数据量的处理速度太慢,容易陷入局部最小的情况,网络收敛不稳定、收敛速度慢。
批尺寸太大的话会比较容易收敛到一些不好的局部最优点,增加训练时间,影响随机性的引入,内存容量无法支撑。如果GPU显存足够大的话可以把初始批尺寸设置为最大(一般是8的倍数)或者选取一个经验值然后调参。
4、预测
编写程序,使用模型实时预测,下图为Eye Tracking for Everyone的效果图。
参考文献:Krafka K, Khosla A, Kellnhofer P, et al. Eye Tracking for Everyone[C]// Computer Vision and Pattern Recognition. IEEE, 2016:2176-2184