每日一读

这里仅收纳精读的论文笔记。

属性学习

年龄估计

  • 深度随机森林(Deep Regression Forests)
    "Deep Regression Forests for Age Estimation"
    推荐,卷积森林网络和随机森林结合的端到端生成模型,效果很好。

目录

年龄:深度回归森林 (DRF)

论文

"Deep Regression Forests for Age Estimation", CVPR 2018, paper, code

摘要

人脸图像的年龄估计是一个典型的非线性回归问题。这个问题的主要挑战在于人脸特征空间和年龄是异构:同龄人之间的巨大面部容貌差异性,以及老化模式的非固定性。本文提出一种用于年龄估计的端到端模型——深度回归森林 (Deep Regression Forests)。DRFs 将分支结点连接到卷积神经网络的全连接层,通过联合学习分支结点中的输入相关的数据划分和叶子结点上数据抽象来处理异构数据。这种联合学习采用交替策略:首先固定叶子节点,通过反向传播优化分支结点和 CNN 参数;然后固定分支结点,通过迭代由变分推断得到的步长自由和快速收敛的更新规则来优化叶子结点。我们在三个标准年龄估计基准上验证了提出了 DRFs,并在所有的基准上都取得了最先进的结果。

相关方法

人脸年龄估计有两种子任务:精准估计时序生理年龄(如 15 岁),年龄段分类(如 青年,15~20)。本文针对的是精准年龄,问题的关键是学习面部特征和时序年龄间的非线性映射,而挑战在于两者间的异构性。

_images/Attribute_DRF_0.png

相关方法及缺陷:

  1. 整体非线性核映射:因整体的异构性不可避免陷入偏差而过拟合。
  2. 分治策略:分层回归、树回归;硬划分不能保证局部同构。
  3. 序列回归(Rank):二元子分类器,扩展性不够。
  4. 标签分布学习:建模年龄相关性,性能不错,不适用于复杂数据。

主要贡献:

  1. 模型结构:提出 DRFs(CNN+RF) 的端到端的联系学习模型,学习输入相关的分支划分和叶子概率分布。
  2. 学习策略:基于变分推断,提供了 DRFs 中叶节点概率分布在优化过程中数学上的收敛保证。
  3. 最佳性能:在多个年龄评估基础测试集上都达到了最先进的结果。

网络结构

深度回归森林是一个生成模型,由卷积神经网络和随机森林组成的端到端模型,采用迭代训练来联合学习年龄空间的条件概率分布,以最终的年龄期望作为预测结果。

_images/Attribute_DRF_1.png

如图,DRF 由 CNN 和 两颗决策树的随机森林组成。CNN 作为特征提取器将图像转化为高层视觉语意特征(红色),决策树分支结点(蓝色)根据 索引函数 \(\varphi\) 采样视觉特征,采用 sigmoid 函数 \(\sigma\) 进行 软划分,每叶子结点(红色)表示年龄空间的 独立高斯分布 \(\pi_\iota (y)\)

注解

索引函数 \(\varphi\) 随机初始化以后就确定了,不需要学习。

决策树差异在于:1. 索引函数 \(\varphi\) 不同,2. 叶节点的初始分布。

DRF 需要学习的参数:1. CNN 的权重 \(\Theta\),2. 叶节点高斯分布参数(均值方差)。

年龄预测

  1. 分支结点软划分:索引 CNN 高层视觉语意特征进行软划分 \(s_n(x;\Theta)=\sigma(f_\varphi(n) (x;\Theta))\)
  2. 叶节点概率:分支结点处根据软划分概率选择左右结点,满足独立事件乘法准则。
\[P(l|x;\Theta)=\prod_{n\in N}s_n(x;\Theta)^{1(l\in L_{n_l})}(1-s_n(x;\Theta))^{1(l\in L_{n_r})}\]
  1. 期望年龄分布:每个叶节点年龄分布的加权融合 \(p(y|x,T)=\sum{l\in L}P(l|x;\Theta)\pi_\iota (y)\)
  2. 预测期望:以融合年龄分布的期望作为最终预测结果 \(\hat{y}=g(x;T)=\int y*p(y|x;T)dy\)

交替训练

  1. 损失函数:与常规生成模型一样,DRF 最终目标也是优化在训练集 \(S\) 上的最大似然估计,即最小化负对数似然
\[R(\pi,\Theta;S)=-\frac{1}{N}\sum_{i=1}^{N} log(p(y_i|x_i;T))\]
\[(\pi^*,\Theta^*)=\mathop{argmin}_{\pi,\Theta}R(\pi,\Theta;S)\]
  1. 固定叶子结点参数 \(\pi_\iota (y)\),分支结点共享参数 \(\Theta\)。因为分支结点使用Sigmoid 软划分,结点连接关系缺点,因此可以使用标准 BP 训练 CNN 权重。
  2. 固定分支结点参数 \(\Theta\),优化叶子结点参数模型 \(\pi_\iota (y)\)。在固定分支结点情况下,优化问题简化为期望年龄分布的最大似然的(受限)优化问题,可以采用变分推断(Variational Bounding)来迭代最小化损失。
