开源250FPS的人脸106特征点,3.3M模型

实际上,这是2017年的一个实验性的工作了,当时刚毕业在京东工作(至今还很怀念那段时光,坦白讲京东蛮不错的,不像网上黑的那样),直播购物人脸美颜业务方有一个人脸特征点的需求,于是我在自己毕业前的工作上,利用mxnet做了一个改进版。不过因为各种因素,这个工作没有被继续下去,最近周末有点空,就用pytorch实现了一遍,还不错,开源出来给大家,免得落灰。

在校的时候就是看论文,复现(是不可能复现的),当时关注到一个叫SDM(有监督梯度下降法)在人脸特征点上,效果特别好,于是参照这别人的代码,自己复现了一个版本,移植到手机上,效果还不错,当时只用opencv这一个依赖,用C++手工撸线性回归器,实现了训练+预测,写出来的感觉真爽,现在再回头去看当时写的代码,不忍直视了。今天开源的算法是deep-sdm,也就是sdm的deep版本,是将经典算法sdm中的HOG特征提取器,以及线性回归器,利用CNN替换后得到的人脸特征点定位算法。收益如下:

  • 在sdm算法中,一般需要至少3个步骤级联,利用CNN模型之后,级联步骤可以缩小到2步,甚至一步到位。可以类比目标检测的two stage还是one stage的区别
  • sdm算法提取HOG特征之后,总维度较高,导致模型大小通常好几十M,相比之下deep-sdm模型只有3.3M,利用ncnn的fp16存储在不损失精度的情况下,模型大小只有1.8M
  • 在MacBook 16-inch CPU上实测能够达到250FPS,利用ncnn移植到移动端能够保持100FPS以上

我手上没有更多的数据了,在github上找了一个开源的2万张106点人脸数据集,然后做了一些data augmentation操作后,直接在Mac上用CPU训练的,除去数据准备的过程,训练只需要几个小时就好了。有数据的小伙伴可以给我发,有时间可以更新一下模型,不过一般没时间。另外参数也没有细调,调调参数模型效果应该更好。

先看看这个效果吧,下面说一说细节,先从sdm算法开始。


sdm算法的本质:没有一个线性回归解决不了的问题,如果有的话,那就两个

sdm级联示意图,每一次都修正上一次的结果,使得当前特征点和ground truth之间的偏差越来越小

如上图0所示,在检测出来的人脸框位置附近,随机初始化一组人脸特征点[公式] ,假设真实的人脸特征点为 [公式] ,那么初始化的特征点 [公式] 和真实特征点[公式] 之间,肯定是有偏差的。这时可以选取 [公式] 中的一部分点(图中黄色点)作为感兴趣点,提取这部分点在图像中的HOG特征,利用这些特征去线性回归,得到与真实特征点 [公式] 之间的偏差 [公式] ,也即 [公式] ,不过回归出来的 [公式] 可能不够精确,我们叠加到 [公式] 之后得到了 [公式] ,如上图1所示,发现位置虽然还不对,但是比刚刚好了很多。

重复上述步骤4次,就会发现位置越来越精确,最终得到的 [公式] 与真实 [公式] 之间,偏差就比较小了,可以认为这就是人脸的特征点了。这就是sdm的本质,一次不行,就两次嘛,两次不行就三次嘛,三次不行,就。。。

提取红色框中的HOG特征,用于回归位置偏差

当然sdm有些细节手工调优的工作,比如刚刚开始的位置 [公式] ,位置偏差比较大,可以选取少数几个点提取HOG特征,而且HOG特征的ROI要大一些,因为刚刚开始时大的调节,可以理解为整体特征点的移动。到了 [公式] 、 [公式] 离正确位置已经偏差很小了,这时候是微调,应选取更多的点提取其HOG特征,同时ROI可以设置小一些。

你看,那时候在实验室,一个发月800块,穷学生,穿得破破烂烂的。现在工作有钱就不一样了,穿得更破了(手动狗头)

上图是我开源的经典sdm算法里面的测试效果图,当时写了demo在实验室的测试效果。下面进入正题,说说deep-sdm干了什么。

deep-sdm的本质:抠图+分组卷积 替换sdm中的 HOG特征提取+线性回归

其实上面已经说完了,就是在sdm算法中,将HOG提取特征之后进行线性回归的过程拿掉,比如随机初始化一组人脸特征点 [公式] 之后,选取其中n个点(前图中黄色的点)作为感兴趣点,以这些点为中心可以抠出来 [公式] 个小图,将这[公式] 个 [公式] 的小图,组合在一起得到一个[公式] 的图,以这个作为CNN的输入,当然Conv层需要设置group参数为n,以进行分组卷积,利用CNN直接回归 [公式] ,得到 [公式] 之后,可以修正 [公式] 的位置。同理一次这样的迭代效果没有达到最优,所以选取了两次这样的过程。相比原始sdm的3次或者4次,迭代refine次数有明显降低。

就酱,感兴趣去看源码https://github.com/chengzhengxin/deep-sdm了啦

猜你喜欢

转载自blog.csdn.net/weixin_42137700/article/details/107860369