前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何检测极小人脸?试试超分辨率

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

作者头像
SIGAI学习与实践平台
发布2019-03-18 15:13:47
2.1K0
发布2019-03-18 15:13:47
举报

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SIGAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档