近日,来自德国亚琛工业大学的研究人员开源了形状拟合库ShapeNet,其可以实现超实时的人脸特征点检测,也可以用在其他任何需要形状拟合的应用场景。
开源地址:
https://github.com/justusschock/shapenet
ShapeNet库使用Python实现,不仅开源了预训练模型,而且对开发者来说可以很方便地使用其进行任何其他形状拟合任务的训练,只需要简单配置参数即可,这是该库最值得参考的地方。
在对应论文《Super-realtime facial landmark detection and shape fitting by deep regression of shape model parameters》中,作者描述了其算法原理,今天就跟大家一起来学习下作者的设计思想。
作者信息:
什么是形状拟合?
看下面这张图:
上图展示了对人脸、红外人脸、猫脸、医学图像器官形状拟合的例子。
相信大家对于人脸特征点检测并不陌生,其有时候也被称为人脸对齐(或者人脸配准),即定位人脸中特定位置的点,所有这些点组合在一起就描述了人脸的形状。
推广之,任何特定目标形状的描述,都可以通过形状拟合算法完成。
这很显然是一个非常有用的研究方向,比如基于人脸特征点检测的视频特效已成为各大直播平台的标配,在医学图像领域,通过形状拟合确定器官的位置,可以在放化疗手术中对人体器官进行低剂量照射保护,在机器视觉中零部件形状拟合也可以帮助进行缺陷检测等。
在计算机视觉的历史上,这是一个经典问题,大名鼎鼎的ASM、AAM、CLM都是为了解决这一问题。
目前在该领域,基于“特征提取”+“回归坐标”的方法是主流。
该文提出的ShapeNet算法也是深度学习回归的方法,其最大的优势是速度快,在上图中文字说明跑在GTX 2080 Ti上可以达到410fps,即2.4ms一帧。注意这是Python的实现,这样的速度,系统IO估计也比较占时间。
ShapeNet算法原理
算法原理比较简单,作者把形状拟合的坐标回归问题,转化为坐标PCA压缩后系数与形状整体仿射变换系数的回归问题,请看下图:
上图中显示的是预测的过程,CNN提取的特征进行回归得到PCA压缩系数和整体仿射变换系数,然后PCA压缩系数乘以PCA特征向量得到人脸形状,并进行包含平移、旋转、缩放的仿射变换即得到了最终的特征点位置坐标。
在训练的时候对形状进行PCA压缩和仿射变换归一化,记录下PCA的特征向量、每个形状的PCA系数和这些仿射变换的系数,后两者用于作为深度学习系统的回归的标签。
该算法使用了形状中特征点的位置坐标信息其实是高度冗余的特性,通过PCA压缩大大降低了需要预测的数据量。
作者使用的特征提取网络各层的说明,共9层:
实验结果
既然用到了PCA压缩,就不可避免涉及到压缩比例的问题,这直接决定了回归参数个数。
作者在人脸特征点检测数据集上研究了回归参数的数量对最终精度的影响,如下图:
随着参数个数的增加,精度有增加的趋势,但比较50个参数和75个参数的结果曲线,发现75个参数时精度却下降了,这可能和标注数据本身有噪声有关系。PCA压缩丢弃这些信息反而使结果更好。
下图是作者在几个形状拟合数据库上的实验结果Cumulative Error Distribution,包括人脸数据集(300W indoor 、300W outdoor)、红外人脸数据集Thermal、猫脸数据集Cats、医学图像数据集JSRT lungs、PROMISE2。
作者并没有跟其他算法比精度,很多提升精度的tricks没加,作者更加强调该库的简单、通用、高效,GTX 2080Ti 上 410fps。
但CV君以为如果有用C实现的CPU程序开源的话,更具说服力。
该库支持新数据库的训练,相信对很多工业界的朋友应该有很用。
支持CV君的分享,欢迎点下文末的“好看”~
代码地址:
https://github.com/justusschock/shapenet
官方文档:
https://shapenet.readthedocs.io/en/latest/
论文地址:
https://arxiv.org/abs/1902.03459