论文题目:SEMICON: A Learning-to-hash Solution for Large-scale Fine-grained Image Retrieval

论文链接:http://www.weixiushen.com/publication/eccv22_SEMICON.pdf

代码链接:https://github.com/aassxun/SEMICON

动机

大多数现有的深度哈希方法仅支持通用目标检索,如汽车、飞机,这无法满足我们的实际需求。因此,最近关于深度哈希的工作已经开始关注细粒度图像检索,这需要准确检索图像的类别,例如不同种类的动植物等,而不仅是通用类别。

创新点

作者提出了 Suppression-Enhancing Mask based attention and Interactive Channel transformatiON (SEMICON)。SEMICON 有两个分支:一个是全局特征学习分支,具有单个全局哈希单元,用于表示目标 (全局) 级别的含义;另一个是局部模式学习分支,具有多个局部哈希单元,用于表示多个局部级别的含义。此外,SEMICON 还有两个关键模块,Suppression-Enhancing Mask based attention (SEM)Interactive Channel transformatiON (ICON)。SEM 应用于局部模式学习分支的每个学习阶段,动态地定位关键图像区域。对于 ICON,则在每个特征张量上使用该模块,将特征的通道作为 token embeddings (token 常用于 NLP中,每个单词为一个 token,在 CV 中,通常将图像中的一个 patch 作为一个 token),实现不同通道之间的交互。这篇文章的创新点可以总结为以下两点:

(1) 提出了 SEMICON,用于处理细粒度的哈希学习任务;

(2) 设计了 SEM 和 ICON 来分别维持不同激活区域之间的关系以及建立不同通道之间的相关性。

方法论

整体框架

通常,全局局部特征在细粒度的视觉任务中都至关重要。因此,SEMICON 的整体框架维持了一个全局特征学习分支和一个局部模式学习分支,如下图所示。相应地,哈希码的学习也由两个单元组成,即全局级哈希映射单元和局部级哈希映射单元。具体来说,全局级哈希映射单元被用于捕获目标级二进制哈希码,而局部级哈希映射单元被划分为 m 个子线性编码器,有利于显式地获得部分级二进制哈希码。因此,SEMICON 最终学习的哈希码包含目标级和部分级含义。此外,作者提出的基于抑制增强掩模的注意力 (SEM) 模块和交互式通道转换 (ICON) 模块被用于生成有区别度的全局级特征和相关的局部级特征。

对于每张输入图片 I,经过主干网络提取深度激活张量,公式如下:

随后,T 会经过一个全局转换网络 \phi,该网络由卷积层堆叠而成,被用于提取全局特征,公式如下:

其中,\theta _{global} 为全局转换网络中的参数。

此外,T 也会经过局部模式学习分支,该分支由注意力引导 P_{1}\epsilon R^{c\times H\times W} 组成,该引导被用于在第一阶段中生成注意力掩码 M_{1},生成的掩码与 T 逐元素相乘,公式如下:

随后,SEM 模块被用于在接下来的 m-1 个阶段中生成注意力掩码 M_{i}。此外,为了获得一个特定于语义信息的表示,T_{i}^{'} 还会经过一个局部转换网络 \phi ^{'} (该网络与全局转换网络具有相同的结构),公式如下:

