BatchFormer:有效提升数据稀缺场景的模型泛化能力|CVPR2022

article/2025/10/13 19:51:39

6266cc3e1fea631a4d65f3e65f278ecb.png

文 | 侯志@知乎(已授权)
源 | 极市平台

d1e4f03db4ac0c31147cfe8764f0c084.png摘要be6c64821e3035dafcacf2638531284b.png

当前的深度神经网络尽管已经取得了巨大的成功,但仍然面临着来自于数据稀缺的各种挑战,比如数据不平衡,零样本分布,域适应等等。

当前已经有各种方法通过样本之间的关系去针对这些问题。然而这些方法并没有去挖掘内在的网络结构来使网络模型建模关系。

受这些启发,我们提出了一个使网络能够从训练批次(min-batch)中学习样本关系的简单有效并且即插即用Transformer模块,Batch TransFormer (BatchFormer)。

具体地,BatchFormer应用于每个训练批次数据的batch维度来隐式地探索样本关系。BatchFormer使每个批量的样本间能够互相促进学习,比方说,在长尾识别中,利用频繁类别数据促进稀有类别的样本的学习。

更进一步地,由于在训练的时候在batch维度引用了Transformer,训练和测试的数据分布不再一致了。

因此我们提出一种共享分类器的策略,来消除在训练和测试的分布偏差从而达到Batch不变学习,进而使我们在测试的时候能够移除BatchFormer。

这种共享策略使BatchFormer在测试时不增加任何计算负载。不需要任何额外的策略,BatchFormer 在10多个数据集上面展示了稳定的提升,包括了长尾分布,组合零样本学习,领域泛化,领域适应,对比学习

最后但是更重要的,基于DETR,我们进一步将BatchFormer扩展到像素级别的任务上面,包括目标检测,全景分割,图像分类。

改进版的BatchFormer能够即插即用于DETR, Deformable DETR, Conditional DETR, SMCA, DeiT

Paper:

BatchFormer:
https://arxiv.org/pdf/2203.01522.pdf(CVPR2022)

BatchFormerV2:
https://arxiv.org/pdf/2204.01254.pdfCode

(V1 & V2):
https://github.com/zhihou7/BatchFormer

1450b1eaee092a6d4efe38581d8f230b.png介绍94f30f5f025f1a4feb80faba05b41add.png

尽管深度学习已经取得了巨大的成功,但是它严重依赖于大量的数据。对大量训练数据的依赖限制了深度模型的实际应用。

因此,怎么改善深度模型在数据稀缺的场景下的泛化能力受到了广泛的关注,比如长尾学习,少样本学习,零样本学习,领域泛化。

尽管这样,当前仍然缺乏一种简单,统一的探索样本关系的框架来针对各种样本稀缺的问题。

一个直观的例子可以见图1.我们可以利用不同样本的相似性和共享的part来改善网络的泛化。

758d04514468bb758312110e2fc84114.jpeg
▲图1:样本关系的示例.鸟和鸡具有形状上的相似性。并且他们共享着两条腿的特性。

尽管没有单独地阐述样本关系,最近的工作已经内在地探索了样本关系通过约束或者知识迁移。一些常见的例子是mixup[3],copy-paste[4],crossgrad[5],和组合学习[6]。

这些方法内在地利用样本间存在相似关系和共享部分的关系来增强数据约束模型。

另外一种方式是知识迁移,比如说1)在频繁类别和稀有类别之间[7],2)从已见类别到未见[8],3)已知域和未知域[9].然而这些方法是从网络的输入或者输出来探索关系,没有设计网络内部结构来学习到样本关系,更没有在batch维度进行数据的协同学习。

在这篇文章,我们介绍一种网络模块作用到Batch维度上去探索样本关系。

然而,训练和测试的不一致(测试的时候,不会总有一个样本)使网络并不容易在batch维度学习到样本关系。

因为我们在测试的时候,经常会遇到没有batch的数据。一个经典的例子是Batch Normalization。

Batch Normalization总是保留着mini-batch统计出的均值和方差,来归一化测试样本。另外一种方式是使用特征的memory bank 来保留类别的中心,这样来帮助判别稀有和零样本类别. 不同于以上的方式,我们介绍一种全新的简单有效的模块来通过利用结构的优势探索样本关系对于表示学习的帮助。

具体地,我们尝试在batch维度上面引入Transformer结构来建模样本关系。在这里,我们主要启发与图结构,没有positional embedding时,Transformer也可以看做是一个全连接图网络。

我们把这种模块称为Batch Transformer 或者BatchFormer。在实现中,我们在分类器和特征提取器之间插入BatchFormer。