_images/Attribute_DRF_2.png

实验结果

目前常用的年龄估计评价指标包括平均绝对误差 (MAE) 和累积指数 (CS)。

_images/Attribute_DRF_3.png _images/Attribute_DRF_4.png

评价

想法比较新颖,实验效果也不错,好文章。

检测技术

通用目标检测

  • RefineDet
    "Single-Shot Refinement Neural Network for Object Detection"
    推荐,一个二次回归的单段检测器,相对于 SSD,速度下降不大,但准确率显著提升。
  • Detect at 200 FPS
    "Object detection at 200 Frames Per Second"
    推荐,一个二次回归的单段检测器,相对于

人脸检测

  • SRN: Seletive Refinement Network
    "Selective Refinement Network for High Performance Face Detection"
    推荐,根据 RefineDet 思路发展而来的人脸检测器,效果很好。
  • DSFD: Dual Shot Face Detector
    "DSFD: Dual Shot Face Detector"
    不推荐,虽然目前性能最好,但提升主要来自于使用复杂网络。
  • FaceBoxes: SSD-style 的快速检测器
    "FaceBoxes: A CPU Real-time Face Detector with High Accuracy"
    最小脸 20px,20FPS@CPU125FPS@GPU
  • DCFPN:Single Head 快速检测器
    "Detecting Face with Densely Connected Face Proposal Network"
    最小脸 40px,30FPS@CPU, 250FPS@GPU

目录

RefineDet

论文

"Single-Shot Refinement Neural Network for Object Detection", CVPR 2018, paper code

摘要

在目标检测领域,两段检测器(如 Faster R-CNN)已经达到最高的精度,然而单段检测器(如 SSD)具有高性能的优势。为了继承两者的优点,同时又克服它们的缺点,本文提出了一种新的单段检测器:RefineDet。它比两段检测器具有更高的精度,并且保持与单段检测器相当的效率。RefineDet 由两个相互连接的模块组成,即锚点精炼模块 (Anchor Refinement Module) 和物体检测模块。具体地说,前者的目的是(1)过滤掉负锚点,以减少分类器的搜索空间;(2)粗调锚点的位置和大小,以便为后续的回归器提供更好的初始化。后一个模块以改进后的锚点作为前者的输入,进一步提升回归效果和预测多类标签。同时,在目标检测模块中,我们设计了一个传递连接块 (transfer connection block) 来传递锚点精炼模块中的特征,以预测目标的位置、大小和类别。多任务损失函数是我们可以端到端地训练整个网络。在 PASCAL VOC 2007, PASCAL VOC 2012, and MS COCO 上的大量实验表明,RefineDet 在高效率的情况下实现了最先进的检测精度。

回顾

两类检测器:

  1. 单段检测器(SSD, YOLO-V1/V2/9000/V3, RetinaNet):密集锚框 (anchor),快而不准。
  2. 两段检测器(Fast/Faster R-CNN, RFCN, FPN, Mask-RCNN):稀疏候选框 (Proposal),准而不快。

作者认为,两段检测器比单段检测器有三大优势:

  1. 两段式结构中间的采样,启发式地解决了类别不均衡问题。
  2. 两段级联回归的 bounding box 参数更准。
  3. 采用两阶段特征描述物体。(RPN 的共享类别无关特征和 detector 的类别相关特征)

网络框架

RefineDet 是一种改进的单段检测器框架,类似于 SSD,通过分类和回归固定数量的锚框,接以非极大抑制来预测最终输出。RefineDet 增加了两个内联模块:锚框精炼模块(anchor refinement module, ARM)和物品检测模块(object detection module, ODM),并通过传输连接块(TCB)共享特征。

RefineDet 三大核心部分:

  1. 传输连接块(Transfer Connnection Block, TCB):连接 ARM 和 ODM 以共享特征,使用两个卷积层加工特征(通道减半),融合上下文信息(叠加更高层反卷积特征,类似于 FPN),然后使用一个卷积层融合特征,以保证 ODM 特征的判别能力。
# Transfer Connnection Block
def TCB(f1, p2):
  t1 = Conv(f1, kernel=3, stride=1, pad=1, reduce_channel=0.5, name='TL1_1')
  t1 = ReLU(t1, name='TL1_1_relu')
  t1 = Conv(t1, kernel=3, stride=1, pad=1, name='TL1_2')
  up = DeConv(p2, kernel=2, stride=2, pad=0, name='P2-up')
  p1 = EltAdd(t1, up, name='Elt1')
  p1 = ReLU(p1, name='Elt_relu')
  p1 = Conv(p1, kernel=3, stride=1, pad=1, name='P1')
  p1 = ReLU(p1, name='P1_relu')

  1. 两段级联回归:首先 ARM 对每个规则的锚框进行初步回归,然后将每个调整后的锚框指定到对应的 ODM 特征,ODM 在更高质量的初始锚框上,进一步精炼。通过两段回归策略,RefineDet 可以比单段检测器获得更好的定位精度,特别是对小目标等比较有挑战的场景。
  2. 负锚框过滤:为看提前清除掉明确分出的背景锚框,减缓类别不均衡问题,采用提前清除负锚框的机制。在训练阶段,对于某个调整后的锚框,如果它在 ARM 获得的背景置信分数超过预设阈值(经验阈值 \(\theta=0.99\)),在训练 ODM 时,直接把它丢弃。因此,我们只用调整后的难负锚框和正锚框来训练 ODM。同时在预测时,我们也只考虑背景置信分数小于阈值的锚框。

