Efficient Classification of Very Large Images with Tiny Objects(CVPR2022补1)

文章目录

  • Two-stage Hierarchical Attention Sampling
    • One-stage
    • Two-Stage
    • 内存需求
  • Efficient Contrastive Learning with Attention Sampling

Two-stage Hierarchical Attention Sampling

一阶段缩放是hw,提取的特征是h1w1,
二阶段缩放是uv(在hw的基础上),提取的是h2*w2

One-stage

在第一阶段,注意力网络a Θ(·)为输入图像生成一个注意图(按s 1的比例缩小),其中N个块被替换采样() 在第二阶段,注意力网络bΘ(·)为每个选择的块生成一个注意图,并选择一个子块,因此选择了N个子块(不替换)。然后将所有子块馈送到特征提取器fΘ(·),使用其相应的注意力权重对特征映射进行聚合,并使用分类模块g Θ(·)从聚合的特征中获得预测

定义Ts1(x,c)函数从输入图像x∈R(H×W)中提取一个大小为h1×w1的块,并将其放置在低分辨率视图V(x,s1)∈R(h×w)中的位置c={i,j}处。
即:Ts1(x,c)将坐标通过[⌊(i−1)(W−1)/(w−1)⌋,⌊(j−1)(H−1)/(h−1)⌋]映射到x hw中的一个位置, 并返回一个大小为h1×w1的块。
s1是缩放因子,s1∈(0,1),h = s1H,w = s1W。

好,第一个问题:为什么通过[⌊(i−1)(W−1)/(w−1)⌋,⌊(j−1)(H−1)/(h−1)⌋]进行特征映射呢?

在这个过程中,Ts1(x,c) 的作用是对全分辨率H×W输入x中的一块区域 h1×w1 做特征提取,这里的c={i,j} 表示这块区域相对于全分辨率图像 x 的坐标。所以 [i-1,j-1]分别表示了相对应的行号和列号。

接下来,Ts1(x,c) 将把 x HW 上的像素转换为其相应的小尺度版本 x hw,这一步骤是为了降低计算成本。因为随着尺度变小,所需的内存和时间也会大大减小。

至于为什么要乘以(W-1)/(w-1) 和 (H-1)/(h-1),这是因为在图像缩放的过程中,保持纵横比不变是很重要的。也就是说,尽管图像的高度和宽度都发生了改变,但我们希望确保图像的比例仍然保持一致。这两个分数确保了在缩放到新尺度时,图像的长宽比例不会发生显著变化。

需要注意的是:(i)这种策略只依赖于x和s1的尺寸,而不取决于tile的大小; (ii)要求h1,w1>1/s1以保证对x进行全面覆盖; (iii)我们已经忽略了颜色通道维度,但在我们的实验中考虑了彩色图像(具有额外的一个维数)。
最后,提供注意力机制如下:


所以(2)就是添加了注意力机制后的分类器

接着作者提出了使用蒙特卡洛估计来避免计算由视角V(x,s1)暗示的所有|C|个可能的tiles的特性,这是因为如果原始输入x很大,则内存需求过高。为了利用Monte Carlo估算,在原输入图像上采样了一小部分tile,这些样本是由注意权重分布确定的独立同分布地进行选择的。因此,他们用一小部分来自大输入的tile代替所有可能的tiles来进行计算。这样做的好处是可以减少需要处理的数据量,从而提高效率。
可以通过从(1)到(3)采样近似估计(2)
C是V(x,s1)全部索引对的集合,C=h*w
Q是从aΘ(V(x,s1))中提取的N个索引对

Two-Stage

