(一) Title
论文来源CVPR2022
代码地址:https://github.com/AmingWu/Single-DGOD
(二) Summary
研究背景:
- 在本文中考虑的问题是Single-Domain Generalized Object Detection(Single-DGOD),Single-DGOD解决的是to learn a detector that performs well on many unseen target domains with only one source domain for training,也就是得到能够在不同domain下表现较好的检测器。
- 对于Single-DGOD问题,提取包含了目标内在特点的domain-invariant representation(DIR)是相当重要的。
主要工作:
- 提出cyclic-disentangled self-distillation,首先设计了一个cyclic-disentangled module 能够cyclically从输入图像特征中提取DIR,并通过循环操作来提升disentangled能力。
- 将DIR看成教师模型,设计了一个self-distillation模块来进一步提升泛化能力
实验结果:
在5种天气场景下相比于baseline都取得了性能上的gain,尤其是对于night-sunny场景,本文方法超出了baseline 3%。
(三) Problem Statement
当前目标检测任务通常假设的是训练集和测试集在同一个domain下,当domain发生变换时,就会产生poor generalization,由于domain-shift impact。
如何解决domain-shift impact问题呢?主要的工作集中在domain adaption以及domain generalization两种方法上。
- domain adaption(域自适应):将数据分布从source domain对齐到target domain,不过存在的两个问题:1.在训练过程中需要同时source和target数据.2.并且当target domain是多个不同的数据分布的混合时,这种方法的表现就比较差。
- Domain Generation(DG):从多个source domain中learning,接着将模型推广到一个unseen的target domain当中去,性能比较依赖source domain的数量,造成了这种方法同样也比较受限制。
为了对上述domain-shift问题进行研究,本文提出了一个问题:Single-Domain Generalization Object Detection(Single DGOD)问题,也就是给定一个场景,使在其上训练的模型能够在unseen target domain上有不错的表现,现有的Domain Generation方法在这个问题上没法得到较好的表现。
当domain-related annotations不能用的时候,如何从输入的图像特征中提取到Domain-invariant Representations(DIR)这个问题目前仍然没有得到很好地解决。
(四) Method
首先,本文设计了一个cyclic-disentangled method来获取DIR,如下图所示:
在循环的前向过程,分别设计了一个Domain-invariant Representations(DIR)和一个Domain-Specific Representations(DSR)提取器,从骨干的feature map中提取DIR和DSR,然后循环的后向过程则是将提取的DIR和DSR作为提取器的输入,再次进行提取。
- 这里可以假设DIR和DSR的提取效果很好,即输入 F d i F_{di} Fdi(DIR)到DIR提取器后能够输出更多地Domain-invariant 表示,同理输入 F d s F_{ds} Fds(DSR)到DSR提取器之后能够输出更多地Domain-Specific信息。接着最关键的来了,利用一个contrastive loss来约束该假设
- 此外,这里还探究了self-distillaiton,将DIR作为teacher representations,蒸馏集中在DIR和骨干输出的中间特征上,从而使得骨干提取的特征中包含了更多地domain-invariant 信息
这里的设计思想真的是很巧妙啊~~~~
主要的设计包括两个:cyclic-disentanglement以及self-distillaiton
Cyclic Disentanglement
- 使用Faster R-CNN作为基础的检测模型,将骨干ResNet101分成三个部分( E 1 , E 2 , E 3 E_1,E_2,E_3 E1,E2,E3),用于进行self-distillation,经骨干输出的特征图为 F b ∈ R w × h × c F_b \in \mathbf{R}^{w \times h \times c} Fb∈Rw×h×c,然后两个Extractor: E D I R E_{DIR} EDIR和 E D S R E_{DSR} EDSR分别用来提取 F d i ∈ R w × h × c F_{d i} \in \mathbb{R}^{w \times h \times c} Fdi∈Rw×h×c(DIR)和 F d s ∈ R w × h × c F_{d s} \in \mathbb{R}^{w \times h \times c} Fds∈Rw×h×c(DSR),即:
F d i = E D I R ( F b ) , F d s = E D S R ( F b ) F_{d i}=E_{\mathrm{DIR}}\left(F_{b}\right), \quad F_{d s}=E_{\mathrm{DSR}}\left(F_{b}\right) Fdi=EDIR(Fb),Fds=EDSR(Fb)
这里的 E D I R E_{DIR} EDIR和 E D S R E_{DSR} EDSR是由多个卷积层组成,接着在 F d i F_{di} Fdi上提取一组object proposals O O O,然后通过ROIAlign得到输出 P ∈ R n × s × s × c P \in \mathbb{R}^{n \times s \times s \times c} P∈Rn×s×s×c,其中 n n n表示proposals的数量, s s s表示proposal的大小,然后在re-disentanglement过程中将 F d i F_{di} Fdi和 F d s F_{ds} Fds作为输入:
F i 2 i = E D I R ( F d i ) , F i 2 s = E D S R ( F d i ) F s 2 i = E D I R ( F d s ) , F s 2 s = E D S R ( F d s ) \begin{array}{l} F_{i 2 i}=E_{\mathrm{DIR}}\left(F_{d i}\right), \quad F_{i 2 s}=E_{\mathrm{DSR}}\left(F_{d i}\right) \\ F_{s 2 i}=E_{\mathrm{DIR}}\left(F_{d s}\right), \quad F_{s 2 s}=E_{\mathrm{DSR}}\left(F_{d s}\right) \end{array} Fi2i=EDIR(Fdi),Fi2s=EDSR(Fdi)Fs2i=EDIR(Fds),Fs2s=EDSR(Fds)
当再次经过Extractor之后,得到的 F i 2 i F_{i 2 i} Fi2i应该比 F d i F_{di} Fdi中包含更多的domain-invariant信息,并且 F d i F_{di} Fdi包含的domain-invariant信息要比 F i 2 s F_{i2s} Fi2s多,同理得到的 F s 2 s F_{s 2 s} Fs2s应该比 F d s F_{ds} Fds中包含更多的domain-specific信息,并且 F d s F_{ds} Fds包含的domain-specific信息要比 F s 2 i F_{s2i} Fs2i。- 为此,本文定义了global- 以及 instance-level对比损失来约束两个Extractor:
其中global-level的对比损失为:
L g c = − ( log exp ( sim ( F d i , F i 2 i ) / τ ) ∑ j = 0 1 exp ( sim ( F d i , G [ j ] ) / τ ) + log exp ( sim ( F d s , F s 2 s ) / τ ) ∑ j = 0 1 exp ( sim ( F d s , D [ j ] ) / τ ) ) \begin{aligned} \mathcal{L}_{g c}=&-\left(\log \frac{\exp \left(\operatorname{sim}\left(F_{d i}, F_{i 2 i}\right) / \tau\right)}{\sum_{j=0}^{1} \exp \left(\operatorname{sim}\left(F_{d i}, G[j]\right) / \tau\right)}\right.\\ &\left.+\log \frac{\exp \left(\operatorname{sim}\left(F_{d s}, F_{s 2 s}\right) / \tau\right)}{\sum_{j=0}^{1} \exp \left(\operatorname{sim}\left(F_{d s}, D[j]\right) / \tau\right)}\right) \end{aligned} Lgc=−(log∑j=01exp(sim(Fdi,G[j])/τ)exp(sim(Fdi,Fi2i)/τ)+log∑j=01exp(sim(Fds,D[j])/τ)exp(sim(Fds,Fs2s)/τ))
这里 G = [ F i 2 i , F i 2 s ] , D = [ F s 2 s , F s 2 i ] . τ = 1 G=\left[F_{i 2 i}, F_{i 2 s}\right], D=\left[F_{s 2 s}, F_{s 2 i}\right] . \tau=1 G=[Fi2i,Fi2s],D=[Fs2s,Fs2i].τ=1表示超参数, sim ( a , b ) \text{sim}(a,b) sim(a,b)表示特征图 a , b a,b a,b所有元素之间余弦相似度的平均值,这个global-level损失的作用是增加 F i 2 i F_{i 2 i} Fi2i和 F i 2 s F_{i 2 s} Fi2s, F s 2 i F_{s 2 i} Fs2i和 F s 2 s F_{s 2 s} Fs2s,以及 F d i F_{di} Fdi和 F d s F_{ds} Fds之间的差异,同时提升 F d i F_{di} Fdi和 F d s F_{ds} Fds分别提取Domain-invariant和Domain-Specific特征。- 此外,instance-level对比损失如下:
L i c = − log exp ( sim ( P , P i 2 i ) / τ ) ∑ j = 0 1 exp ( sim ( P , Q [ j ] ) / τ ) \mathcal{L}_{i c}=-\log \frac{\exp \left(\operatorname{sim}\left(P, P_{i 2 i}\right) / \tau\right)}{\sum_{j=0}^{1} \exp (\operatorname{sim}(P, Q[j]) / \tau)} Lic=−log∑j=01exp(sim(P,Q[j])/τ)exp(sim(P,Pi2i)/τ)
其中从 F d i F_{di} Fdi中获取到的Object Proposals P P P,在 F i 2 i F_{i2i} Fi2i和 F i 2 s F_{i2s} Fi2s上接着执行ROIAlignment操作,得到对应的输出 P i 2 i ∈ R n × s × s × c P_{i 2 i} \in \mathbb{R}^{n \times s \times s \times c} Pi2i∈Rn×s×s×c和 P i 2 s ∈ R n × s × s × c P_{i 2 s} \in \mathbb{R}^{n \times s \times s \times c} Pi2s∈Rn×s×s×c,这里 Q = [ P i 2 i , P i 2 s ] Q=\left[P_{i 2 i}, P_{i 2 s}\right] Q=[Pi2i,Pi2s],通过最小化 L i c \mathcal{L}_{i c} Lic,能够增加 F i 2 i F_{i2i} Fi2i和 F i 2 s F_{i2s} Fi2s之间的差异,并且帮助 P P P中获取到更多同domain-invariant相关的信息。
最终的损失函数计算为:
L c d = L g c + L i c \mathcal{L}_{c d}=\mathcal{L}_{g c}+\mathcal{L}_{i c} Lcd=Lgc+Lic
DIR-based Self-Distillation
- 通过Cyclic-disentanglement module,能够得到Domain-invariant Representations, F d i F_{di} Fdi,将其作为教师特征,用来自蒸馏骨干特征,此时学生特征: F e 1 F_{e1} Fe1从骨干 E 1 E_1 E1输出, F e 2 F_{e2} Fe2从骨干 E 2 E_2 E2输出, F e 3 F_{e3} Fe3从骨干 E 3 E_3 E3输出,这里 F e 1 F_{e1} Fe1和 F e 2 F_{e2} Fe2的size和通道数和 F d i F_{di} Fdi是不同的,而 F e 3 F_{e3} Fe3的size和通道数同 F d i F_{di} Fdi一样
- 这里通过设计 T 1 , T 2 , T 3 T_1,T_2,T_3 T1,T2,T3来对 F e 1 F_{e1} Fe1, F e 2 F_{e2} Fe2和 F e 3 F_{e3} Fe3进行变换,得到输出 F 1 ∈ R w × h × u , F 2 ∈ R w × h × v , and F 3 ∈ R w × h × c F_{1} \in \mathbb{R}^{w \times h \times u}, F_{2} \in \mathbb{R}^{w \times h \times v}, \text { and } F_{3} \in \mathbb{R}^{w \times h \times c} F1∈Rw×h×u,F2∈Rw×h×v, and F3∈Rw×h×c,其中 u , v u,v u,v表示通道数。通过1x1卷积同 F d i F_{di} Fdi进行对齐。
- 设计feature-level和classification-level约束来进行蒸馏,其中feature-level的约束为:
L f c = dist ( Φ 1 ( F 1 ) , F d i ) + dist ( Φ 2 ( F 2 ) , F d i ) + dist ( Φ 3 ( F 3 ) , F d i ) \begin{aligned} \mathcal{L}_{f c}=\operatorname{dist}\left(\Phi_{1}\left(F_{1}\right), F_{d i}\right) &+\operatorname{dist}\left(\Phi_{2}\left(F_{2}\right), F_{d i}\right) \\ &+\operatorname{dist}\left(\Phi_{3}\left(F_{3}\right), F_{d i}\right) \end{aligned} Lfc=dist(Φ1(F1),Fdi)+dist(Φ2(F2),Fdi)+dist(Φ3(F3),Fdi)
其中 Φ 1 ∈ R 1 × 1 × u × c , Φ 2 ∈ R 1 × 1 × v × c , Φ 3 ∈ R 1 × 1 × c × c , d i s t ( ⋅ , ⋅ ) \Phi_{1} \in \mathbb{R}^{1 \times 1 \times u \times c}, \Phi_{2} \in \mathbb{R}^{1 \times 1 \times v \times c} , \Phi_{3} \in \mathbb{R}^{1 \times 1 \times c \times c},dist(\cdot,\cdot) Φ1∈R1×1×u×c,Φ2∈R1×1×v×c,Φ3∈R1×1×c×c,dist(⋅,⋅)表示距离函数,可以用L2-norm进行计算,- 对于classification-level约束,则是分别在 F 1 , F 2 , F 3 F_1,F_2,F_3 F1,F2,F3上进行 Roi-Alignment得到输出为 P 1 ∈ R n × s × s × u , P 2 ∈ R n × s × s × v , and P 3 ∈ R n × s × s × c P_{1} \in \mathbb{R}^{n \times s \times s \times u}, P_{2} \in \mathbb{R}^{n \times s \times s \times v} \text {, and } P_{3} \in \mathbb{R}^{n \times s \times s \times c} P1∈Rn×s×s×u,P2∈Rn×s×s×v, and P3∈Rn×s×s×c,接着定义三个分类器,将 P 1 , P 2 , P 3 P_1,P_2,P_3 P1,P2,P3输入得到输出概率 y 1 , y 2 , y 3 y_1,y_2,y_3 y1,y2,y3,而 y y y则是 F d i F_{di} Fdi输出的 P P P得到的概率值。class-level损失为:
L c c = K L ( y , y 1 ) + K L ( y , y 2 ) + K L ( y , y 3 ) \mathcal{L}_{c c}=K L\left(y, y_{1}\right)+K L\left(y, y_{2}\right)+K L\left(y, y_{3}\right) Lcc=KL(y,y1)+KL(y,y2)+KL(y,y3)
这里的损失能够帮助 F 1 , F 2 , F 3 F_1,F_2,F_3 F1,F2,F3从 F d i F_{di} Fdi中得到类别相关的信息,- 最终的self-distillation损失为:
L s d = L f c + L c c \mathcal{L}_{s d}=\mathcal{L}_{f c}+\mathcal{L}_{c c} Lsd=Lfc+Lcc
整个模型的最终损失为:
L = L r p n + L c l s + L l o c + λ ( L c d + L s d ) \mathcal{L}=\mathcal{L}_{r p n}+\mathcal{L}_{c l s}+\mathcal{L}_{l o c}+\lambda\left(\mathcal{L}_{c d}+\mathcal{L}_{s d}\right) L=Lrpn+Lcls+Lloc+λ(Lcd+Lsd)
其中 L r p n \mathcal{L}_{r p n} Lrpn表示RPN损失,用于区分前景和背景, L c l s , L l o c \mathcal{L}_{c l s},\mathcal{L}_{l o c} Lcls,Lloc分别表示类别损失和边界框回归损失, λ = 0.01 \lambda=0.01 λ=0.01表示超参数,最终输出是基于 F d i F_{di} Fdi的预测结果的。
(五) Experiment
实验设置
- 使用mAP作为评价指标
- 数据集daytime-sunny 场景从BDD100k中筛选出27708张图片,其中19395张图片用于训练,8313张图片用于测试。night-sunny场景从BDD100k中挑选了26158张图片,dusk-rainy和night-rainy场景使用最近提出的数据集,是对BDD100k中的下雨场景进行了渲染,分别包含了3501和2494张图片,daytime-foggy场景则是从FoggyCityscapes以及Adverse-Weather数据集中选取了3775张图片,在类别方面选取了7个常用类别
- 实现细节:使用Faster R-CNN作为base detector,分别设计了包含三个卷积层的Extractor, E D I R E_{DIR} EDIR和 E D S R E_{DSR} EDSR,此外 T 1 , T 2 , T 3 T_1,T_2,T_3 T1,T2,T3均由三个卷积层组成,并采用了BN,使用SGD,动量0.9,权重衰减0.0001,学习率设置为1e-3,batch大小设置为4.
本文方法同SW,IBN-Net,IterNorm,ISW进行比较:
Daytime-SunnyNight-Sunny
Dusk-rainy
Night-rainy
Daytime-foggy
(六) Notes
6.1 相关工作介绍
Domain Adaption Object Detection
- 为了解决Domain shift问题,大多数的解决方法是将source domain和target domain的feature-level 特征进行对齐,主要采用的方法是利用对抗生成网络来将源域的样式转换成目标域的样式,通常需要同时获取源域和目标域的数据
Self-distillation 自蒸馏问题
- 是在没有教师网络的情况下,利用自己的知识来训练有效的网络,两种常用的操作包括:基于数据增强的方式以及基于辅助网络的方式。