Single-Domain Generalized Object Detection in Urban Scene via Cyclic-Disentangled Self-Distill阅读笔记
(一) 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的提取效果很好,即输入FdiF_{di}Fdi(DIR)到DIR提取器后能够输出更多地Domain-invariant 表示,同理输入FdsF_{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分成三个部分(E1,E2,E3E_1,E_2,E_3E1,E2,E3),用于进行self-distillation,经骨干输出的特征图为Fb∈Rw×h×cF_b \in \mathbf{R}^{w \times h \times c}Fb∈Rw×h×c,然后两个Extractor:EDIRE_{DIR}EDIR和EDSRE_{DSR}EDSR分别用来提取Fdi∈Rw×h×cF_{d i} \in \mathbb{R}^{w \times h \times c}Fdi∈Rw×h×c(DIR)和Fds∈Rw×h×cF_{d s} \in \mathbb{R}^{w \times h \times c}Fds∈Rw×h×c(DSR),即:
Fdi=EDIR(Fb),Fds=EDSR(Fb)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)
这里的EDIRE_{DIR}EDIR和EDSRE_{DSR}EDSR是由多个卷积层组成,接着在FdiF_{di}Fdi上提取一组object proposals OOO,然后通过ROIAlign得到输出P∈Rn×s×s×cP \in \mathbb{R}^{n \times s \times s \times c}P∈Rn×s×s×c,其中nnn表示proposals的数量,sss表示proposal的大小,然后在re-disentanglement过程中将FdiF_{di}Fdi和FdsF_{ds}Fds作为输入:
Fi2i=EDIR(Fdi),Fi2s=EDSR(Fdi)Fs2i=EDIR(Fds),Fs2s=EDSR(Fds)\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之后,得到的Fi2iF_{i 2 i}Fi2i应该比FdiF_{di}Fdi中包含更多的domain-invariant信息,并且FdiF_{di}Fdi包含的domain-invariant信息要比Fi2sF_{i2s}Fi2s多,同理得到的Fs2sF_{s 2 s}Fs2s应该比FdsF_{ds}Fds中包含更多的domain-specific信息,并且FdsF_{ds}Fds包含的domain-specific信息要比Fs2iF_{s2i}Fs2i。- 为此,本文定义了global- 以及 instance-level对比损失来约束两个Extractor:
其中global-level的对比损失为:
Lgc=−(logexp(sim(Fdi,Fi2i)/τ)∑j=01exp(sim(Fdi,G[j])/τ)+logexp(sim(Fds,Fs2s)/τ)∑j=01exp(sim(Fds,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=[Fi2i,Fi2s],D=[Fs2s,Fs2i].τ=1G=\left[F_{i 2 i}, F_{i 2 s}\right], D=\left[F_{s 2 s}, F_{s 2 i}\right] . \tau=1G=[Fi2i,Fi2s],D=[Fs2s,Fs2i].τ=1表示超参数,sim(a,b)\text{sim}(a,b)sim(a,b)表示特征图a,ba,ba,b所有元素之间余弦相似度的平均值,这个global-level损失的作用是增加Fi2iF_{i 2 i}Fi2i和Fi2sF_{i 2 s}Fi2s,Fs2iF_{s 2 i}Fs2i和Fs2sF_{s 2 s}Fs2s,以及FdiF_{di}Fdi和FdsF_{ds}Fds之间的差异,同时提升FdiF_{di}Fdi和FdsF_{ds}Fds分别提取Domain-invariant和Domain-Specific特征。- 此外,instance-level对比损失如下:
Lic=−logexp(sim(P,Pi2i)/τ)∑j=01exp(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)/τ)
其中从FdiF_{di}Fdi中获取到的Object ProposalsPPP,在Fi2iF_{i2i}Fi2i和Fi2sF_{i2s}Fi2s上接着执行ROIAlignment操作,得到对应的输出Pi2i∈Rn×s×s×cP_{i 2 i} \in \mathbb{R}^{n \times s \times s \times c}Pi2i∈Rn×s×s×c和Pi2s∈Rn×s×s×cP_{i 2 s} \in \mathbb{R}^{n \times s \times s \times c}Pi2s∈Rn×s×s×c,这里Q=[Pi2i,Pi2s]Q=\left[P_{i 2 i}, P_{i 2 s}\right]Q=[Pi2i,Pi2s],通过最小化Lic\mathcal{L}_{i c}Lic,能够增加Fi2iF_{i2i}Fi2i和Fi2sF_{i2s}Fi2s之间的差异,并且帮助PPP中获取到更多同domain-invariant相关的信息。
最终的损失函数计算为:
Lcd=Lgc+Lic\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,FdiF_{di}Fdi,将其作为教师特征,用来自蒸馏骨干特征,此时学生特征:Fe1F_{e1}Fe1从骨干E1E_1E1输出,Fe2F_{e2}Fe2从骨干E2E_2E2输出,Fe3F_{e3}Fe3从骨干E3E_3E3输出,这里Fe1F_{e1}Fe1和Fe2F_{e2}Fe2的size和通道数和FdiF_{di}Fdi是不同的,而Fe3F_{e3}Fe3的size和通道数同FdiF_{di}Fdi一样
- 这里通过设计T1,T2,T3T_1,T_2,T_3T1,T2,T3来对Fe1F_{e1}Fe1,Fe2F_{e2}Fe2和Fe3F_{e3}Fe3进行变换,得到输出F1∈Rw×h×u,F2∈Rw×h×v,and F3∈Rw×h×cF_{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,vu,vu,v表示通道数。通过1x1卷积同FdiF_{di}Fdi进行对齐。
- 设计feature-level和classification-level约束来进行蒸馏,其中feature-level的约束为:
Lfc=dist(Φ1(F1),Fdi)+dist(Φ2(F2),Fdi)+dist(Φ3(F3),Fdi)\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∈R1×1×u×c,Φ2∈R1×1×v×c,Φ3∈R1×1×c×c,dist(⋅,⋅)\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约束,则是分别在F1,F2,F3F_1,F_2,F_3F1,F2,F3上进行 Roi-Alignment得到输出为P1∈Rn×s×s×u,P2∈Rn×s×s×v, and P3∈Rn×s×s×cP_{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,接着定义三个分类器,将P1,P2,P3P_1,P_2,P_3P1,P2,P3输入得到输出概率y1,y2,y3y_1,y_2,y_3y1,y2,y3,而yyy则是FdiF_{di}Fdi输出的PPP得到的概率值。class-level损失为:
Lcc=KL(y,y1)+KL(y,y2)+KL(y,y3)\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)
这里的损失能够帮助F1,F2,F3F_1,F_2,F_3F1,F2,F3从FdiF_{di}Fdi中得到类别相关的信息,- 最终的self-distillation损失为:
Lsd=Lfc+Lcc\mathcal{L}_{s d}=\mathcal{L}_{f c}+\mathcal{L}_{c c} Lsd=Lfc+Lcc
整个模型的最终损失为:
L=Lrpn+Lcls+Lloc+λ(Lcd+Lsd)\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)
其中Lrpn\mathcal{L}_{r p n}Lrpn表示RPN损失,用于区分前景和背景,Lcls,Lloc\mathcal{L}_{c l s},\mathcal{L}_{l o c}Lcls,Lloc分别表示类别损失和边界框回归损失,λ=0.01\lambda=0.01λ=0.01表示超参数,最终输出是基于FdiF_{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,EDIRE_{DIR}EDIR和EDSRE_{DSR}EDSR,此外T1,T2,T3T_1,T_2,T_3T1,T2,T3均由三个卷积层组成,并采用了BN,使用SGD,动量0.9,权重衰减0.0001,学习率设置为1e-3,batch大小设置为4.
本文方法同SW,IBN-Net,IterNorm,ISW进行比较:
Daytime-Sunny Night-Sunny
Dusk-rainy
Night-rainy
Daytime-foggy
(六) Notes
6.1 相关工作介绍
Domain Adaption Object Detection
- 为了解决Domain shift问题,大多数的解决方法是将source domain和target domain的feature-level 特征进行对齐,主要采用的方法是利用对抗生成网络来将源域的样式转换成目标域的样式,通常需要同时获取源域和目标域的数据
Self-distillation 自蒸馏问题
- 是在没有教师网络的情况下,利用自己的知识来训练有效的网络,两种常用的操作包括:基于数据增强的方式以及基于辅助网络的方式。
Single-Domain Generalized Object Detection in Urban Scene via Cyclic-Disentangled Self-Distill阅读笔记相关推荐
- Object Detection in 20 Years A Survey-论文翻译(阅读笔记)
Object Detection in 20 Years A Survey论文翻译(阅读笔记) 原文地址:[1905.05055] Object Detection in 20 Years: A Su ...
- 《You Only Look Once: Unified, Real-Time Object Detection》YOLO一种实时目标检测方法 阅读笔记(未完成版)
文章目录 1. one-stage与two-stage检测算法 1. 模型过程 1.1 grid cell 1.2 bounding box与confidence score 1.3 类别预测 1.4 ...
- Domain Adaptive Object Detection for Autonomous Driving under FoggyWeather(翻)
Title:Domain Adaptive Object Detection for Autonomous Driving under FoggyWeather 雾天环境下自动驾驶领域自适应目标检测 ...
- CVPR 2016 《Object Detection from Video Tubelets with Convolutional Neural Networks》论文笔记
本学弱喜欢在本子上记笔记,但字迹又丑. 望看不懂我的字的大佬不要喷我,看得懂的大佬批评指正.
- object detection
原地址:https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html Object Detection Pu ...
- Object Detection(目标检测神文)
目标检测神文,非常全而且持续在更新.转发自:https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html,如 ...
- Object Detection经典代码与文章
转载自Object Detection Papers Deep Neural Networks for Object Detection paper: http://papers.nips.cc/pa ...
- 论文笔记:CVPR 2022 Cross-Domain Adaptive Teacher for Object Detection
摘要 我们解决了对象检测中的域适应任务,其中有注释的源域和没有注释的感兴趣的目标域之间存在域间隙(注:在一个数据集上训练模型,再另外一个数据集上进行预测性能下降很大,在一个数据集上训练好的模型无法应用 ...
- CVPR 2021 Object Detection
一. 关于3D有26篇: 3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection ST3D: Sel ...
最新文章
- Python数据类型一
- latex 加粗_LaTeX论文模板
- 使用ln -s解决库冲突的问题
- ios 隔空投安装ipa_iOS 安装自己服务器上的IPA包
- linux配置路径,Linux下配置搜索路径
- 常用EXE文件反编译工具
- JSP学生综合评价管理系统sqlserver数据库myeclipse开发
- python编写代码自动运行程序_利用Python编写自动打开指定软件的程序
- a6账套管理显示无法连接服务器,航天A6基础版简单建账实施流程
- python删除表格第一行不动_Excel教程,教你如何设置表格第一行和第一列固定不动,一直显示...
- 路飞学城Python-Day5
- Excel 日期相减 DATEDIF 函数用法实例
- yolov5目标检测神经网络——损失函数计算原理
- 海尔小管家1号店嗨购盛典引爆 市场份额稳居红星美凯龙第一
- zebra源码分析-导读
- 区块链起点——避免你再错过几个亿
- 关于学习Java是应该是自学还是选择培训班
- Grocery CRUD自动CRUD生成器
- 032-机器学习背后的思维-针对入门小白的概念算法及工具的朴素思考
- 【系统分析师】系统配置与性能评价
热门文章
- 5.文献研读---基于教育数据挖掘的在线学习者 学业成绩预测建模研究--陈子健 朱晓亮...
- 解决ERROR Failed to compile with 3 errors These dependencies were not found: * pdfjs-dist/es5/buil问题
- IP地址、子网掩码、网关
- 第19课:如何确认你的转型方向 · 下
- 关于nodejs gm的各种各样的问题解决方法集合(中文乱码,non-conforming drawing,��Ч���� )
- 一文聊透Netty核心引擎Reactor的运转架构
- uniapp自定义微信分享
- 关于树叶的活动设计_大班社会教案《有趣的叶子》
- 使用ipp静态库,ipp-samples在linux下的make过程
- 实现兼容各浏览器的背景渐变,透明度渐变,色彩渐变