《SCDA:Adapting Object Detectors via Selective Cross-Domain Alignment》论文笔记

参考代码:SCDA

1. 概述

导读:在之前的Domain Adaption文章中主要是针对分类/分割场景任务,对于检测场景下的挖掘不够,这是由于分类/分割场景关注的是整个特征图范围上的表现,而检测却是具有局部性的,因而直接将分类/分割的域迁移方法引入是不合时宜的。对此文章按照监测网络的特性设计了一个检测网络下的domain adaption方案。首先寻找到特定的区域(也就是文中“where to look”,region mining的过程),得到这些区域之后便是对这些区域使用region align的方法进行特征对齐,所采用的方法也是基于GAN的(也就是文中的“how to align”,这部分与分割/分类中用的方法类似)。除此之外文章还设计了一个自适应的加权因子(通过weighting estimator实现),从而可以去调配region上的align,文章指出这样可以使得最后的结果更加鲁棒。文章的方法在normal-to-foggy(Cityscapes to Cityscapes-foggy)/synthetic-to-real(Sim10k to Cityscapes)/cross-camera (Kitti to Cityscapes)表现出了较好性能在mAp上提升了4%~6%。

由于现有的深度网络都是在已知的数据上学习,学习完成之后参数便固化,后期也没有自学习的pipe,因而对于在训练集中未统计到的数据本身鲁棒性不强,这就导致性能下降,如下图所示:
在这里插入图片描述
同样是街道场景,只是不同的天气情况就使得网络最后的结果差异较大。

2. 方法设计

2.1 整体pipline

文章的整体pipeline见下图所示:
在这里插入图片描述
pipeline的左端是Faster RCNN的结构,中间和右边部分就是这篇文章的核心了,主要包含了两个部分:

  • 1)where to look(region mining):这部分解决的是对于区域的选取与归一化,文中将RPN的结果进行 K K K(聚类中心的数目)聚类,从而得到每个聚类上的特征表达 Θ \Theta Θ
  • 2)how to align(region align):这部分解决的是region的对齐过程,对于source和target的部分分别有一对生成器和判别器用于拉近两个域的分布。此外还通过weighting estimator去调配region上的align过程,使得结果更加鲁棒;

2.2 Region Mining

这篇文章使用的base model是Faster RCNN,其region产生的来源为RPN网络部分,但是RPN网络由于其运行原理,其产生的结果具有如下的问题:

  • 1)由于有anchor的存在会生成不同大小的proposal,对于这个可以采集RoI Pooling之后的结果进行规避;
  • 2)RPN的结果并不是最后的输出,其内部proposal的分布自然充满了噪声,对此可以采用聚类的方式排除一些无关的影响,但是却多引入了一些需要搜索的超参数;

对于target域中RPN结果的处理见下图的a/b图所示:
在这里插入图片描述
在上图中将RPN的结果进行了 K = 4 K=4 K=4的聚类。在得到聚类结果之后就需要将对应区域的特征进行对齐(文中为featrue reassignment),得到整个的特征为 Θ \Theta Θ,则其中一个聚类中心的特征为 Θ k ∈ R m k ∗ d \Theta_k\in R^{m_k*d} ΘkRmkd,其中 m k m_k mk是聚类中proposal的数量(为一个超参数),是在聚类的结果中选择对应数量的proposal(排序之后的top-k),若是数量不满足通过copy的方式解决数量不足的问题。其中 d d d是RoI Pooling之后得到的特征维度(进行展开),可以对应参考图2的中间部分。

下表展示了文章中group时使用到的一些参数设置:
在这里插入图片描述

2.3 Region Alignment