训练和推理

  • 数据扩充:类似于 SSD,随机光学失真,随机扩展、切割和镜像。
  • 主干网络:在 ILSVRC CLS_LOC 数据集上预训练的 VGG16 和 ResNet101。
  • 锚框配置:尺寸 (8,16,32,64) 满足 4 倍步长,长宽比 (0.5, 1.0, 2.0)。
  • 锚框匹配:1. 对于每个标注框,匹配最大的锚框;2. 匹配大于阈值 0.5 的锚框。
  • 难负例挖掘:在 ARM 和 ODM 中,对于负锚框排序并取损失较大者,保证正负比例为 1:3。
  • 损失函数:ARM 二元交叉熵, ODM softmax,smooth-L1 损失。
  • 优化:初始化 VGG:“xavier”,ResNet101:Gaussian。batch-size=32,初始学习率 0.001
  • 推理:ARM 滤掉简单背景锚框,ODM 输出 top-400,经过 NMS-0.45 输出最终 top-200。

实验

  • 检测准确率上:VGG320 和 VGG512 均超过 80% mAP。
  • 速度上:在 Titan X, CUDA 8.0 和 cuDNN v6 下,分别达到 24.8ms 和 24.1 ms。

从实验结果可以看出,确实实现了论文推崇的又快又好的效果,特别是两阶段回归,提升效果显著。

检测 200 FPS

论文

"Object detection at 200 Frames Per Second", Arxiv 2018, paper

摘要

在本文中,我们提出了一种高效和快速的物体检测器,可每秒妙处理数百帧。为了实现这一目标,我们研究了对象检测框架的三个主要方面:网络架构、损失函数和训练数据(标注和未标注)。为了获得紧凑的网络架构,我们基于最近的工作引入了各种改进,以开发一种计算轻量并且达到合理性能的架构。为了进一步提高性能,在保持网络复杂性的同时,我们使用了蒸馏损失函数。蒸馏损失的引入,使我们能将更准确的教师网络的知识转移到提出的轻量级学生网络。我们为一级检测器流程提出了各种创新技术:目标尺度蒸馏损失(objectness scaled distillation loss),特征图 NMS 和用于检测的统一的单蒸馏损失函数。最后,在蒸馏损失的基础上,我们探索利用未标记数据对检测性能的提升程度。我们使用教师网络的软标签对未标记的数据进行训练。我们的最终网络比基于 VGG 的物体检测网络的参数少 10 倍,并且它达到了 200 FPS 以上的检测速度,此外我们所提出的改进将基线模型在 Pascal 数据集上的检测精度提高了 14 mAP。

F-Yolo 架构

作者针对大规模工业部署对速度和内存的严格要求,开发了一种低内存的高效快速(一卡多流)的物体检测器。


图 1 提出检测器与 SSD 和 Yolo-v2 在速度和性能上的对比

现有的快速模型如 SSD 和 YoloV2 只能达到 20-60 FPS,为了开发更快速的检测请,选择中等精度但真正高效的检测器 Tiny-Yolo[1] (Yolov2 的加速版) 作为基线模型。


图 2 F-Yolo 基础架构

  1. 特征融合 (dense feature map with stacking):融合时,不同于以往使用 max-pooling 缩小分辨率,而是类似于 Yolo-v2 中的 passthrough layer, 使用 resize 将大分辨率的特征缩小,然后与小分辨率特征做 concate。如图 2 中最右边的箭头表示用 conv(channels=4,kernel=1)\(104*104*64\) 的特征压缩到 \(104*104*4\),然后做 resize 调整布局为 \(13*13*256\)。原因是 max-pooling 容易造成空间信息丢失,使用 resize 可以将高分辨率特征图上的近邻特征堆叠到不同通道中。注意堆叠时的数据布局为 (h,w,c)
  2. 又深又窄的网络 (deep but narrow):1)更窄:在 Tiny-Yolo 中,最后的几个卷积层都比较宽(通道数 1024),因为引入了特征融合也就不需要这么多卷积核了。因此将这些层的卷积核数量做削减,比如:最后一个卷积层是 125 通道,最后一个融合卷积层是 512 通道(倒数第五层,该层是基线模型的最后一层)。2)更深:这么样才能在增加网络深度的同时,又避免引入过多的计算量? 作者采用叠加 \(1*1\) 卷积的方式,因为 \(1*1\) 卷积的计算量远小于 \(3*3\) 卷积。如图 2 的最后三层。