V(x,s2,c)∈R uv 是将第一阶段缩放后的x hw在缩放因子s2∈(0,1)下的位置c处的视图
所以:u = s2 h = s2 s1H, v = s2 w = s2 s1W
进一步,Ts2(Ts1(x, c),c ')提取了一个子块h2×w2(从h1w1中)
具体来说,V(x,s₂,c)是一个在尺度s₂∈(0,1)下的图像x hw在位置c处的视图,其大小为u×v,其中u=s₂h=s₁s₂H(高度)和v=s₂w=s₁s₂W(宽度)。进一步定义了一个函数Tₛ₂(Tₛ₁(x,c),c’),它从在尺度s₁下、位置c={i,j}的块Tₛ₁(x,c)中–>再在尺度s₂下的视图V(x,s₂)的位置c’={i’,j’}处提取一个大小为h₂×w₂的子块。
这个映射函数Tₛ₂(Tₛ₁(x,c),c’)与Tₛ₁(x,c)的定义类似,但返回的是尺寸为h₂×w₂而非h₁×w₁的子块 ,并且满足h₂ < h₁, w₂ < w₁以及h₂,w2 > 1/s₂的条件。
可以同(1)一样定义注意力机制

β是V(x,s1)在c处的注意力权重矩阵,Σc’∈C β‘c = 1 ,bΘ是注意力函数,|C’| = u
v
C‘是V(x,s2,c)全部索引对的集合
由于V(x,s2,c)中的位置c’在全分辨率图像x中的对应位置为αcβc’(x–>αc—>βc‘),因此我们可以重写(2):

现在聚合表征是x中所有大小为h 2 ×w 2 子块的加权平均值,同(3)一样我们可以近似估计(5):

利用Gumbel-Top-K trick来获得无偏差的平均预期值的估计,我们可以重写(5):
这个估计器是由两层嵌套的求和组成,外层是对所有可能的选择c’进行遍历,内层则是针对每一个c’执行相应的操作。
具体而言,外层的求和作用在于考虑所有可能的c’,并将它们对应的注意力权重乘以fΘ(TS2(TS1(x,c),c’)) 并累加起来。这样做的目的是为了构建一个总体上的估计器,考虑到所有可能的c’的影响。

至于内层的求和,它是针对那些不是当前正在评估的c’'的所有c来进行的。也就是说,只有当c≠ c’时才会发生内部求和的操作。同时,**每一项都包含了注意力权重βcc’除以(1-βc‘)的部分,再加上剩余未使用的注意力权重 (1-βc’)。**最后,这两者的积就是对应于c的实际贡献到总估计器中的数值。

总的来说,这个公式展示了一种有效的方式来估计期望值,即使面对非独立同分布(non-iid) 数据的情况下也能保持良好的效果。
右边的和是左边期望的无偏差估计。或者,我们可以写为:
非iid(非独立同分布)意味着它的各个部分之间存在某种依赖关系或者是异方差性(即各部分的误差方差并不相等)。这样的特性可能会导致传统的学习算法无法很好地适应这类数据,Gumbel-Top-K trick在这里的作用是为了克服nond-iid数据带来的挑战,使我们能够高效地估算目标函数的期望值。

然后,式9在8的基础上进行了变换,我们可以像在(6)中那样近似(5),但使用采样而不替换

当i不属于 {c’1, …, c’j-1},时,c’j正比于βci采样,否则不采样,避免了重复采样

内存需求

具体而言,对于N个样本的推理,单阶段[20]和提出的两阶段分层模型,其峰值内存使用量分别为O(s2HW + Nh2w2)和O(s1 2 HW + N’ s1 2 s2 2 HW + Nh2w2)。N’ 来代表Q和s中唯一块的数量。事实上,通过选择s1 <s和s2=s,我们可以证明我们的模型比单阶段注意力采样需要更少的GPU内存。注意,在第一阶段,选择块的数量会随着注意力映射的优化而急剧减少,峰值内存这个术语用来表示最坏的情况。

Efficient Contrastive Learning with Attention Sampling

这种技术的主要目的是让分类器能够更好地识别出属于类别 y=1 的图像作为对比示例
具体来说,我们利用(1)和(4)中现有的注意力函数。为了生成图像x的对比特征向量,使y =1,类似(1)——我们首先通过1 - aΘ(V(x, s1))采样(替换)块位置,然后类似(4),我们通过1 -bΘ(V(x, s2,c))采样N个子块(无需替换)

采样的对比子块通过特征网络,然后由分类器处理,使用(9)进行预测ΨΘ(x|y =1),其中使用条件y =1来强调我们使用y =1类的图像x作为对比示例。一般来说,对比样例的数量(每个训练批次)等于y =1的样本数量。对于这些对比样本,我们优化了以下目标,Lcon(ΨΘ(x|y =1)) = Σn -log(1 - ΨΘ(xn | yn = 1))。请注意,Lcon(ΨΘ(x|y =1))鼓励对比示例对于标记为 y=1 的图像 x 能够正确预测为 y=0 类别
**why?**这是因为作者想要提高模型区分正样本的能力,从而提升其性能。如果只关注正样本而不考虑负样本,则可能会导致过拟合问题,因为模型过于专注于记住正确的答案而忽视了错误的答案。通过把正样本预测成负样本,可以让模型更加全面地理解图像内容,避免过度适应某些特定模式而导致泛化能力下降的问题。这样可以使模型学会更好的判别边界,增强其鲁棒性和准确性

在多类情况下,可以通过让其中一个类别成为参考点,或是采用完整的交叉熵为基础的对比损失方式扩展这一方法,此时对比示例会被分别生成两个类别(如 y={0,1}),而不是仅有一个类别(如半交叉熵损失)。


http://www.niftyadmin.cn/n/5295205.html

相关文章

ssm基于vue框架的点餐系统的设计与实现+vue论文

基于vue框架的点餐系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的点餐信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的…

【halcon深度学习】dev_display_dl_data 移植到C# 上篇

效果展示 前言 在研究halcon深度学习的时候,会发现halcon的例程里面用到了大量的二次封装库函数。这些库函数内部也是由基础的算子组成。我们在halcon的开发环境里面用的很爽,但是一旦要在C#中使用,就会报错。 一开始,我想避开这个移植过程,直接使用halcon引擎(HDevEngi…

09.kubernetes 部署calico / flannel网络插件

脚本中实现了 calico 和 flannel 这两种主流的网络插件,选择其中一种部署即可 1、calico calico架构 Calico是一个三层的虚拟网络解决方案,它把每个节点都当作虚拟路由器(vRouter),并把每个节点上的Pod都当作是节点路由器后的一个终端设备并为其分配一个IP地址。各节点…

07-C++ 异常

异常 1. 概念 异常事件&#xff08;如&#xff1a;除 0 溢出&#xff0c;数组下标越界&#xff0c;所要读取的文件不存在,空指针&#xff0c;内存不足等等&#xff09; 在C 语言对错误的处理是两种方法&#xff1a; 一是使用整型的 返回值标识错误&#xff1a;二是使用 errno…

JavaScript使用教程(二):类型、值和变量

计算机程序通过操作值&#xff08;如数值3.14&#xff09;或文本&#xff08;如“Hello World”&#xff09;来工作。编程语言中这些可以表示和操作的值被称为类型&#xff0c;而一门语言支持的类型集也是这门语言最基本的特征。程序在需要把某个值保存下来以便将来使用时&…

ubuntu22.04,matlab问题记录

运行matlab出现 Gtk-Message: 16:25:58.504: Failed to load module "canberra-gtk-module"解决方法&#xff1a; sudo apt-get install libcanberra-gtk-module -y sudo ln -s /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so /usr/lib/lib…

[EFI]机械革命Mechrevo-蛟龙5-76Q电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Mechrevo-Jiaolong-76Q 处理器AMD Ryzen 7 5800h已驱动内存2 x 8GB DDR4 2133MHz已驱动硬盘LITEON CV5-8Q256 256GB已驱动显卡核显已驱动声卡Realtek ALC293 (ALC3235)已驱动网卡Intel I219-LM Gigabit Ethernet已驱动无线网卡蓝牙Intel Wireless-AX200 D…

git中关于submodule的操作

添加submodule git submodule add <url>t 3rd/submodule1如果出错&#xff0c;执行 git rm --cached 3rd/submodule1后期执行 git submodule sync git submodule update --init --recursive