此外,为了减少测试和训练的偏移,不同于Batch Normalization和Memory Feature Bank, 我们介绍了一种新的策略,共享分类器:我们在BatchFormer前后引入共享的分类器。

相较于统计的均值方差和Feature back,共享策略能够让我们在测试的时候不增加任何计算和内存的负载。

尽管加入共享分类器可以使得网络能够有效地改善数据稀缺的分类问题。然而,对于pixel级别的任务来说,这并不非常适用。

因此我们进一步将BatchFormer泛化到一般化的任务,像目标检测和分割。我们将BatchFormer应用到一般的Transformer结构中,比如DETR和DeiT,插入到两层空间Transformer的中间,同时改进共享分类器为双流结构来保证训练和测试的batch不变性。

我们把这个方法称为BatchFormerV2。一个简单的比较Channel Attention[10], Visual Transformer[11] 和BatchFormer可以如图2所示。

我们将Attention结构从通道和空间维度泛化到batch维度,展示了一种新的模型结构的可能。

eedb86973057bd333bcbf7706c9a2dc9.jpeg
▲图2: Channel Attention在通道做attention,Visual Transformer在空间维度上面做attention,而我们的BatchFormer在Batch维度上面做attention。

简而言之,我们介绍了一种简单有效的针对数据稀缺的Transformer模块,取名为BatchFormer。我们在超过10个数据稀缺数据,5个任务上面展示了方法的有效性。

更进一步,我们提出一个BatchFormerV2版本,将BatchFormer泛化到一般的目标检测和分割任务上面,即插即用地显著改善了DETR,Deformable-DETR,Conditional DETR,SMCA的效果。

94f7a9ab68b52c9a881d3fe598218fef.png方法8a74336b7cce2e05947d84b57b61dcd5.png

BatchFormer

BatchFormer 是一个即插即用的模块,通过探索样本关系对促进表示学习。

如图3所示,我们在特征提取器后面插入TransFormer模块。

特别地,我们的Transformer是沿着batch dimension, 也就是说我们把整个batch看做一个sequence。

再这里,我们移除了Transformer的positional embedding以达到位置的不变性学习。

与此同时,我们在Transformer前后都加入了一个分类器,注意,这两个分类器是共享的,通过这个共享分类器,使得我们能够保持训练和测试的batch不变性。

ab55c26728e32bc34f7ab1c389295e34.jpeg
▲图3:模块示意图,我们在分类器前一层插入一个Transformer Encoder模块。该模块作用于Batch维度,而不是空间维度。同时在Transformer前后共享分类器。

BatchFormer可以通过简单的几行代码实现,如下图所示,

81cb855f057eb643e5edf6f548bb0860.jpeg

BatchFormerV2

我们将BatchFormer泛化为一个更通用的模块,来促进一般的计算机视觉任务,比如目标检测和分割,图像分类。

具体的,我们将BatchFormer插入到两层Visual Transformer之间,在每个空间的像素点上面进行Batch Transformer 操作.同时我们将每个空间位置上面的BatchFormer共享,如下图所示.

5b024c8d6aaabcc801f6b4ffac57799e.jpeg
▲图4:BatchFormerV2空间维度共享图

同时,我们介绍了一种新的双分支模式,从BatchFormer前开始,将每个Batch复制一份,让一份batch的数据传入原有的网络模块中,让另外一份batch的数据经过BatchFormer分支。

除了BatchFormerV2模块外,其他所有模块参数,我们在两个分支中全部共享。这里的目的同共享分类器一致:让模型学到一个batch 不变的特征。模型框架如下,

277d288e0d562b6df354fa1230b4482b.jpeg
▲图5: BatchFormerV2双分支框架图。BatchFormerV2分支加入了BatchFormer模块,而原有的分支保持不变。两个分支输入的数据是一样的。

BatchFormerV2也可以通过简单的几行代码实现如下,

9f39c669203336615ad0bd87c970b216.jpeg

梯度分析

从模型的优化上,BatchFormer结构改变了梯度传播的方向,使得任意一个样本的特征会贡献到所有其他样本的loss计算上面。

因此任意一个loss算出来的梯度,都会回传到基于其他所有样本计算的梯度上面。从样本的增强角度上面看,BatchFormer可以看成是隐式地增加了数据。

每一个样本特征可以看成是其他样本的虚拟特征[3]。这样BatchFormer实际上大大增强了样本,所以能够有效地改善数据稀缺的问题。

ba2c783378d7746eecc4f4d1fce85f3a.jpeg
▲图6:BatchFormer梯度回传解析图