基于这些简单的概念,改进后的轻量级框架的结果比 Tiny-Yolo 基线模型提高了 5 mAP (在 Pascal 数据集上从 54.2 mAP 提升到 59.4 mAP),并且快了 20%。将该网络命名为 F-Yolo

网络蒸馏

网络蒸馏 (network distillation) 是用一个复杂网络 (teacher network) 学到的知识辅助训练一个简单网络 (student network),知识以 soft label 对形式迁移。网络蒸馏是模型加速压缩领域的一个重要分支,这里引入的目的是在不增加计算量的前提下进一步提升检测性能。


图 3 蒸馏方法的整体框架

在介绍蒸馏方法,我们先简单回顾下 Yolo-v2 的输出和损失函数。Yolo-v2 是一个单段检测器,在最后一个卷积层同时分类和回归,每个神经元预测 N 个锚框,组成最后层的 \(N \times (K+5)\) 个通道。对于每个锚框,网络会预测:边框坐标,物体概率 (objectness value) 和类别概率。所以 Yolo-v2 的整体优化目标可以分为三部分:回归损失,物性概率和分类损失,表示为:


图 4 Yolo-v2 的输出格式

  1. Objectness scaled distillation:现有的检测器蒸馏方法采用教师网络的最后一个卷积层来迁移知识,这适用于 RCNN 系列的两段检测器。对于 Yolo-v2 这样的单段检测器,没有 RPN 的提前过滤机制,最后卷积中密集的负锚框预测会严重影响对边框回归的训练。因此作者采用基于物体概率过滤的蒸馏方法:对于物体概率较低的锚框只迁移物体概率,对于物体概率较高的锚框全部迁移。 对于有标签数据,接下来的关键是如何有效结合教师网络的蒸馏损失和标签的检测损失。
    物体概率损失:
    其中 \(\lambda_D\) 是蒸馏损失的平衡系数,文中默认为 1。
    类别概率损失:
    边框回归损失:
    区别在于蒸馏损失部分多了个因子 \(\hat{o_i}^T\),这是教师网络的预测的物体概率,当物体概率较低时,蒸馏损失就几乎不起作用了。
  2. Feature Map-NMS:NMS 是物体检测的必要的后处理过程,用于出掉重复的检测框,传统的 NMS 算法和网络结构的训练时相互独立的。如果不做 NMS,直接将 教师网络的输出迁移到学生网络,会导致蒸馏损失因相邻区域的重复迁移而非常大,容易对 anchor 覆盖率大的物体过拟合。因此采用 FM-NMS 对特征图上重复的蒸馏目标进行合并。假设几个相邻的 grid cell 所预测的 bbox 的类别一样,那么这些 bbox 极有可能预测的是用一个 object。基于这种假设,FM-NMS 对每个 \(3\times 3\) 的 grid cell 中预测类别相同的 bbox 的物体概率进行排序,只对排名第一的 bbox 进行知识迁移。

    图 5 教师网络输出的相邻预测间的协同过滤(重复)
  3. 无标签数据:突破标签数据的受限性,在使用无标签数据的时候,只使用教师网络的 soft label 来训练学生网络。具体而言,但样本标签不存在是,直接将标签的检测损失置为零,这样可以在有标签和无标签的混合数据上无缝训练学生模型。

实现细节

  • 深度学习库: Darknet
  • backbone: 使用 ImageNet 上预训练的 Tiny-Darknet 作为 baseline.
  • 数据扩充:随机光学失真,随机切割,缩放到 \(2024^2\),水平镜像,保留中心在内部的人脸。且特别过滤掉长或宽小于 20px 的人脸。
  • 锚框匹配:1. 对于每个标注框,匹配最大的锚框;2. 匹配大于阈值 0.5 的锚框。
  • 损失函数:softmax and smooth-L1 loss
  • 难负例挖掘:对于负锚框排序并取损失较大者,保证正负比例为 1:3。
  • 优化:初始化 “xaiver”,batch-size=32,学习率 \(10^-3\)
  • 推理:过滤简单背景锚框 0.05,输出 top-400,经过 NMS-0.3,输出最终 top-200。

实验

  • 实验环境:Caffe,GPU: Titan X (Pascal) with cuDNN v5.1 | CPU: E5-2660v3 (2.6GHz)

表 1 特征融合:不同层和不同方式 (max-pooling vs. stacking)

表 2 不同的结构改进对检测速度的影响

表 3 在 VOC-07 上比较不同蒸馏方法的效果

表 4 提出检测器在 VOC-07 上的性能

表 5 在 VOC-07 上对比无标签数据蒸馏的作用

表 6 与各种二段蒸馏检测器在速度、性能和参数量上的对比

快速人脸检测

FaceBoxes

