《Adapting Object Detectors via Selective Cross-Domain Alignment》笔记

Introduction

深度卷积网络模型的性能非常依赖数据集。如果数据集的数据分布与现实生活的数据分布一致,深度模型能够表现出优异的性能。但是,现有的基础数据集只覆盖了有限范围内的场景。在现实世界的模型部署中,环境条件的变化,比如成像传感器、天气和光照的变化,会产生明显的域偏移,数据分布和数据集的数据分布不一致,导致了模型的表现性能下降。

如下图所示,用城市风景数据集训练的检测模型在城市风景图像上能够准确地检测出车和行人,但是在雾天的城市风景图像上却漏检了3辆车。

《Adapting Object Detectors via Selective Cross-Domain Alignment》笔记

针对分类模型,已经研究了许多域自适应的网络模型,避免了图像域偏移导致模型分类性能下降。令模型的训练数据集为原域,域偏移的数据集为目标域。常用的方法是把原域转换成目标域,或者把目标域和原域对齐,使得分类模型适应目标域和原域。这些方法不适用于目标检测模型,因为分类模型的关注点是整个图片,而目标检测模型关注的是图像的局部对象。

作者考虑的问题包括两个域,标注好的训练数据集可用的原域和只有图像的目标域。作者的目标是利用两个域的数据训练一个在目标域泛化性能好的检测器。具体地,作者希望得到一个域不变的特征表征,在两个域都工作地很好。

作者提出了一个基于区域的选择自适应性框架。基本思路是引入一个额外的模型去从特征中重构出图像块,接着在原域和目标域中对齐重构的图像块。该框架包括两个组件,区域挖掘组件(region mining)和区域级别对齐组件(region-level alignment)。区域挖掘组件针对的问题是看哪里,通过对object proposals分组来选择重要的区域。区域级别对齐组件针对的问题是怎么对齐,通过对抗训练对齐从选择的区域的特征中重构的图像块。

Method

作者提出的选择自适应性框架如下图所示
《Adapting Object Detectors via Selective Cross-Domain Alignment》笔记

Region Mining

区域挖掘组件首先通过分组来识别覆盖感兴趣物体对象的重要区域,接着通过重新分配RoI特征来导出这些区域的表征。

Grouping

作者希望得到大小固定的区域,以便后续操作,但是RPN的proposals有任意大小。而且RPN的proposals有噪声。因为这些问题,作者是这样做的。RPN输出了NregN_{reg}个region proposals,格式是{cx,cy,w,h}\{c_x, c_y, w, h\},其中cxc_xcyc_y是中心点。作者利用k-Means聚类方法对这些中心点进行聚类,把这些proposals分成K组,每组的中心作为选择的区域的中心。因为预先设定好区域大小,所以选择的区域已经固定了。分组过程的示意图如下

《Adapting Object Detectors via Selective Cross-Domain Alignment》笔记

Feature Reassignment

确定好重要的区域后,计算每个区域的特征。在第k个region proposals的分组中,有mkm_k个区域,每个区域的RoI特征的维度是dd,因此我们有特征矩阵ΘkRmk×d\Theta_k \in \mathbb{R}^{m_k \times d}。因为每个分组的区域个数不固定,而我们需要固定数量的特征,因为作者预先定义好数字m,当mkm_k大于m时,保留前m个特征,当mkm_k小于m时,复制已有的特征。这样,重要区域的特征为Θ^kRm×d\hat{\Theta}_k \in \mathbb{R}^{m \times d}

Adjusted Region-level Alignment

区域级别对齐组件包括两部分,分别是区域级别对抗对齐,通过对抗训练对齐从选择的区域的特征中重构的图像块;权重评估器,实现鲁棒性的自适应。

Region-Level Adversarial Alignment

首先用两个生成器GsG_sGtG_t分别在原域和目标域从重要区域的特征Θ^\hat{\Theta}中重构出图像块。接着用两个判别器DsD_sDtD_t分别在原域和目标域中判断真样本和假样本。这两类生成器和判别器相关的损失Ladv,Ds,Ladv,Dt,Ladv,Gs,Ladv,GtL_{adv,D_s},L_{adv,D_t},L_{adv,G_s},L_{adv,G_t}是域内损失。

还有个交叉域损失,把fake source输入到判别器DtD_t中,要求识别成real target,该损失写成Ladv,FsL^s_{adv,F};把fake target输入到判别器DsD_s中,要求识别成real source,该损失写成Ladv,FsL^s_{adv,F}。个人认为,这个交叉域损失的目的是对齐原域特征和目标域特征,使得模型提取到的特征没有域偏差。

Weighting Estimator

因为目标域没有ground truth,RPN在目标图像上的region proposals不能覆盖到感兴趣的物体,特别是在训练早期。于是,作者重新对原域的gt bbox重新排序,这可以在目标域中为物体定位提供有用的参考。作者引入一个评估器,根据region proposal与原域的匹配程度来向目标域的区域赋予权重。

对于一个区域分组,评估器的输出经过sigmoid后得到Dw(Θ^t)RK×mD_w (\hat{\Theta}_t) \in \mathbb{R}^{K \times m},然后取平均WtRKW_t \in \mathbb{R}^K,得到每个选择的重要区域的权重,如图3的c,每个红框中的绿色数字表示该区域的权重。

加了权重后的损失是
Wt×Ladv(F,G,D)=Ladv,Ds+WtLadv,Dt+Ladv,Gs+WtLadv,Gt+Ladv,Fs+Ladv,Ft W_t \times L_{adv}(F,G,D) = L_{adv,D_s} + W_t L_{adv,D_t} + L_{adv,G_s} + W_t L_{adv,G_t} + L^s_{adv,F} + L^t_{adv,F}

Network Optimization

网络优化的按照以下的过程进行优化

  • 更新判别器DsD_sDtD_t。损失函数是LD=Ladv,Ds+WtLadv,DtL_D = L_{adv,D_s}+W_t L_{adv,D_t}
  • 更新权重评估器DwD_w
  • 更新生成器GsG_sGtG_t。损失函数是LG=Ladv,Gs+WtLadv,GtL_G = L_{adv,G_s}+W_t L_{adv,G_t}
  • 更新检测器部分FF。损失函数是LF=Ldec,Fs+λ(Ladv,Fs+WtLadv,Ft)L_F = L^s_{dec,F}+\lambda (L^s_{adv,F} + W_t L^t_{adv,F})。其中Ldec,FsL^s_{dec,F}是正常的目标检测损失。看图2,检测器部分包括backbone,RPN和head part。

该框架的重要组成部分应该是交叉域损失了。交叉域损失让原域和目标域的区域特征分布不断靠拢,减少原域和目标域区域特征之间的间隔,从而使得训练出来的检测器在目标域中的泛化性能保持和在原域中的性能一致。

Experiments

这里只给在Cityscapes中训练的检测器在Foggy-Cityscapes的表现
《Adapting Object Detectors via Selective Cross-Domain Alignment》笔记