fea680d2c09e2ecd906ab3a08eebaaa9.png实验结果338c97061afb958eee43b2e0ed9a113c.png

这里我们主要展示了我们核心的实验结果,比如目标检测,全景分割,长尾识别,对比学习,域泛化,等等。更多任务的实验和消除分析请参见我们的论文和附录。

目标检测

02c631b1593c039a12fd37fd8087221b.jpeg

我们发现,BatchFormer能够即插即用到DETR以及DETR派生出来的各种方法上面。并且取得了超过一个点的一致性的提升。

全景分割

95f98d13c20029c05fda684f969579a0.jpeg

我们在全景分割上面,提高了DETR 1.7%。我们注意到BatchFormerV2主要提升了stuff的类别。我们的可视化实验也发现,BatchFormerV2能够更加注意到object。

长尾分布

6247c4e7bacf92a9143045af9d860550.jpeg fc36d3e827b43274b95cf471358fbc84.jpeg

从实验的结果看,BatchFormer主要提升了few shot的类别。在长尾分布中,我们认为BatchFormer平衡了数据。

自监督学习

a06cf4ea7ec069fbdfc9557b0d00f3fd.jpeg

BatchFormer一致地改善了MoCo-V2和V3.

组合零样本学习

00eb2c3ce7c7bf275db6e8718129a2ad.jpeg

领域泛化

6eb1ca4da8a0c4557511f2d4828cc1e3.jpeg

图像分类

826683bb9d523e7eb21180334bc2521a.jpeg 95ee47df63a5e2ed6044f1639463b5af.jpeg

消除实验

Batch Size

7aded8e993612e255ebcd1ade3364cc1.jpeg

我们基于长尾识别数据集(ImageNet-LT)进行了消除实验。实验中,我们发现batch size 对于模型性能的影响较小。

梯度分析

ac61ce27129d1c50d3817c149f7abb75.jpeg

我们按照实例的频数降序提取出每个类别的在训练样本中对其他样本的梯度均值。我们发现稀有类别的对其他样本的梯度明显更大。这个实验说明,BatchFormer实际上是通过梯度传播改善了模型对于不平衡数据的学习。

be3dd687fa57e030007d99975453596d.png可视化分析934e6339fbcc632f52980f25e2ee9f3d.png

Grad-CAM 可视化

5bdf428bd2ec6bb2961e2e241a66c434.jpeg

我们基于Grad-CAM可视化了特征图。第二行是我们的基线,第三行是加上Transformer模块后的结果。

我们发现在长尾分类的稀有样本中,当场景简单的时候模型会注意到物体的更多细节部分,当场景复杂的时候,模型会学会忽略噪音像素而专注到具体物体中。

全景分割

86c6852f8a2d94238c6915ec69aa2e88.jpeg

第二行是我们的基线(DETR),第三行是DETR加上我们提出的方法的结果。

我们注意到BatchFormerV2会显著地改善物体分割的细节。

比如上图中桌子脚,飞机的轮子和浴缸边缘。最后一个图片里面展示BatchFormerV2能够分割出细小的目,比如草地。

eeb5d935bf88b77cc79ee199ecc3ba21.png总结与展望51e56cbcac9f58fee0adfe589336fab8.png

在这篇文章中,我们介绍了一种简单有效,即插即用的Transformer模块,我们称之为BatchFormer。

BatchFormer将Transformer应用到网络分类器前一层的batch维度,来挖掘样本之间的关系,比如相似性,部分共享性等等。

同时我们介绍了一种共享分类器策略,这样我们能达到一种batch 的不变性,从而在测试的时候移除BatchFormer,使网络不增加任何计算和内存的负载。

更进一步地,我们介绍一个更一般化的版本,BatchFormerV2。BatchFormerV2是一个对Transformer结构即插即用的方法。我们的实验展示BatchFormer在长尾识别,组合零样本学习,域泛化都取得了当前最好的效果。

我们在超过15个数据集,7个任务上面展示了BatchFormer的有效性。在接下来,我们将继续基于样本关系对特征的表示学习和模型架构进行探索。

95716808b17441b1962833f3ecdb3996.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜广推与求职讨论群

8e1098e980e5f584a9d1621bd0507e33.png

[1] Hou, Zhi, Baosheng Yu, and Dacheng Tao. "BatchFormer: Learning to Explore Sample Relationships for Robust Representation Learning”. CVPR2022

[2] Hou, Zhi, et al. "BatchFormerV2: Exploring Sample Relationships for Dense Representation Learning." arXiv preprint arXiv:2204.01254 (2022).

[3] Hongyi Zhang, Moustapha Cisse, Yann N Dauphin, and David Lopez-Paz. mixup: Beyond empirical risk minimization. _ICLR_2018

