finding tiny face心得笔记

花了几天时间专门对这篇论文做了研究,感觉很有收获。这篇文章也真的是干货满满呀。

作者探索了寻找小脸的三个方面:1. 尺度不变性的问题;2. 图像分辨率的问题;3. 基于周围内容的推断问题。

基于此,作者做了三个方面的尝试:1.对于不同的scale,训练不同的detector。 detector使用了multi-task fashion,即使用同一个网络的不同层的特征。2. 作者用实验说明了小脸周围的内容对检测小脸是非常重要的。3. 通过上采样、下采样图像并作为输入,来使用与训练的神经网络做小脸识别。

实验部分:作者使用了不同的策略来构建滑动窗口探测器来探测固定大小的人脸。将固定大小的物体检测作为一个二值热力图预测问题,所预测热力图在(x,y)的值为一个二值的数(0或者1)来标明这个框里是否有个人脸。这里借用了fully convolutional neural network的网络结构,即使用中间得到的特征图反卷积出一个和原图一样的热力图。这里有个问题,热力图是怎么得到的?是和RPN一样设置正例和负例的还是说直接将ground truth的框中心作为1,其他的地方都是0?文中似乎没有交代。作者使用了不同res block的最后一层来重构这个heat map。也使用了不同的res block的feature map做完上采样以后再加起来,做预测的实验。吐槽一下论文的写作风格,省略的东西比较多,一些地方真的是含糊不清啊。。。比如图中的给出的数字没有说明是什么数值,是预测的heatmap的数值?还是探测准确度?以下暂时以检测精度来称呼这个模糊的指标吧。

第一个实验的最终结果显示使用更多的内容(就是将不同层的feature map做上采样然后加起来)会有效提高小脸的检测精度,尽管叠加过多的feature map会最终使得检测精度下降。这一结论个人感觉比较trivial和reasonable,已经有很多的work证明这个问题。比较有意思的结论是对于tiny face来说,使用multi scale feature map的叠加带来的准确度提升远远大于 large face.这也是证明作者观点的一个有力支撑。作者的这个实验表明可以构建一个multi task templates的探测器,这些探测器使用了不同大小的feature map, 但是有着相同的感受野。这个multi task template可以简单的由一个multi-channel heatmap prediction来完成。(即特定的channel和特征像素位置有不同的binary loss)。作者将这个由不同层的feature map结合起来的东西叫 foveal descriptor(中心凹描述符)。

第二个实验为探索多大的检测窗口为最优窗口?理论上,可以使用中等尺度的template(比如50x40)来检测经过上采样后的小脸(25x20经过上采样后就为50x40)。实验上,作者也是非常吃惊的发现,这个猜想是正确的。那么对应大脸而言,将一个中等尺度的模板(125x100)应用在找经过下采样的大脸上(250x200下采样后成为125x100)效果会怎么样呢?再次的,作者非常惊奇的发现,准确率从89%到94%。作者寻找后发现答案可能在于数据集不同size的人脸的不均衡性。小脸的比例大大超出大脸的比例。这个解释可以说明大脸下采样后被准确率更高,但是却无法解释小脸上采样后检测率更高。作者又从pre-trained model身上找到了可能的线索。在imagenet数据集中,80%的training example都是中等大小的,高度在40到140像素之间。由于我们使用了这个预训练的模型做微调,而这个模型又对这个像素的物体有比较强烈的bias,因此最终的结果就变成了这个样子。(真的是这样吗?感觉听起来很有道理的样子。如果真的是这样的话,使用pre train model 是不是不再是一个最好的选择?)

由上述两个实验,作者引出了他的模型。作者想使用multi task learning 来暴力训练几个不同的resolution的templates,然后贪婪的选择一个最好的。作者使用了t(a,b,c)来表示一个模板。这个模板被用来在分辨率为c的图像上探测大小为(a/c,b/c)的物体。比如,可以使用(250,200,1)和(125,100,0.5)两个模板来寻找250x200的脸。给定训练数据集后和标记好的bounding box后,我们可以定义一系列的标准bounding box 的形状来大概的覆盖bounding box的形状空间。论文中使用了Jaccard 距离来定义(也就是1减去交并比)。

现在,对于一个每一个目标物体的尺寸来说,我们想问:什么样的c会最大化t(a,b,c)的模板的表现?为了回答这个问题,对于每一个固定的尺寸,作者简单的训练了几个不同的 multi-task 检测器,然后从中取最好的那个检测器。有了这些最优的检测器,作者就可以使用不同分辨率的图像来重新训练一个multi task model。有趣的是最终的统计结果显示,使用1分辨率的检测器对应的物体尺寸正好是imagenet对应的40到140的尺寸。

在得到最终的模型后,作者又问了一个问题,我们最终得到了一系列不同的检测器,这些检测器有冗余吗?比如,我有了一个(64,50,1)的检测器,还需要另外一个(62,50,2)的检测器吗?答案是肯定的,我们可以通过剪枝来去除这些冗余的检测器。因为每个图像都会进入网络三次,即上采样一次,下采样一次,原图一次,本质上,我们可以将这些检测器削减到一个小的集合里(比如40-140个像素的高度)。文中贴出的数据显示,经过剪枝处理后,模型的表现甚至有了略微的提升。

最后作者详细说明了他的网络结构。首先训练了binary multi channel heatmap predictors来检测一系列的人脸(高度从40-140px)。然后使用coarse图像金字塔来找更大和更小的人脸(包括两倍上采样和两倍下采样)。作者测试了ResNet101,ResNet50和VGG16来当做基准检测器。

下边是一些训练细节。给定了标注好的图像和template之后,我们定义正例为IOU大于0.7的,负例为IOU小于0.3的。其他的位置全部被0填充。这种设定会导致对于每个大的物体来说,正例的数量会远远多于负例的数量。为了解决这个问题,作者使用了平衡采样和难例挖掘的技巧来减轻这种影响。做完这些后,作者又用线性回归器对bounding box做了个微调,用标准非极大值抑制(阈值0.3)来消减框的数量。





你可能感兴趣的:(人脸识别)