论文

"FaceBoxes: A CPU Real-time Face Detector with High Accuracy", IJCB 2017, paper

摘要

虽然在人脸检测方面已经取得了巨大进步,但如何在 CPU 的受限计算资源下实现精准的实时人脸检测,依然是一个开放性的挑战难题。为了应对这一挑战,我们提出了一种新的人脸检测器:FaceBoxes,在速度和准确性方面都表现出色。具体来说,我们的方法具有轻量级但功能强大的网络结构,包括快速消化卷积层(Rapidly Digested Convolutional Layers, RDCL)和多尺度卷积层(Multiple Scale Convolutional Layers, MSCL)。RDCL旨在使 FaceBoxes 能够在 CPU 上实现实时检测速度。MSCL 旨在丰富感受野并散布各层上的锚框,以处理各种尺度的人脸。此外,我们提出了一种新的锚点致密化策略,使不同类型的锚点在图像上具有相同的密度,从而显着提高了小脸部的召回率。因此,对于 VGA 分辨率的图片,探测器在单个 CPU 核心上能以 20 FPS 运行,在 GPU 上能以 125 FPS 运行。而且,FaceBoxes 的检查速度不随人脸个数变化。我们全面评估了这种方法,并在多个人脸检测基准数据集(包括 AFW, PASCAL face 和 FDDB)上达到了最先进的检测性能。

回顾

MTCNN[1] 等级联检测器方法三大弊端:

  1. 速度与人脸数量相关,因此人脸多的时候速度慢。
  2. 每个检测器单独训练的,流程复杂且是次优的。
  3. 并不能达到完全的 CPU 实时,14 FPS。
网络框架


图 1 FaceBoxes 框架和锚框设置

  1. 快速消化卷积层 RDCL:1) 快速削减输入分辨率 32 倍 (4,2,2,2);2) 选择合适的卷积核:conv(7,5), pool(3);3) 削减输出通道,使用 C.ReLU[2] 激活。C.ReLU 的动机来自于对 CNN 的可视化,即较低层的特征(正反)成对出现。因此 C.ReLU 通过在应用 ReLU 之前简单地并联正负输出使通道数加倍,从而在精度下降可忽略的情况下,显著提升速度。

    图 2 (a) C.ReLU 模块 (b) Inception 模块
  2. 多尺度卷积层 MSCL:1) 多尺度检测特征 2) 多感受野:Inception
  3. 锚框致密化:定义锚框平铺密度 \(A_{density}=A_{scale}/A_{interval}\),根据图 1 中锚框设置,相应的平铺密度是 (1,2,4,4,4),因尺存在密度不均匀问题。对于锚框太稀疏的小尺度,采用在原始锚框中心附近平铺 \(n^2\) 个锚框使其致密化。

    图 3 锚框致密化
训练和推理
  • 数据扩充:随机光学失真,随机切割,缩放到 \(1024^2\),水平镜像,保留中心在内部,且长宽均大于 20 的人脸。
  • 锚框匹配:1. 对于每个标注框,匹配最大的锚框;2. 匹配大于阈值 0.35 的锚框。
  • 损失函数:softmax,smooth-L1 loss。
  • 难负例挖掘:对于负锚框排序并取损失较大者,保证正负比例为 1:3。
  • 其他细节:初始化 xaiver,优化 SGD-M,batch-size=32,初始学习率 \(10^-3\),实现平台 Caffe。
  • 推理:对于 VGA 分辨率图片有 8525 个方框。首先使用 0.05 过滤多数负样本,然后使用 NMS-0.3,输出 top-200。
实验

表 1 消融实验,FDDB 上结果和推理速度:MSCL 使用 conv3x3 代替 Inception,RDCL 使用 ReLU 代替 C.ReLU

表 2 性能速度对比

DCFPN

论文

"Detecting Face with Densely Connected Face Proposal Network", CCBR 2017, paper

摘要

对于人脸检测来说,追求准确和追求效率是互相冲突的,因此追求准确的模型往往在检测效率上做出让步。为了解决这种冲突,我们的核心思想是缩小输入图像并专注于检测小脸。具体来说,我们提出了一种新的人脸检测器:DCFPN (Densely Connected Face Proposal Network),在 CPU 上具有高精度和实时性。一方面,我们巧妙地设计了一个轻量但强大的全卷积网络,兼顾了准确和效率;另一方面,我们使用密集锚框策略并提出了 fair L1 loss 来很好地处理小脸。因此,对于 VGA 分辨率的图片,我们的方法可以在单个 2.6 GHz CPU 核心上达到 30 FPS,在 GPU 上达到 250 FPS。我们在 AFW,PASCAL face 和 FDDB 数据集上实现了最先进的性能。

网络框架