[4] Golnaz Ghiasi, Yin Cui, Aravind Srinivas, Rui Qian, Tsung- Yi Lin, Ekin D Cubuk, Quoc V Le, and Barret Zoph. Simple copy-paste is a strong data augmentation method for instance segmentation CVPR2021

[5] Shiv Shankar, Vihari Piratla, Soumen Chakrabarti, Siddhartha Chaudhuri, Preethi Jyothi, and Sunita Sarawagi. Generalizing across domains via cross-gradient training. In _ICLR_2018

[6] Zhi Hou, Xiaojiang Peng, Yu Qiao, and Dacheng Tao. Visual compositional learning for human-object interaction detection. _ECCV_2020

[7] Ziwei Liu, Zhongqi Miao, Xiaohang Zhan, Jiayun Wang, Boqing Gong, and Stella X. Yu. Large-scale long-tailed recognition in an open world. In _CVPR_2019

[8] MF Naeem, Y Xian, F Tombari, and Zeynep Akata. Learning graph embeddings for compositional zero-shot learning. In _CVPR_2021

[9] Martin Arjovsky, Le ́on Bottou, Ishaan Gulrajani, and David Lopez-Paz. Invariant risk minimization.

[10] Hu, J., Shen, L., Sun, G.: Squeeze-and-excitation networks. CVPR2018

[11] Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., Dehghani, M., Minderer, M., Heigold, G., Gelly, S., et al.: An image is worth 16x16 words: Transformers for image recognition at scale. ICLR2020


http://chatgpt.dhexx.cn/article/FUc9ZuiZ.shtml

相关文章

图解深度学习-提高泛化能力的方法

数据集 在深度学习的训练过程中,神经网络的类型和结构固然重要,但训练样本才是重中之重。 数据增强 当训练样本数量较少时,可以通过数据增强来增加样本的多样性。 数据增强就是通过对样本图像进行平移、旋转、镜像翻转等方式进行变换。除…

JAVASE提高 -- Java泛型

1. 泛型类 &#xff08;1&#xff09;使用语法 类名<具体的数据类型> 对象名 new 类名<具体的数据类型>(); &#xff08;2&#xff09;Java1.7以后&#xff0c;后面的<>中的具体的数据类型可以省略不写 类名<具体的数据类型> 对象名 new 类名<&…

【NLP】如何提高模型泛化能力?以中文NER为例

我们知道模型的泛化能力是很重要的&#xff0c;如果一个模型具有很好的泛化性能&#xff0c;那么它往往能够在没有见过的数据上表现良好。以中文命名实体识别为例&#xff0c;在用于评估模型泛化性能的数据集中&#xff0c;我们可能忽略了数据偏差对模型泛化的影响。 论文标题&…

C#提升(一、泛型)

一、什么是泛型 泛型&#xff0c;即“参数化类型” 我们来看以下代码&#xff0c;目的很明确&#xff0c;就是显示参数类型&#xff0c;这种类似的代码或者说只有参数类型不同&#xff0c;但是功能相同时&#xff0c;我们如何让代码写的更优雅&#xff1f; 在泛型没有出现的…

深度学习提高泛化能力的技术

LeetCode题目记录 1.泛化能力&#xff08;generalization&#xff09; 2.正则化&#xff08;regularization&#xff09;2.1 正则化方法 1.泛化能力&#xff08;generalization&#xff09; 对于模型&#xff0c;我们不仅要求它对训练数据集有很好的拟合&#xff08;训练误差&a…

lecture9-提高模型泛化能力的方法

HInton第9课&#xff0c;这节课没有放论文进去。。。。。如有不对之处还望指正。话说hinton的课果然信息量够大。推荐认真看PRML《Pattern Recognition and Machine Learning》。 摘自PRML中22页。 正文&#xff1a; 一、提高泛化方法的概述 在这部分中&#xff0c;将会介绍…

思考深度学习的泛化能力

神经网络通过记忆学习 传统观点论文观点论文实验 神经网络 不 通过记忆学习参考资料 深度神经网络往往带有大量的参数&#xff0c;但依然表现出很强的泛化能力&#xff08;指训练好的模型在未见过的数据上的表现&#xff09;。 深度神经网络为何会拥有如此强的泛化能力&…

SQL提升(一)

Sql不常见关键字提升 一、前言 Sql是最重要的关系数据库操作语言&#xff0c;现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。 我们常用的sql关键字不外乎 group by;in; where; from; update……等&#xff0c;这些关键字有时组成sql的基础。 但是…

越大的数据集训练,网络泛化能力越强

