如何检测极小人脸?试试超分辨率

SIGAI 推荐

飞跃计划第四期还剩最后两个名额,定制专属你的算法工程师的学习计划(联系SIGAI_NO2)

人脸检测是计算机视觉中的基础而又重要的任务,是人脸识别任务的基础。人脸检测的目的是给定一张图像,返回每张人脸的边界框的坐标(bounding box)。其中,人脸检测属于通用物体检测下的具体任务,很多灵感都来自通用物体检测。目前,人脸检测技术在工业界广泛使用,掌握人脸检测技术可以找到很好的工作。

简介

本文主要提出了一种直接从模糊人脸生成高清人脸的算法,通过生成对抗网络的生成器实现超分辨率(SR),同时通过判别器去判断真/假人脸和 是否高清人脸。在widerface数据集上的实验证明了该方法的有效性。

正文

本文是阿卜杜拉国王科技大学的作品,本文的主要目的在于解决人脸检测中小脸的问题,先来一张图看看本文的效果:

是不是很震惊?该图中存在上百个人脸,其中大部分都是极小的人脸(tiny face),本文所提出的算法就是为了解决小脸的检测,那么小脸为什么难以检测呢?

首先,我们知道人脸越大,包含的像素越多,反之,人脸越小,所包含的像素,也就是有效信息会更少。在CNN(卷积神经网络)的下采样中,很多小脸的信息会因此丢失。

其次,大多数人脸检测算法基于通用物体检测算法,而通用物体检测需要设计大量的anchor,人脸检测也是如此。但是由于图中广泛存在小脸,对anchor的设计要求也更高,可能需要引入更多的anchor,增加更多的复杂度才能适应小脸检测。

举个例子,1,很多小脸的分辨率都是在10*10 个像素左右, 人脸检测器缺乏足够的细节信息去区分他们和背景部分。 2,在CNN的下采样中,feature map往往会经历8,16,甚至32倍下采样,这些小脸的空间信息基本都丢失了。 最简单的方法是直接放大图片,但是这会导致计算量增大,并且测试时间变长。

那么本文是如何解决这个问题的呢?本文引入超分辨率的思想,既然人脸越小,像素越少,那我把小脸做超分辨率岂不是能够放大人脸?因此,本文的核心贡献就是通过引入超分辨率网络将小脸变大,从而提高小脸检测的准确率。

例如,一张10*10 像素的小脸,通过GAN的生成器,可以进行四倍超分辨率,生成40*40像素的人脸,相比直接进行双线性插值,可以增加很多细节信息。同时,在判别器中引入新的人脸分类损失,可以指导生成器生成更高质量的人脸,并能够更有效的对人脸/背景 进行分类。

整体流程:

首先看一下网络结构

其中(a)是图片,(b)是一个预先训练好的人脸检测器,本文采用了MB-FCN。(c)是根据标注从图中抠出的人脸和非人脸区域。(d)(e)分别是GAN(生成对抗网络)的生成器和判别器。其中生成器用来生成高清人脸,判别器是一个多任务网络,用来判断(1)是不是人脸(2)是不是高清图。

整个流程

首先(b)人脸检测器是不需要训练的,直接用预训练好的。 只需要训练后面的对抗网络即可。

在训练时 从图片中抠出人脸区域和随机抠背景区域。然后对较大的人脸和背景作为label送给对抗网络去学习,让生成器能从低分辨率人脸重建高分辨率人脸,判别器可以判断是不是人脸并且是不是高分辨率图。在生成器的最后还加入了refinement subnetwork,用来对网络进行深度监督,起到去模糊的作用。

在测试时,首先MB-FCN会以一个很低的阈值输出大量可能有人脸的区域,然后这些区域会送给生成器重建,最后判别器针对高分辨率图片判断是不是人脸,把不是人脸的区域进行过滤。

一些细节

生成器的设计:生成器主要由两部分组成,第一部分是up-sample network,主要是实现超分辨率,通过一系列卷积和两个反卷积实现4倍的放大,第二部分是refinement network,主要目的将模糊的图片生成清晰的图片。具体的网络设计如下:

判别器的细节

采用VGG19作为判别器的backbone, 为了避免多次的下采样损失人脸信息,作者去掉了conv5 layer后的max-pooling 层,并且作者把vgg最后的fc替换成了两个并行的fc层,从而实现区分是否高清人脸和区分人脸/背景的目的。

因此,整个算法的流程结束,损失函数也顺理成章的引入:

第一个是生成器的超分辨率和去模糊的损失,其实就是均方差损失函数(MSE)。其中 和 分别表示小的模糊的人脸和高清的人脸。 和 分别表示up-sampling network和 refinement network。 w是生成网络的参数。

作者说没有用感知损失,是因为网络太大了,装不下了,个人觉得用上感知损失的话,生成人脸的效果会更好。

第二个是判别器的对抗损失,和标准的对抗网络判别器的损失一致:

第三个是判别器的分类损失,采用了交叉熵损失函数:

实验部分:

数据集简介

Wider face: wider face 是一个最新的大规模人脸数据集,其中包括32203张人脸,按照40%,10%和50%把数据集划分为训练集,验证集,和测试集。

实验细节

人脸检测器采用的是MB-FCN 检测器,backbone基于resnet50, 在imagenet上预训练。

在训练时,从wider face中抠出人脸和背景,并对其缩小四倍,组成低分辨率-高分辨率的图片对。 在测试时,选择分数最高的600个ROIs送给GAN去得到最终的检测结果。

本文在人脸检测的知名数据集wider face上做了消融实验,结果如下:

可以看到一共涨了2个点左右,其中作者详细论证了每个loss对性能的提高都是有帮助的。

下图是生成器结果的可视化图,其中上图是原始的小脸,可以看到要么很模糊,要么颜色很奇怪。下图是重建后的图,可以看到对人脸的恢复效果很好。

在wider face 数据集上和别的方法对比,可以看到在hard set 部分,作者的算法领先别人的算法。

最后,贴几张图看一下该算法对于小脸检测的效果吧~有密集恐惧症的朋友小心哦~

总结

这篇文章另辟蹊径,并没有从传统的检测器角度去改进,而是通过超分辨率网络解决小目标检测的问题。其中通过生成器去生成超清人脸,判别器去判断是不是人脸。这种跨领域知识迁移的思路值得我们学习。

[参考文献]

1 Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.

2 Multi-branch fully convolutional network for face detection. arXiv preprint arXiv:1707.06330, 2017.

3 Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.

全文PDF见http://www.tensorinfinity.com/paper_128.html

原文发布于微信公众号 - SIGAI(SIGAICN)

原文发表时间:2019-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区