Domain Adaptive Faster R-CNN:经典域自适应目标检测算法,解决现实中痛点,代码开源 | CVPR2018
论文从理论的角度出发,对目标检测的域自适应问题进行了深入的研究,基于H-divergence的对抗训练提出了DA Faster R-CNN,从图片级和实例级两种角度进行域对齐,并且加入一致性正则化来学习域不变的RPN。从实验来看,论文的方法十分有效,这是一个很符合实际需求的研究,能解决现实中场景多样,训练数据标注有限的情况。
来源:晓飞的算法工程笔记 公众号
论文: Domain Adaptive Faster R-CNN for Object Detection in the Wild
Introduction
目前,目标检测算法在公开数据上有很好的表现,但在现实世界环境中通常会有许多特殊的挑战,比如视角、物体外观、背景、光照以及图片质量的不同,使得测试数据和训练数据存在较大的跨偏移问题。
以自动驾驶为例,不同的公开数据集里的图片存在较大的差异,域偏移问题会导致明显的检测器性能下降。尽管收集更多的训练图片能解决域偏移的影响,但显然这不是最好的方案。
为了解决上面的问题,论文提出Domain Adaptive Faster R-CNN,最小化图片级别域偏移(图片尺寸、图片风格、光照等)以及实例级域偏移(目标外表、目标尺寸等),每个模块学习一个域分类器并且通过对抗训练学习域不变的特征,并且加入分类器的一致性正则化来保证RPN学习到域不变的proposal。
论文的主要贡献如下:
- 从概率角度对跨域目标检测中的域偏移问题进行理论分析。
- 设计了两个域自适应模块来消除图片级别和实例级别的域差异。
- 提出一致性正则化来学习域不变RPN。
- 将提出的模块集成到Faster R-CNN中,进行端到端的训练。
Distribution Alignment with H-divergence
论文设计了H-divergence度量两个不同分布的样本集,定义$x$为特征向量,$x_{\mathcal{S}}$为源域样本$x_{\mathcal{T}}$为目标域样本,$h:x\to {0,1}$为域分类器,预测源域样本$x_{\mathcal{S}}$为0,预测目标域样本$x_{\mathcal{T}}$为1。假设$\mathcal{H}$为一组域分类器,则H-divergence的定义为:
$err_{\mathcal{S}}$和$err_{\mathcal{T}}$为$h(x)$在源域和目标域样本的预测误差,上述的公式意味着域距离$d_{\mathcal{H}}(\mathcal{S},\mathcal{T})$与域分类器的错误率成反比,若最好的域分类器的错误率越高,则源域和目标域的距离越近。
在神经网络中,定义网络$f$产生特征向量$x$,为了进行域对齐,需要网络$f$产生能够减小域距离$d_{\mathcal{H}}(\mathcal{S},\mathcal{T})$的特征向量,即最小化公式:
上述的公式可以通过对抗训练进行优化,论文采用gradient reverse
layer(GRL)进行实现,训练主干特征最大化域分类误差并且训练域分类器最小域分类误差进行对抗训练,最终得出鲁棒的特征。
Domain Adaptation for Object Detection
A Probabilistic Perspective
目标检测问题可表示为后验概率$P(C, B|I)$,$I$为图片,$B$为目标的bbox,$C\in {1,\cdots,K}$为目标类别。定义目标检测的样本的联合分布为$P(C,B,I)$,其中源域和目标域的分布是不一样的$P_{\mathcal{S}}(C,B,I) \neq P_{\mathcal{T}}(C,B,I)$
Image-Level Adaptation
根据贝叶斯公式,目标检测的联合分布可定义为
定义目标检测为covariate shift假设,设定域间的条件概率$P(C, B|I)$是一样的,域分布偏移主要来自于$P(I)$分布的不同。在Faster R-CNN中,$P(I)$即从图片提取的特征,所以要解决域偏移问题,就要控制$P_{\mathcal{S}}(I)=P_{\mathcal{T}}(I)$,保证不同域的图片提取的特征一致。
Instance-Level Adaptation
另一方面,目标检测的联合分布也可以定义为
基于covariate shift假设,设定域间的条件概率$P(C|B,I)$是一样的,域分布偏移主要来自于$P(B,I)$分布的不同,而$P(B,I)$即图像中bbox区域特征,所以为了解决域偏移问题,需要控制$P_{\mathcal{S}}(B,I)=P_{\mathcal{T}}(B,I)$,保证不同域的图片提取的相同目标的bbox特征不变。
需要注意的是,目标域是没有标注信息的,只能通过$P(B,I)=P(B|I)P(I)$获取,$P(B|I)$为bbox预测器,这样就需要RPN具备域不变性,为此,论文再添加了Joint Adaptation。
Joint Adaptation
考虑到$P(B,I)=P(B|I)P(I)$,而分布$P(B|I)$是域不变且非零的,因此有
若域间的图片级特征的分布是一样的,实例级特征的分布也应该是一样的。但实际中很难达到完美的$P(B|I)$,首先$P(I)$分布很难完美地对齐,导致$P(B|I)$的输入有偏,其次bbox是从源域学习而来的,会存在一定地偏差。
为此,论文使用一致性正则化来消除$P(B|I)$的偏置,使用域分类器$h(x)$来进行源域和目标域的判断。定义域标签为$D$,图像级分类器可看为预测$P(D|I)$,实例级的分类器可看为预测$P(D|B,I)$。根据贝叶斯理论,得到
其中,$P(B|I)$是域不变的bbox预测器,而$P(B|D,I)$为域相关的bbox预测器。由于目标域没有标注的bbox,所以实际仅学习到域相关的bbox预测器$P(B|D,I)$。但可以通过强制两种分类器的一致性$P(D|B,I)=P(D|I)$,使得$P(B|D,I)$逼近$P(B|I)$。
Domain Adaptation Components
DA Faster R-CNN的架构如图2所示,包含两个域自适应模块以及一致性正则化模块,自适应模块加入GRL(gradient reverse layer)进行对抗训练,每个模块包含一个域分类器,最终的损失函数为
Image-Level Adaptation
为了消除图片级域分布不匹配,使用patch-based域分类器对特征图的每个特征点进行分类,每个特征点实际对应原图的一片区域$I_i$,这样特征点域分类器就等同于预测了每个图像中每个patch的域标签,这样的好处在于:
- 图片级表达的对齐通常能有助于消除整图带来的偏移。
- 由于目标检测算法的batch size通常很小,path-based能够提高域分类器的训练样本数。
定义$D_i$为第$i$个训练图片的域标签,$\phi_{u,v}(I_i)$为特征图上的一个激活值,$p^{(u,v)}_i$为域分类器的一个输出,则图片级自适应损失为
为了对齐域分布,需要同时优化域分类器最小化域分类损失以及优化主干网络的参数最大化域分类损失进行对抗训练,论文采用GRL进行实现,使用梯度下降来训练域分类器,回传梯度给主干时将梯度置为反符号。
Instance-Level Adaptation
实例级特征对齐有助于减少实例的局部差异,比如外表,大小,视角等。跟图片级特征对齐类似,定义$p_{i,j}$为第$i$个图片的第$j$个proposal,实例级的自适应损失为
同样的,在域分类器前添加GRL模块进行对抗训练。
Consistency Regularization
如前面的分析,强制域分类器的一致性有助于学习鲁棒的跨域bbox预测器,加入一致性正则化。由于图片级域分类器是对特征值进行分类的,取平均输出作为图片级概率,一致性正则化为
其中$|I|$为特征图的点数,$||\cdot||$为$\mathcal{l}_2$距离。
Experiments
Learning from Synthetic Data
SIM 10k是从GTAV中截取画面进行标注的数据集,Cityscapes为真实图片,这里对比从生成图片到真实图片的域转移。
Driving in Adverse Weather
Foggy Cityscapes通过生成雾来模拟真实场景,这里对比天气带来的域转移。
Cross Camera Adaptation
这里对比两个不同的训练数据集的域对齐。
Error Analysis on Top Ranked Detections
每个模块都能提升一定的准确率,而图片级对齐的背景错误率较高,这可能由于图片级对齐对RPN的提升更直接。
Image-level v.s. Instance-level Alignment
Consistency Regularization
CONCLUSION
论文从理论的角度出发,对目标检测的域自适应问题进行了深入的研究,基于H-divergence的对抗训练提出了DA Faster R-CNN,从图片级和实例级两种角度进行域对齐,并且加入一致性正则化来学习域不变的RPN。从实验来看,论文的方法十分有效,这是一个很符合实际需求的研究,能解决现实中场景多样,训练数据标注有限的情况。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
Domain Adaptive Faster R-CNN:经典域自适应目标检测算法,解决现实中痛点,代码开源 | CVPR2018的更多相关文章
- 旷世提出类别正则化的域自适应目标检测模型,缓解场景多样的痛点 | CVPR 2020
论文基于DA Faster R-CNN系列提出类别正则化框架,充分利用多标签分类的弱定位能力以及图片级预测和实例级预测的类一致性,从实验结果来看,类该方法能够很好地提升DA Faster R-CNN系 ...
- 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. • RCNN RCN ...
- 目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
目标检测解决的是计算机视觉任务的基本问题:即What objects are where?图像中有什么目标,在哪里?这意味着,我们不仅要用算法判断图片中是不是要检测的目标, 还要在图片中标记出它的位置 ...
- 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...
- 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷
前言: 目标检测的预测框经过了滑动窗口.selective search.RPN.anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNe ...
- (五)目标检测算法之Faster R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- 论文笔记:目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,FPN,YOLOv1-v3)
R-CNN(Region-based CNN) motivation:之前的视觉任务大多数考虑使用SIFT和HOG特征,而近年来CNN和ImageNet的出现使得图像分类问题取得重大突破,那么这方面的 ...
- 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)
目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...
- 第三十一节,目标检测算法之 Faster R-CNN算法详解
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...
随机推荐
- protocbuf的简单理解
之前通信协议替换为protocbuf!新老交替,很多不同看法,也提出来一些负面因数: 1.老的内部通信协议体已经有一段时间了,稳定熟悉! 2.通过通信结构体进行交互,实际上并没有序列化和反序列化的过程 ...
- 百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka
一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用.在讨论分布式应用时,很多初学者会把它和集群这个概念搞混,因为从部 ...
- MVC案例之多个请求对应一个servlet
CustomerServlet package com.aff.mvcapp.servlet; import java.io.IOException; import java.lang.reflec ...
- 使用turtle库绘制一个红色五角星图形
import turtle n = eval(input("请输入五角星的长度")) turtle.begin_fill() #开始填充颜色 i = 0 while i < ...
- Java实现 LeetCode 809 情感丰富的文字 (暴力)
809. 情感丰富的文字 有时候人们会用重复写一些字母来表示额外的感受,比如 "hello" -> "heeellooo", "hi" ...
- Java实现 LeetCode 451 根据字符出现频率排序
451. 根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e ...
- Java实现蓝桥杯VIP 算法训练 sign函数
问题描述 给定实数x,输出sign(x)的值. sign(x)是符号函数,如果x>0,则返回1:如果x=0,则返回0:如果x<0,则返回-1. 输入格式 一行一个实数x. 输出格式 一行一 ...
- Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
算法训练 9-7链表数据求和操作 时间限制:1.0s 内存限制:512.0MB 读入10个复数,建立对应链表,然后求所有复数的和. 样例输入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 ...
- Java实现冗余路径Redundant Paths
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- BigDecimal的setScale常用方法(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP、ROUND_HALF_DOWN)
BigDecimal的setScale四大常用方法总结 // 设置小数点后第三位数字一大一小观察效果BigDecimal num = new BigDecimal("3.3235667&qu ...