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

文章目录

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

Two-stage Hierarchical Attention Sampling

summary

从一个大图像中按照指定的低分辨率比例和位置提取出一个小图块
一阶段缩放是hw,提取的特征是h1w1,在原图X∈HW上提取的
二阶段缩放是uv(在hw的基础上),提取的是h2*w2,在子图hw上提取的

T_s1(x, c) 是一个函数,它从输入的全分辨率图像 x ∈ R^{H×W} 中提取一个大小为 h_1 × w_1 的图像块(tile),该图像块对应于在较低分辨率视图 V(x, s_1) ∈ R^{h×w} 中的位置(坐标)c = {i, j}。这里的缩放比例 s_1 ∈ (0, 1) 表示了低分辨率视图与原始图像之间的尺寸关系,即:低分辨率视图的高度 h 和宽度 w 分别等于原图像高度 H 和宽度 W 乘以缩放比例 s_1 后向下取整的结果。

具体来说,T_s1(x, c) 函数的工作流程如下:

  • 输入:

    • x:全分辨率的输入图像。
    • c:在低分辨率视图 V(x, s_1) 中的坐标位置 (i, j)
  • 输出:

    • 从全分辨率图像 x 中按照给定的坐标 c 及其对应的低分辨率视图尺寸计算出实际在高分辨率图像中的采样区域,并从中提取出一个大小为 h_1 × w_1 的图像块。

V(x, s_2, c) 表示从在比例 s_1 下抽取的图像块 T_s1(x, c) 中生成的、以缩放比例 s_2 ∈ (0, 1) 的视图。在这个视图中,其尺寸是 u × v,其中 u = ⌊s_2h⌋ = ⌊s_1s_2H⌋v = ⌊s_2w⌋ = ⌊s_1s_2W⌋,分别表示了宽度和高度。

进一步地,我们定义了一个函数 T_s2(T_s1(x, c), c'),它用于从在 s_1 缩放比例下得到的图像块 T_s1(x, c)(位于 V(x, s_1) 视图中的位置 c = {i, j})中,在 V(x, s_2) 视图中位置 c' = {i', j'} 提取出一个大小为 h_2 × w_2 的子块(sub-tile)。

这个函数 T_s2(T_s1(x, c), c') 类似于 T_s1(x, c) 定义的方式,但返回的是尺寸为 h_2 × w_2 的子块而不是 h_1 × w_1 大小的图像块,并且满足以下条件:

  • h_2 < h_1 (子块的高度小于原始图像块)
  • w_2 < w_1 (子块的宽度小于原始图像块)
  • h_2, w_2 > 1/s_2 (子块的尺寸相对于 s_2 视图的比例而言足够大,确保包含有意义的信息)

通过这种方式,可以在不同尺度上对图像进行分层采样并提取局部特征,从而有效地处理大型图像或聚焦于微小目标。

One-stage

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

从全分辨率图像 x 中按照给定的坐标 c 及其对应的低分辨率视图尺寸计算出实际在高分辨率图像中的采样区域,并从中提取出一个大小为 h_1 × w_1 的图像块
c:在低分辨率视图 V(x, s_1) 中的坐标位置 (i, j)
即:Ts1(x,c)将坐标c通过[⌊(i−1)(W−1)/(w−1)⌋,⌊(j−1)(H−1)/(h−1)⌋]映射到x中的, 并返回一个大小为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)我们已经忽略了颜色通道维度,但在我们的实验中考虑了彩色图像(具有额外的一个维数)iv)该策略需要在所有的方向上对x进行相应的h1 /2和w1/2像素的零填充。

为什么要让h1,w1>1/s1
确保在较低分辨率视图中的一个像素对应到高分辨率上的至少一个像素,避免丢失信息。
提取的每个图像块包含更多的上下文信息,有助于模型更好地理解图像内容。

最后,提供注意力机制如下:


所以(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, s_2, c) 表示以缩放比例 s_2 ∈ (0, 1) 查看从输入图像 x 在比例 s_1 下抽取的图像块 T_s1(x, c) 的视图。这意味着这个视图的大小是 u × v,其中 u = s_2 * h 和 v = s_2 * w,进一步转换为与原始图像尺寸相关联的形式:u = s_1 * s_2 * H 和 v = s_1 * s_2 * W
进一步,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)中现有的注意力函数来生成对比特征向量。对于标签 y=1 的图像 x,首先按照与公式(1)类似的方式,通过 1-a*Θ(V(x,s_1)) 对其进行带放回的图像块位置抽样。这里的 a 表示一个权重系数,而 Θ(V(x,s_1)) 是在第一级缩放下基于低分辨率视图 V(x,s_1) 计算出的注意力分布。