图 1 DCFPN 框架

  1. 轻量但有效的框架:
    • 快速消化卷积层 RDCL:通过快速的又窄(通道:二分类不需要那么多特征)又大(感受野:减缓空间信息损失)的卷积核,将分辨率快速缩减到 1/16。
    • 密集连接卷积层 DCCL:使用两个 Inception 结构融合三层卷积特征,起到丰富感受野尺度和有效组织特征的不同抽象层次。
    • 在最后一个卷积层上关联五个尺寸的默认锚框,以实现多尺度检测。
      表 1 最后层包含的感受野和默认锚框尺寸
  2. 密集锚框策略:默认的五个锚框尺寸都关联在最后的卷积层上,共享相同的锚框间隔,16px。小尺寸锚框的平铺太稀疏,会导致小脸检测的召回率太低。因此将尺寸为 16 的锚框密集到间隔为 4px,尺寸为 32 的锚框密集到间隔为 8px,最终对每个中心,构成 23 个默认锚框:1616 + 432 + 164 + 1128 + 1256

    图 2 (1) 居中的 5 个不同尺度的锚框,(b) \(16^2\) 密集化,(c) \(32^2\) 密集化
  3. Fair L1 Loss:检测函数使用 Softmax 分类损失和 Fair L1 回归损失,直接回归预测框的相对中心和长宽: 使用尺度归一化:
    其中:
    其实这只不过是普通使用方法下的 L1 loss,谈不上创新。
训练和推理
  • 数据扩充:随机光学失真,随机切割,缩放到 \(512^2\),水平镜像,保留中心在内部的人脸。
  • 锚框匹配:1. 对于每个标注框,匹配最大的锚框;2. 匹配大于阈值 0.5 的锚框。
  • 难负例挖掘:对于负锚框排序并取损失较大者,保证 50%。
  • 其他细节:高斯初始化,优化 SGD-M,batch-size=48,初始学习率 0.1,实现平台 Caffe。
实验

表 1 消融实验 FDDB:DCCL 使用 4*conv3x3 代替,Fair L1 使用 Smooth L1 代替

表 2 性能速度对比,VGA 分辨率,最小人脸 40px

人脸:SRN

论文

"Selective Refinement Network for High Performance Face Detection", AAAI 2019, paper

摘要

高性能人脸检测仍然是一个非常具有挑战性的问题,尤其是当存在许多小脸时。本文提出了一种新颖的单段人脸检测器:选择性精细网络(Selective Refinement Network, SRN),它将新型的两段分类和回归操作选择性地引入基于锚框的人脸检测器中,以减少误报并同时提高定位精度。特别是,SRN 由两个模块组成:选择性两步分类(STC)模块和选择性两步回归(STR)模块。 STC 旨在从低检测层过滤掉大多数简单的负锚,以减少后续分类器的空间,而 STR 设计用于从高检测层粗略调整锚框的位置和大小,以提供更好的初始化随后的回归量。此外,我们设计了一个感受野增强(RFE)块,以提供更多样化的感受野,这有助于更好地捕捉一些极端姿势的人脸。因此,所提出的SRN检测器在所有广泛使用的面部检测基准上实现了最先进的性能,包括 AFW,PASCAL 人脸,FDDB 和 WIDER FACE 数据集。我们将开放源码以促进对面部检测问题的进一步研究。

回顾

人脸检测器改进空间:

  1. 召回效率:高召回率下减少误报数量,分类要准,减少 False Positive。
  2. 定位精度:因 Wider Face 采用 MSCOCO 的评估标准,要提高边框位置的准确性。


图 1 (a) STC 和 STR 分别增加正/负样本比例 38 和 3 倍;(b) SRN 增加大概 20% 的召回率;
(c) STR 提供更好的回归初始框;(d) SRN 相对于 RetinaNet 定位更准

网络框架

SRN 整体上是基于 RefineDet[1] 和 RetinaNet[2] 结合的改进。


图 2 SRN 的网络结构,包括 STC,STR,RFM

  1. STC:Selective Two-Step Classification,由 RefineDet[1] 引入,通过级联的两步分类机制,在第一段采用预设阈值 \(\theta=0.99\) 提前清楚简单背景锚框。与 RefineDet 不同的是,SRN 只在低三段使用了两步分类,因为低三层产生了绝大多数(88.9%)的锚框和更严重的类别不均衡,同时面临着特征不充分的问题,需要使用两步分类来减少搜索空间、缓解类别不均衡、二段精细分类。损失函数:
    表 1 两步分类作用于不同金字塔层次上的效果
  2. STR:Selective Two-Step Regression,单步回归在 MSCOCO 类型的评估标准上是不够准的,最新研究 RefineDet[1] 和 Cascade R-CNN[3] 均采用级联结构来提升定位精度。但是盲目地向特定任务(即人脸检测)添加多步回归通常会适得其反。实验结果(表 2)表明 STR 只对高三层有积极意义。这背后的原因来自于两方面:1)低层锚框特征粗糙难以进行两步回归;2)在训练阶段,如果过渡关注低层的困难的回归任务,导致更大的回归损失阻碍了更重要的分类任务。损失函数:
    表 2 两步回归作用于不同金字塔层次上的效果
  3. 感受野增强模块:Receptive Field Enhancement,检测器特征提取模块通常都是方形感受野,感受野的单一性影响对具有不同长宽比的物体的检测,例如 Wider Face 训练集中有相当一部分脸部长宽比大于 2 或小于 0.5。为了解决网络感受野与面部长宽比之间的不匹配问题,使用感受野增强模块(RFE)替代 RetinaNet[2] 中的 class subnet 和 box subnet,以增加感受野的多样化。

    图 2 RFE 模块结构