随后,ICON 分别作用在 \hat{T} 和 \hat{T}_{i}^{'},在各张量中产生跨通道的交互。

最后, \hat{T} 和 \hat{T}_{i}^{'} 还会经过全局平均池化层 (GAP),产生全局特征 x^{global} 和 m 个局部特征 x_{i}^{local}。为了生成二进制码,二进制码映射模块由 m + 1 个线性编码器组成,

这些编码器将  映射为  。 最终,哈希码学习模块将作用在 ,以生成最终二进制哈希码,

SEM

SEM 模块可以维持不同激活区域之间的关系。具体来说,对于张量 T,通过以下公式可获得注意力引导 P,

获得 P_{1} 后,再经过一个 1*1 卷积就可得到 M_{1}。至于剩下的 m-1 个注意力图,则由 SEM 生成,这不仅有助于抑制(而不是简单地擦除)先前最具辨别力的区域,还有助于增强其他激活的区域。作者首先通过 softmax 函数来计算前一阶段的注意力图 M_{i-1} 中每个单元的权重:

随后,对该注意力图中的所有权重 (共 H×W 个),求出均值和标准差。随后对每个单元的权重进行如下操作 (f_{SEM}),

其中,α 用于正则化判别区域的抑制率和其他激活区域的增强率。

此外,前一阶段的注意力引导 P_{i-1} 通过执行 element-wise Hadamard product 变为 P_{i} (不太理解,需看代码辅助理解)。 第 i 个注意力图 M_{i} 随后由第 i 个 1×1 卷积层 \varphi _{i} 生成,

通过执行这种基于抑制-增强掩码的注意力操作,前一阶段的注意力引导中最具辨别力的区域将被部分抑制 (不是简单的 erasing)。同时,那些未激活的区域将被进一步抑制,而其他激活的区域将受到关注。因此,可以保持前一阶段的激活区域与之后生成的激活区域之间的关系。

ICON

ICON 的框架图如上图所示。在所有通道上直接执行交互式通道变换的计算复杂度是相当大的。 因此,对于给定的张量 ,作者将其分成几个部分,并设计了一个两阶段的交互式通道转换模块 (如下图所示),可以直接在传统的深度哈希框架中使用,以减少计算开销。

具体来说,第一阶段是由堆叠的 N 个 identical parts 组成。给定 G,将深度张量划分为 N 个长度 (图中为 d) 相等的子张量 。对每个 G_{i} 进行交互通道转换操作,生成 G_{i}^{'},以便在子张量内部通过不同通道进行交互。第一阶段中的交互式通道转换操作可以描述为将唯一的 query Q_{i} 以及 key-value 对 K_{i}V_{i} 映射到输出 \hat{G}_{i}Q_{i}K_{i} 以及 V_{i} 由 G_{i} 经过 1*1 卷积层产生。上述操作可用以下公式描述,

其中,\delta 为一个固定的正数偏置项。

为了让不同的子张量进行交互,将 G_{i}^{'} 中每个特征图视为一个 token (每个 G_{i}^{'} 均有 d 个特征图),并将各 G_{i}^{'} 中相同位置的特征图重组为 G_{i}^{''} (可参考上图)。具体来说,每个 G_{i}^{''} 由 N 个通道组成,

随后,ICON 的第二阶段会作用在 G_{i}^{''} 上,处理过程与 ICON 的第一阶段相同。在这两个阶段之间,作者采用了 BN 和 ReLU,并在每一阶段之后都采用了残差连接。

哈希码学习

作者基于全局和局部特征,进行了哈希码学习。假设有 q 个数据查询点  以及 p 个数据库点 ,对于每个 q_{i} 和 p_{j},它们均由一个全局特征及 m 个局部特征组成,

其中,k 为最终二进制哈希码的长度。哈希学习的目标是学习查询点和数据库点的二进制哈希码,并同时保持它们的相似性。哈希码的学习过程可表示为:

其中,Γ 表示所有数据库点的索引,Ω ⊆ Γ 表示查询集点的索引,表示成对监督信息,β 和 γ 为权衡两部分的超参数。

实验

作者在 CUB200-2011、Aircraft、Food101、NABirds以及 VegFru 共五个数据集上进行实验,实验结果如下,

与 SOTA 方法 A^{2}-Net 相比,SEMICON 在 Aircraft 和 VegFru 数据集上分别提升了 11.42% 和 17.17% 的 mAP。此外,SEMICON 在中等规模细粒度数据集 (例如 CUB200-2011 和 Aircraft) 以及大规模细粒度数据集 (例如 NABirds 和 VegFru) 上都获得了优异的结果。这些结果验证了 SEMICON 的有效性,以及它在细粒度检索中的实用性。

消融实验的结果如下,

结论

这篇文章提出了 SEMICON 来处理大规模细粒度图像检索任务。SEMICON 中包含了 SEM 和 ICON,分别用于保持不同激活区域之间的关系以及捕获细粒度部分的相关性。此外,通过包含全局级和局部级两个单元的哈希映射模块,可分别从具有不同级别的特征中生成最终学习的二进制哈希码

ECCV2022细粒度图像检索SEMICON学习记录相关推荐

  1. ECCV2022细粒度图像检索SEMICON代码学习记录

    代码链接:GitHub - aassxun/SEMICON 环境配置 # 创建&激活虚拟环境 conda create -n semicon python==3.8.5 conda activ ...

  2. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

  3. 基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

    转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发.打磨.完成了 Hawkeye--细粒度图像识别深度学习开源工具库,供相关领域研究人员和 ...

  4. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  5. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  6. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  7. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  8. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  9. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

最新文章

  1. 代码审查工具 sonarqube 简介
  2. 修改注册表给windows防火墙添加例外 ------------ 转
  3. 【嵌入式】C语言高级编程-地址对齐(07)
  4. CSS 选择器权重计算规则
  5. linux查看程序中最耗时的代码,【Linux】CPU时间与处理器耗时
  6. Linux 如何将eth1网卡修改为eth0
  7. Unity Physics.Raycast踩坑
  8. [Ubuntu]在Ubuntu系统下连接远程Ubuntu服务器并传输文件:安装putty, filezilla
  9. 【云和恩墨】Oracle初学者入门指南-什么是 Metalink 或 MOS ?
  10. Linux下查看NVIDIA的GPU使用情况
  11. iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
  12. Win10企业版安装应用商店
  13. Pico Neo3 VR Pro 开发新手入门有感(避坑与心得,新手学习必备,瞬移射线传送,移动,射线传送光圈效果,传送指定区域)
  14. Rider编译UE5项目RD报错
  15. 交换机VLAN 模式trunk和access 区别
  16. IP营销要从内部打破小众圈层的壁垒,“内容+社交”必不可少
  17. 云主机被挖矿解决方法
  18. P12证书转BKS证书
  19. 背诵考研英语单词计划总览
  20. facebook第三方登录前后端分离

热门文章

  1. 设计模式:设配器模式
  2. Android播放M3U8格式视频失败
  3. 如何添加共享计算机用户,局域网共享,教您局域网共享怎么设置
  4. 定积分的基本性质1 线性性质
  5. Play-To-Earn游戏将接管电子游戏行业?
  6. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....
  7. 边缘检测论文简读、开源代码和数据集合集
  8. 最大似然估计方法介绍
  9. 【行业云说直播间】-智慧能源 低碳未来正式上线
  10. 《机器学习 公式推导与代码实现》随书PPT示例