虽然这个直观很好理解&#xff0c;但我想找这个论点的论文支持&#xff0c;如果再能找张图就好了&#xff0c;下面是过程 首先是On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima这篇经典文章&#xff0c;里面的这张flat minima和sharp minim…

浅谈深度学习泛化能力

谷歌最近出品的82页论文《ON THE GENERALIZATION MYSTERY IN DEEP LEARNING》&#xff0c;在此我简单归纳下论文的思想&#xff0c;有兴趣的看看原论文。论文链接&#xff1a;github.com/aialgorithm/Blog 一、DNN泛化能力的问题 论文主要探讨的是&#xff0c; 为什么过参数的…

深入理解泛化

文章目录 1.引言2.泛化的定义3.数据集分类4.泛化能力分类5.从训练过程来理解泛化参考资料 1.引言 什么是泛化呢&#xff1f; 先举个栗子&#xff1a; 小明和小李都上了高三。小明头脑机灵&#xff0c;一边刷着五年高考三年模拟一边总结做题规律&#xff0c;而小李一门心思刷题…

机器学习-泛化能力

目录 1.什么是泛化能力 2.什么是好的机器学习模型的提出 3.泛化误差 4.模型泛化能力的评价标准 4.提高泛化能力 5.举例 6.相关引用文献 1.什么是泛化能力 百度百科解释&#xff1a;机器学习算法对新鲜样本的适应能力。 更加具体的解释&#xff1a;学习到的模型对未知…

机器学习中的泛化能力

模型的泛化能力&#xff1a;指机器学习算法对新鲜样本的适应能力。 学习的目的&#xff1a;学到隐含在数据背后的规律&#xff0c;对具有同一规律的学习集以外的数据&#xff0c;经过训练的网络也能给出合适的输出&#xff0c;该能力称为泛化能力。 由此可见&#xff0c;经训练…

神经网络泛化的能力因素,神经网络泛化的能力差

1、BP神经网络当中 所提到的泛化能力是指什么&#xff1f; 就是外推的能力。 很多时候训练的网络对于训练的数据能很好的拟合&#xff0c;但是对于不在训练集内的数据拟合就很差强人意了。这种情况就叫泛化能力----差。也就是说可能你的网络存在过拟合的现象。 谷歌人工智能写…

【深度学习】常见的提高模型泛化能力的方法

前言 模型的泛化能力是其是否能良好地应用的标准&#xff0c;因此如何通过有限的数据训练泛化能力更好的模型也是深度学习研究的重要问题。仅在数据集上高度拟合而无法对之外的数据进行正确的预测显然是不行的。本文将不断总结相关的一些方法。 一、模型角度 Dropout 首先随…

TCP/IP报文格式

1、IP报文格式    IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务&#xff0c;也即依赖其他层的协议进行差错控制。在局域网环境&#xff0c;IP协议往往被封装在以太网帧&#xff08;见本章1.3节&#xff09;中传送。而所有的TCP、UDP、ICMP、IGMP数据…

TCP首部报文段格式

最近《计算机网络》这本书看到了传输层的 TCP 协议&#xff0c;因为TCP 的全部功能都体现在它的首部中&#xff0c;因此觉得有必要将这些知识梳理一下。 首先TCP 是面向字节流的。这个流指的是流入到进程或从进程流出的字节序列。面向字节流的含义是&#xff1a;应用程序与 TC…

ARP报文格式详解

ARP 协议包&#xff08;ARP 报文&#xff09;主要分为 ARP 请求包和 ARP 响应包&#xff0c;本节将介绍 ARP 协议包的格式。 ARP 报文格式 ARP 协议是通过报文进行工作的&#xff0c;ARP 报文格式如图所示。 ARP 报文总长度为 28 字节&#xff0c;MAC 地址长度为 6 字节&…

CAN的报文格式

CAN的报文格式 在总线中传送的报文&#xff0c;每帧由7部分组成。CAN协议支持两种报文格式&#xff0c;其唯一的不同是标识符&#xff08;ID&#xff09;长度不同&#xff0c;标准格式为11位&#xff0c;扩展格式为29位。 在标准格式中&#xff0c;报文的起始位称为帧起始&am…

IPv4报文格式详解和报文示例

目录 一&#xff0c;IP数据报文的组成 二&#xff0c;IP报文格式 三&#xff0c;IPv4报文示例 作者&#xff1a;柒烨带你飞 一&#xff0c;IP数据报文的组成 一个IP数据报文都是由首部和数据两部分组成。 每个 IP 数据报都以一个 IP 报头开始。IP 报头中包含大量信息&#…