region-level adversarial alignment:
source和target域中经过feature reassignment之后得到特征为 Θ ^ s , Θ ^ t \hat{\Theta}_s,\hat{\Theta}_t Θ^s,Θ^t,首先在每个域中都有生成器和判别器组成的对抗网络,其损失的形式描述为:
L a d v ( Θ ^ , P ; G , D ) = E [ l o g D ( P ) ] + E [ l o g ( 1 − D ( G ( Θ ) ) ) ] L_{adv}(\hat{\Theta},P;G,D)=E[logD(P)]+E[log(1-D(G(\Theta)))] Ladv(Θ^,P;G,D)=E[logD(P)]+E[log(1D(G(Θ)))]
其中, P P P是对应聚类中心上真实图片区域。在source和target域中使用 D s , S t D_s,S_t Ds,St L a d v , D s , L a d v , D t L_{adv,D_s},L_{adv,D_t} Ladv,Ds,Ladv,Dt用以将真判定为真或假判定为假,使用 G s , G t G_s,G_t Gs,Gt L a d v , G s , L a d v , G t L_{adv,G_s},L_{adv,G_t} Ladv,Gs,Ladv,Gt用于将假判定为真,从而两个网络对抗训练。对于原本的检测网络 F F F,使用 L a d v , F s L_{adv,F}^s Ladv,Fs作为跨域的函数,将假的输入当作真,从而给适应的过程添加了约束,从而这部分的损失函数记为:
L a d v ( F , G , D ) = L a d v , D s + L a d v , D t + L a d v , G s + L a d v , G t + L a d v , F L_{adv}(F,G,D)=L_{adv,D_s}+L_{adv,D_t}+L_{adv,G_s}+L_{adv,G_t}+L_{adv,F} Ladv(F,G,D)=Ladv,Ds+Ladv,Dt+Ladv,Gs+Ladv,Gt+Ladv,F
Weighting Estimator:
由于target域中的数据时没有标注的,因而RPN的区域很难求cover住真实的感兴趣区域,尤其是在训练的早期,为了强调target中的region真实与region-level align时候的相关,文章对source域中的box进行了重排序,从而可以对target域中聚焦提供指引。基于此文章使用一个网络 D w D_w Dw衡量域source域中region的近似度,从而对target域中的region设置权值。对于这部分的训练文章将其抽象为交叉熵得形式:
L w ( Θ s ^ , Θ t ^ ; D w ) = E [ l o g ( D w ( Θ s ^ ) ) ] + E [ l o g ( 1 − D w ( Θ t ) ) ] L_w(\hat{\Theta_s},\hat{\Theta_t};D_w)=E[log(D_w(\hat{\Theta_s}))]+E[log(1-D_w(\Theta_t))] Lw(Θs^,Θt^;Dw)=E[log(Dw(Θs^))]+E[log(1Dw(Θt))]
其输出的维度是 R K ∗ m R^{K*m} RKm,代表是的target与source在region上的match程度,在最后一个维度取均值,便可以得到在region上的加权系数 W t ∈ R K W_t\in R^K WtRK,可以参考图3中的b/c图。则原来的损失函数可以描述为:
W t ⋅ L a d v ( F , G , D ) = L a d v , D s + W t L a d v , D t + L a d v , G s + W t L a d v , G t + W t L a d v , F t W_t\cdot L_{adv}(F,G,D)=L_{adv,D_s}+W_tL_{adv,D_t}+L_{adv,G_s}+W_tL_{adv,G_t}+W_tL_{adv,F}^t WtLadv(F,G,D)=Ladv,Ds+WtLadv,Dt+Ladv,Gs+WtLadv,Gt+WtLadv,Ft
则整个pipeline的损失函数描述为:
min ⁡ F , G , D w max ⁡ D L d e c ( F ) + W t ⋅ L a d v ( F , G , D ) + L w ( D w ) \min_{F,G,D_w}\max_{D}L_{dec}(F)+W_t\cdot L_{adv}(F,G,D)+L_w(D_w) F,G,DwminDmaxLdec(F)+WtLadv(F,G,D)+Lw(Dw)
其中损失的第一项是检测网络的分类和回归损失。

2.4 网络的优化过程

在上述的内容中讲到了整个pipline包含了较多的部分:检测模型 F F F,source域中的 G s , D s G_s,D_s Gs,Ds,target域中的 G t , D t G_t,D_t Gt,Dt,权重评估模块 D w D_w Dw。因而整体的优化过程被划分为4步:

  • 1)更新 D s , D t D_s,D_t Ds,Dt,这部分用于判断真实的region feature还是生成器生成的region feature,损失函数为 L D = L a d v , D s + W t L a d v , D t L_D=L_{adv,D_s}+W_tL_{adv,D_t} LD=Ladv,Ds+WtLadv,Dt
  • 2)更新 D w D_w Dw,度量target域中不同region的贡献度;
  • 3)更新 G s , G t G_s,G_t Gs,Gt,这部分用于生成符合真实region的生成器输出,损失函数为 L G = L a d v , G s + W t L a d v , G t L_G=L_{adv,G_s}+W_tL_{adv,G_t} LG=Ladv,Gs+WtLadv,Gt
  • 4)更新 F F F,这里完成的两部分工作,实现检测网络本身的任务,以及跨域的监督任务,损失函数为 L F = L d e c , F s + λ ( L a d v , F s + W t L a d v , F t ) L_F=L_{dec,F}^s+\lambda(L_{adv,F}^s+W_tL_{adv,F}^t) LF=Ldec,Fs+λ(Ladv,Fs+WtLadv,Ft);

不同分量对于网络性能的影响:
在这里插入图片描述

3. 实验结果

文中的超参数对性能的影响:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m_buddy/article/details/113823096