接着,我们在每个已抽取到的图像块上应用第二级抽样,不带放回地通过 1-b*Θ(V(x,s_2,c)) 抽取 N 个子块,这一过程类似于公式(4)。其中 b 是另一个权重系数,而 Θ(V(x,s_2,c)) 是在第二级缩放下,针对每个选定的图像块 c 在更低分辨率视图 V(x,s_2,c) 上计算出的注意力分布。

这样做的目的是从那些原本注意力权重较低的区域提取特征,以产生用于对比学习的负样本,并进一步提升模型对关键特征的理解和识别能力

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/325840.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#编程-实现继承

C#允许您通过扩展现有类的功能以创建新类来实现继承。 从基类创建派生类 使用以下语法在C#中创建派生类: class <derived_class>:<base_class>{...}确定继承的层次结构 要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。 请考虑以…

基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的旅游管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

数据结构(JS实现)

目录 链表链表的特点链表中的常见操作单链表append(data)尾部追加新节点toString()输出链表的节点数据插入节点insert(position,data)get(position)获取链表指定位置节点的数据indexOf(data)查找对应数据节点的位置update(position, newData)更新指定位置节点数据removeAt(posi…

稿件代写3个不可或缺的步骤让你事半功倍-华媒舍

作为一个需求频繁的作者&#xff0c;你可能会面临大量的稿件代写任务。但是&#xff0c;你是否曾经为提高文章质量而苦恼过&#xff1f;是否希望在有限的时间内完成更多的代写任务&#xff1f;本篇文章将向你介绍三个不可或缺的稿件代写步骤&#xff0c;帮助你事半功倍&#xf…

NGUI基础-三大基础控件之Sprite精灵图片

目录 Sprite是什么 如何创建Sprite 参数相关 Atlas Sprite Material Fixed Aspect Type Simple(普通模式&#xff09; Sliced(切片模式&#xff09; Tiled(平铺模式&#xff09; Filled(填充模式&#xff09; 常见的填充模式有以下几种&#xff1a; Advanced(高级…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说&#xff0c;它的灵魂是什么&#xff1f;就是需要提供一个事件循环EventLop(EventLoop)&#xff0c;不停地去检测有没有客户端的连接到达&#xff0c;有没有客户端给服务器发送数据&#xff0c;描述的这些动作&#xff0c;反应堆模型能够胜任。当服务器和…

Stable Diffusion架构的3D分子生成模型 GeoLDM - 测评与代码解析

之前&#xff0c;向大家介绍过3D分子生成模型 GeoLDM。 GeoLDM按照Stable Diffusion架构&#xff0c;将3D分子生成的扩散过程运行在隐空间内&#xff0c;优化了基于扩散模型的分子生成。可能是打开Drug-AIGC的关键之作。让精确控制分子生成有了希望。 详见&#xff1a;分子生成…

抖音本地生活团购运营商家培训教程课件ppt

【干货资料持续更新&#xff0c;以防走丢】 抖音本地生活团购运营商家培训教程课件ppt 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 部分资料预览 添加图片注释&#xff0c;不超…

[SwiftUI]工程最低适配iOS13

问题&#xff1a; 新建工程&#xff0c;选择最低支持iOS13报错&#xff1a; main() is only available in iOS 14.0 or newer Scene is only available in iOS 14.0 or newer WindowGroup is only available in iOS 14.0 or newer 解决&#xff1a; 注释掉上面代码&#x…

JVM工作原理与实战(七):类的生命周期-初始化阶段

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类的生命周期 1.加载&#xff08;Loading&#xff09; 2.连接&#xff08;Linking&#xff09; 3.初始化&#xff08;Initialization&#xff09; 4.使用&#xff08;Using&…

《数字图像处理》 第11章 表示和描述 学习笔记附部分例子代码(c++opencv)

表示和描述 0. 前言1. 表示1.1 边界追踪1.2 链码1.3 使用最小周长多边形的多边形近似 2. 边界描绘子2.1 一些简单的描绘子![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/45dddc76217e4fde93a11e2631b2a71a.png#pic_center 500x)2.2 形状数2.3 傅里叶描绘子2.4 统计…

04 帧 Frame

文章目录 04 帧 Frame4.1 相机相关信息4.2 特征点提取4.2.1 特征点提取 ExtractORB()4.3 ORB-SLAM2对双目/RGBD特征点的预处理4.3.1 双目视差公式4.3.2 双目图像特征点匹配 ComputeStereoMatches()4.3.3 根据深度信息构造虚拟右目图像&#xff1a;ComputeStereoFromRGBD() 4.4 …