训练和推理

  • 数据扩充:类似于 RefineDet[1],随机光学失真,随机扩展、切割和镜像。
  • 主干网络:ResNet-50[4] 加上 6 个特征金字塔结构作为主干,旁路的自顶向下类似于 FPN[5]
  • 专用模块:STC 应用于低三层,STR 应用于高三层,RFE 代替 class/box subnet。
  • 锚框设置:尺度=步长\(\times(2,2\sqrt{2})\), 高宽比=1.25, 覆盖尺度范围 8-362 像素。
  • 锚框匹配:\(\geq \theta_p\) 为正,\(\lt \theta_n\) 为负,中间忽略;第一段 \(\{0.3,0.7\}\),第二段 \(\{0.4,0.5\}\)
  • 难负例挖掘:使用 Focal Loss[2],因此省略。
  • 损失函数:Focal Loss[2] + Smooth-L1 Loss
  • 优化:初始化 “xavier”,batch-size=32,初始学习率 0.001
  • 推理:STC 滤掉简单背景锚框 \(\theta=0.99\),STR 输出 top-2000,经过 NMS-0.5 输出最终 top-750。

实验

表 3 消融实验,三种专用模块的作用

表 4 STC:不同召回率下的 False Positive 个数

表 5 STR:在 Wider Face Hard set 上不同 IoU 阈值下的 AP

人脸:DSFD

论文

"DSFD: Dual Shot Face Detector", Arxiv 2018, paper

摘要

卷积神经网络(CNN)最近在人脸检测方面取得了巨大成功。然而,由于尺度,姿势,遮挡,表情,外观和照明的高度可变性,人脸检测对当前的检测方法而言依然是非常具有挑战性的问题。在本文中,我们提出了一种新的人脸检测网络:DFSD,在 SSD 的基础上引入特征增强模块(FEM),用于特征传递以将单筒检测器扩展到双筒检测器。特别是采用两组锚框计算的锚框提升损失(Progressive Anchor Loss,PAL)来有效促进该特征。另外,我们通过整合新颖的数据增强技术和锚框设计策略,提出了一种改进的锚点匹配方法(IAM),为回归问题提供更好的初始化。在主流基准测试集上进行广泛实验:WIDER FACE(Easy:0.966,Medium:0.957,Hard:0.904)和 FDDB(discontinuous:0.991,continuous:0.862)证明了 DSFD 优于最先进的人脸检测器。

回顾

人脸检测器依旧存在的问题:

  1. 特征学习:特征提取部分对于人脸检测器至关重要。但广泛使用的 FPN 只是聚合了上下层的层次特征图以获得丰富的特征,却没有考虑当前层信息,且忽略了锚框间的上下文关系。
  2. 损失设计:常规损失 Softmax Loss 和 Smooth-L1 loss,以及为解决类别不均衡问题的 Focal Loss 和适用于特征金字塔的 Hierarchical loss[1],都未考虑提升不同特征层的学习能力。
  3. 锚框匹配:检测器在不同层特征上定义了不同尺度和长宽比的预设锚框,而且采用锚框补偿的增加小脸正锚框数。但连续的人脸尺度和离散的锚框尺度导致正负样本比例的巨大差异。

论文主要贡献:

  • FEM:一种新颖的特征增强模块,能够利用不同层次的信息,从而获得更多的可辨性和鲁棒性特征。
  • PAL:通过一系列较小的锚框将辅助监督进入到前面的层,从而有效促进低层特征。
  • 锚框匹配:改进的锚框匹配策略,尽可能低匹配锚框和标注脸,为回归器提供更好的初始化。
  • 最佳性能:在流行的主流基准测试集 FDDB 和 WIDER FACE 上均取得了最好的成绩。

网络框架

图 1 DSFD 框架在 VGG16 架构上使用特征增强模块 (b),从原始特征 (a) 生成增强特征 (c),并连接不同的损失。

如图 1 所示,DSFD 使用和 PyramidBox[2] 和 S3FD[3] 一样的 VGG16 主干,延伸出原始的六个特征检测层,并通过特征增强模块转化出六个相同尺寸的增强特征检测层。不同的是,使用 FEM 中的感受野增强和新的锚框设计策略后,步长、锚框和感受野不需要满足等比原则。

  1. 特征增强模块:Feature Enhance Module,上层特征放大后与下层特征融合(按位乘?),然后接感受野增强:三路空洞卷积。

    图 2 特征增强模块
  2. 锚框提升损失:Progressive Anchor Loss,双筒均使用多目标损失 ( Softmax 和 Smooth-L1), 区别是第一筒相对于第二筒使用较小的锚框。
    第一筒损失:
    双筒损失:
    表 1 双筒不同的锚框设置
  3. 改进锚框匹配: 锚框设计:长宽比 1.5:1 (基于统计),第一筒同级锚框尺寸是第二筒的一半。 数据采样:2/5 采用 PyramidBox-style:data-anchor-sampling,3/5 采用 SSD-style。 匹配阈值:IoU=0.4 预测配置:检测输出 top-5000,经过 NMS-0.3 输出最终 top-750。

    图 3 采样人脸的尺度分布,左原始 SSD-style,右综合版,可见增加了锚框尺寸附近的样本

实验

总体上,虽然在 Wider Face 上获得了最好的结果,但是提出的创新过于粗糙,不足以支撑论文的论点,性能提升的主要贡献在于使用了更加复杂的主网络 Res152。可能最大的贡献在于,使我们更加坚定了 大力出奇迹

表 2 特征增强模块 FEM 的提升

感觉没有惊喜也不值得。

表 3 双筒 PAL 的提升

感觉没有惊喜,相对比 SRN。

表 4 改进锚框匹配 IAM 的提升

感觉没有惊喜,不算创新。

表 5 网络框架的提升

在 ImageNet 上分类越高的,不一定在 Wider Face 上越好。

Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

深度学习系统

深度学习部署

  • TVM
    一个支持多种硬件后端优化的端到端的深度学习编译器

目录

TVM 编译器

网络模块

激活函数

  • Concatenated ReLU
    "Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units"
    推荐,从低层卷积滤波器的“成对”现象出发,提出正负相激活,减少通道提高速度。

目录

激活:CReLU

论文

"Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units", ICML 2016, paper

摘要

最近,卷积神经网路 (CNN) 已被用作解决机器学习和计算机视觉等许多问题的强大工具。本文旨在提供对卷积神经网络特性的深入理解,以及提升许多 CNN 架构性能的通用方法。具体而言,我们首先考察了现有的 CNN 模型,并观察到一个有趣的特性:较低层的卷积滤波器成对出现(即具有相反的滤波器)。收到这种观察的启发,我们提出了一种新颖、简单而有效的激活方案,称为级联 ReLU (CReLU),并在理论上分析器在 CNN 中的重构特性。我们将 CReLU 集成到几个最先进的 CNN 架构中,减少了可训练参数,并在 CIFAR-10/100 和 ImageNet 数据集上得到了识别性能提升。我们的结果表明,在更好地理解 CNN 的情况下,通过简单的改进,可以获得显著的性能提升。

观察与分析


图 1 AlexNet 第一层卷积滤波器可视化

通过对 AlexNet 第一层归一化的滤波器进行可视化,发现低层滤波器呈现“成对”的有趣现象,即对任意滤波器,总存在一个几乎和它相反的滤波器。更确切地说,加入某个滤波器的单位长度向量为 \(\phi_i\),定义它的成对(相反)滤波器为 \(\overline{\phi_i}=\arg\min_{\phi_j} \left \langle \phi_i, \phi_j \right \rangle\),同时定义其余弦相似度 \(\mu_i^\phi=\left \langle \phi_i, \overline{\phi_i} \right \rangle\)


图 2 AlexNet 训练的和随机的卷积滤波器的余弦直方图分布

为了系统地研究更高层中的成对现象,对 conv1-conv5 绘制了如图 2 余弦直方图。其中蓝色的为训练后的卷积滤波器的余弦直方图,红色的是随机高斯初始化的余弦直方图。可以看出,随机初始化呈现出尖锐的以 0 为中心的分布,而经过训练的卷积滤波器呈现以负数为中心,且大幅度偏向于负数区域的现象,说明“成对”现象在较低层卷积滤波器中普遍存在。随着卷积层数的升高,这种分布偏向逐渐减弱,直到在 conv5 中几乎消失,说明“成对”现象在较高层卷积滤波器中逐渐减少。

从这种观察中,我们得到一种假设:尽管 ReLU 消除了线性响应的负数部分,但是 CNN 的前几层试图通过学习成对(负相关)的滤波器来同时捕获正相和负相的信息。这意味着我们可以利用这种成对先验,设计一种同时允许正负激活的方法,从而减轻由 ReLU 非线性引起的在卷积滤波器中的冗余问题,更有效地利用可训练参数。为此,我们提出了一种新的激活方案,CReLU (Concatenated ReLU)。

Caffe prototxt for CReLU and Keras AntiRectifier[1] 模块可视化

实验

对比一半通道的 CReLU 和普通 ReLU 及 AVR (绝对值 ReLU)

表 1 CIFAR-10/100 对比实验

表 2 ImageNet 对比实验

引用

[1]: Keras AntiRectifier

常用资源

记录一些常用的资源网站