AI-多模态-2021:FILIP【一种基于交互的细粒度图文预训练模型】

news2024/10/7 20:27:00

前言

FILIP(Fine-grained Interactive Language-Image Pretrain)是一种基于交互的细粒度图文预训练模型,用于解决图文双塔匹配模型中的细粒度匹配问题。本文对该论文进行阅读笔记,

论文:https://arxiv.org/abs/2111.07783


FILIP [1] 提出是为了解决图文匹配中的细粒度匹配问题。我们之前在博文 [2] 中曾经讨论过,在图文双塔匹配中,由于需要对图片塔的向量提前进行刷库,一些长尾的,形态较小的物体可能会在训练过程中被忽略,导致图文匹配的时候缺少对细粒度匹配的能力。为了解决这个问题,我们需要提供模型以图片和文本在线交互(online interaction)的能力,将图片以某种形式提取出每个区域的信息(ROI Detector检测每个ROI区域,或者单纯的划分patch,如ViT所做的那样),然后将文本和图片每个区域进行交互,从而模型有能力挖掘出图片中的一些细粒度信息。以第一种方式为例,如Fig 1.1所示,如果采用ROI Detector首先对图片的ROI区域进行提取,如红框所示,通过对文本『黄色桌子上的小黄人』进行在线匹配,即可实现对场景中的小黄人的细粒度匹配。

roi_for_online_interaction

Fig 1.1 以ROI Detector的方式提取出图片中的ROI区域,通过对文本和ROI区域进行在线交互(在线匹配),即可实现细粒度图文匹配的目的。

当然,这个前提是有一个足够好的ROI detector,并且其计算复杂度的代价也很高,对于在线应用比如图片搜索来说是一个比较大的负担。FILIP用了一种比较直接,也比较聪明的方法实现在线交互,其方法就是『迟交互(Late Interaction)』,想办法尽可能把交互的操作后移,从而使得pipeline的前端结果可以刷库,减少在线交互的代价。

如Fig 1.2所示,FILIP的图片编码器是ViT [3-4],对输入图片进行简单的分块后,进行线性映射输入到Transformer中,其输出就是对应每个Image Patch的Embedding向量,文本侧同样采用Transformer,其输出就是每个token的embedding。如果用x I x^IxI表示图片样本,x T x^TxT表示文本样本,那么x i I x_i^IxiI​表示batch内图片的第i ii个样本,x i T x_i^TxiT​表示batch内文本的第i ii个样本,具有同个下标的样本对{ x i I , x i T } \{x_i^I, x_i^T\}{xiI​,xiT​}我们认为是一对正样本,而下标不同的样本对{ x i I , x j T } \{x_i^I, x_j^T\}{xiI​,xjT​}我们认为是一对负样本。用f θ ( ⋅ ) f_{\theta}(\cdot)fθ​(⋅)表示图片编码器,g ϕ ( ⋅ ) g_{\phi}(\cdot)gϕ​(⋅)表示文本编码器,在不存在交互的双塔匹配模型中,如CLIP和ALIGN中,第i ii个和第j jj个样本间的相似度定义为:
s i , j I = s i , j T = f θ ( x i I ) T g ϕ ( x j T ) (1-1) s_{i,j}^I = s_{i,j}^T = f_{\theta}(x_i^I)^{\mathrm{T}} g_{\phi}(x_j^{T}) \tag{1-1}si,jI​=si,jT​=fθ​(xiI​)Tgϕ​(xjT​)(1-1)
其中f θ ( x i I ) ∈ R d , g ϕ ( x j T ) ∈ R d f_{\theta}(x_i^I) \in \mathbb{R}^{d}, g_{\phi}(x_j^{T}) \in \mathbb{R}^{d}fθ​(xiI​)∈Rd,gϕ​(xjT​)∈Rd,无论是图片编码器还是文本编码器,均对同一个图片/文本只产出一个特征向量,通过计算余弦相似度计算其图文相似性,显然这是一种全局(Global)的相似度计算方式。而在FILIP中,采用ViT和Text Transformer可以对每个图片token和文本token产出『专属』的embedding(可以认为是每个模态的细粒度局部信息),假设n 1 n_1n1​和n 2 n_2n2​分别是第i ii个图片样本和第j jj个文本样本的token数量,那么有f θ ( x i I ) ∈ R n 1 × d , g ϕ ( x j T ) ∈ R n 2 × d f_{\theta}(x_i^I) \in \mathbb{R}^{n_1 \times d}, g_{\phi}(x_j^{T}) \in \mathbb{R}^{n_2 \times d}fθ​(xiI​)∈Rn1​×d,gϕ​(xjT​)∈Rn2​×d。 我们怎么计算第i ii个和第j jj个样本间的相似度呢?此时就体现了迟交互的作用,对于第i ii个图片的第k kk个token而言,分别计算其和第j jj个文本样本的所有n 2 n_2n2​个token间的相似程度,并且挑选其中相似度最大的打分,作为第i ii个图片第k kk个token的打分代表,这个方式作者称之为『逐令牌最大相似度(token-wise maximum similarity)』。
max ⁡ 0 ≤ r < n 2 [ f θ ( x i I ) ] k T [ g ϕ ( x i T ) ] r (1-2) \max_{0 \leq r \lt n_2} [f_{\theta}(x_i^I)]_k^{\mathrm{T}} [g_{\phi}(x_i^T)]_r \tag{1-2}0≤r<n2​max​[fθ​(xiI​)]kT​[gϕ​(xiT​)]r​(1-2)
当然,对于图片样本i ii来说,这个只是第k kk个token的最大相似度打分,而我们有n 1 n_1n1​个图片token,因此会对这n 1 n_1n1​个最大相似度打分进行求平均。
s i , j I ( x i I , x j T ) = 1 n 1 ∑ k = 1 n 1 [ f θ ( x i I ) ] k T [ g ϕ ( x i T ) ] m k I (1-3) s_{i,j}^I(x_i^I,x_j^T) = \dfrac{1}{n_1} \sum_{k=1}^{n_1} [f_{\theta}(x_i^I)]_k^{\mathrm{T}} [g_{\phi}(x_i^T)]_{m_{k}^{I}} \tag{1-3}si,jI​(xiI​,xjT​)=n1​1​k=1∑n1​​[fθ​(xiI​)]kT​[gϕ​(xiT​)]mkI​​(1-3)
其中的m k I m_{k}^ImkI​标识了其最大相似度的索引,也就是m k I = arg ⁡ max ⁡ 0 ≤ r < n 2 [ f θ ( x i I ) ] k T [ g ϕ ( x i T ) ] r m_k^I = \arg\max_{0\leq r \lt n_2} [f_{\theta}(x_i^I)]_k^{\mathrm{T}} [g_{\phi}(x_i^T)]_rmkI​=argmax0≤r<n2​​[fθ​(xiI​)]kT​[gϕ​(xiT​)]r​,式子(1-3)是图片-文本侧的相似度度量,类似的,我们也可以定义出文本-图片侧的相似度度量s i , j T ( x i T , x j I ) s_{i,j}^T(x_i^T,x_j^I)si,jT​(xiT​,xjI​)。 注意到s i , j I ( x i I , x j T ) s_{i,j}^I(x_i^I,x_j^T)si,jI​(xiI​,xjT​)不一定等于s i , j T ( x i T , x j I ) s_{i,j}^T(x_i^T,x_j^I)si,jT​(xiT​,xjI​),也就是说基于最大相似度的交互,其跨模态相似度不一定是对称的,这一点和CLIP不同。

filip_frame

Fig 1.2 FILIP的框图示意,采用了跨模态迟交互后,可以进行更细粒度的匹配。

我们发现这种对每个模态的token,求另外模态的最大相似度的方法,其实类似于Fig 1.1中的交互方法,只是其没有采用ROI的方式进行匹配,而是以图片patch和文本token依次匹配的方式,如Fig 1.3所示,显然这种方式同样可以实现细粒度的图文匹配。在线上应用时候,需要对每张图片都进行刷特征并且存入正排库,刷特征的时候需要对图片每个patch的特征都进行落盘,以便在线上进行交互时候使用。如公式(1-3)所示,线上交互时可以计算s i , j T ( x i T , x j I ) s_{i,j}^T(x_i^T,x_j^I)si,jT​(xiT​,xjI​)和s i , j I ( x i I , x j T ) s_{i,j}^I(x_i^I,x_j^T)si,jI​(xiI​,xjT​),然后以其平均值作为最终相似度(Query-图片搜索应用直接用s i , j T ( x i T , x j I ) s_{i,j}^T(x_i^T,x_j^I)si,jT​(xiT​,xjI​)即可)。显然,由于需要对n 1 n_1n1​个图片patch特征都进行落盘到正排库,需要非常大量的正排存储资源,在实际落地的过程中也许会碰到一定的困难,需要进行工程上的优化。

FILIP_matching

Fig 1.3 通过对图片和文本分别进行分块(对于文本是分词,对于图片是分patch),在迟交互阶段采用的逐令牌最大相似度匹配,可以实现细粒度匹配。

作者采用了Prompt Learning的方式,对数据集采用了Prompt模版的优化,本文就不展开了。在论文中作者对图文细粒度匹配的结果进行了可视化,如Fig 1.4所示,此处的label分别为“Balloon(气球)”,“Lifeboat(救生艇)”,“Small white butterfly(小白蝶)”,“Electric Iocomotive(电力机车)”,而label后面的数字表示label的某位单词在label模版中的位置。举个例子,此处的模版为

Label模版:a photo of a {label}

当label为"Small white butterfly"的时候,label模版即为“a photo of a small white butterfly”,small在该模版中的第5位,white在第6位而butterfly在第7位。按照前文描述的交互方式,我们求出每个图片patch与label模版单词,其中的最大相似度匹配的模版位置ID,然后将这些位置ID中为label位置ID的进行高亮,这样就绘制出了如Fig 1.4所示的结果。我们可以发现这些label物体有些是非常细粒度的,如气球在原图中的视觉占比非常小,CLIP的结果和我们预期的一致,压根没有对这种细粒度物体进行响应。而FILIP的结果则能对图中patch中有气球部分的进行响应。FILIP不仅能对细粒度物体进行响应,对于大物体同样效果不俗,如Fig 1.4©所示,这个蝴蝶占据了大半个图片,此时FILIP匹配效果同样能够超过CLIP。

fine_grained_matching

Fig 1.4 对比CLIP的结果,可以发现FILIP对于图文细粒度匹配更有优势。

Reference

[1]. Yao, Lewei, Runhui Huang, Lu Hou, Guansong Lu, Minzhe Niu, Hang Xu, Xiaodan Liang, Zhenguo Li, Xin Jiang, and Chunjing Xu. “Filip: Fine-grained interactive language-image pre-training.” arXiv preprint arXiv:2111.07783 (2021).

[2]. https://blog.csdn.net/LoseInVain/article/details/122735603, 图文多模态语义融合前的语义对齐——一种单双混合塔多模态模型

[3]. https://blog.csdn.net/LoseInVain/article/details/116031656,将Transformer用在图片上:Vision Transformer论文杂谈

[4]. Dosovitskiy, Alexey, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani et al. “An image is worth 16x16 words: Transformers for image recognition at scale.” arXiv preprint arXiv:2010.11929 (2020).

 

【论文极速读】FILIP: 一种基于交互的细粒度图文预训练模型_FesianXu的博客-CSDN博客 

[论文]中文多模态数据集WuKong & FILIP & LiT-tuning - 知乎 

FILIP用细粒度的后期交互获得更好的预训练效果_qq_24876435的博客-CSDN博客 

FILIP - 知乎 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C#基础教程】第二十章、事件

目录 事件 1.事件 2.扩展EventArgs类 事件 1.事件 事件的组成&#xff1a;事件由事件发布者和事件订阅者组成。事件内包含一个私有委托。 当事件发布时&#xff0c;事件发布者会发布消息、而事件订阅者会接受到事件已发生的通知&#xff0c;并作出相应的处理。 其中&#xf…

计算机研究生就业方向之考编

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

MyBatis的缓存机制

文章目录1 MyBatis的一级缓存1.1 演示1.2 使一级缓存失效的四种情况2 MyBatis的二级缓存2.1 演示2.2 使二级缓存失效的情况&#xff1a;2.3 二级缓存的相关配置&#xff08;了解即可&#xff09;3 MyBatis缓存查询的顺序1 MyBatis的一级缓存 一级缓存是SqlSession级别的&#…

【vue加载16秒优化到2秒】Vue3加载慢的性能优化,打包后页面静态资源chunk-vendors文件过大加载慢响应慢

【写在前面】基于自己之前做vue3项目的时候发现了一个致命的问题&#xff0c;项目部署好了&#xff0c;但是加载起来反应慢半天&#xff0c;控制台一看才发现&#xff0c;有个chunk-vendors的js文件加载了十几秒&#xff0c;这无非是页面体验差到爆炸。今天就针对打包后静态资源…

【密码学基础】混淆电路(Garbled Circuit)

1 概念 混淆电路是一种密码学协议&#xff0c;以实现安全多方计算&#xff08;MPC&#xff09;。场景是当多个通信方需要共同输入数据&#xff0c;然后通过同一个函数计算出一个结果&#xff0c;但是&#xff0c;各个通信方都不允许其他人知道自己的输入是什么。混淆电路就能很…

MySQL错误码大全

MySQL的所有错误码可以从MySQL官网查看。 1.MySQL地址 首页网址 2.文档地址 以此点击如下标志。 MySQL8.0文档地址 3.错误码地址 服务码官网地址 点进去之后&#xff0c;可以看到&#xff1a; 分为三大类&#xff1a; Server Error Message ReferenceClient Error Mes…

Java大型建筑建设综合工程项目管理系统源码带原生APP源码 工程管理系统源码 Java手机端工程项目管理系统源码带客户端操作手册

客户端下载&#xff1a; 1、安卓手机端 先下载“PP助手”应用商店&#xff0c;再在PP助手中搜索“star工程”下载安装。 2、苹果手机端 苹果手机APPstore中搜索“star工程”下载安装。 建设综合工程项目管理系统&#xff0c;让公司业务管理实现可记录&#xff0c;可追踪&#…

数字图像处理(入门篇)七 图像数据预处理之灰度变化

目录 一 常用操作 1 反转 2 对比度增强 3 对比度压缩 4 伽马矫正 二 实践 1 反转、对比度增强和对比度压缩 (1) 代码 (2) 结果图 2 伽马矫正 (1) 代码 (2) 结果图 (3) 结论 (4) np.power函数 图像灰度变换&#xff1a;将原始图像中的每一个点的灰度值&#xff0c…

尚医通 (三十三) -------- 阿里云OSS、用户认证与就诊人

目录一、阿里云 oss1. 开通 对象存储 OSS 服务2. 使用 SDK 文档3. 文件服务实现搭建 service-oss 模块测试SDK封装 service 接口封装 controller 接口二、用户认证1. 需求分析2. api 接口3. 前端4. 预约挂号页面调整三、就诊人管理1. 需求分析2. api 接口3. 前端四、平台用户管…

最新阿里云服务器和GPU服务器长期优惠活动价格表

阿里云服务器优惠活动是长期的&#xff0c;在12月优惠活动大促期间云服务器价格会有所调整&#xff0c;主机教程网现在给大家分享最新的阿里云服务器优惠活动价格表。现在阿里云双十一优惠活动刚刚结束&#xff0c;随之而来的就是双12优惠活动&#xff0c;关于阿里云服务器、对…

camunda入门教程及实现原理

1、camunda简介 1、介绍&#xff1a; Camunda是一种工作流引擎。 Camunda BPM 是一个轻量级、开源灵活的工作流框架&#xff0c;是由Java开发的一个纯Java库。它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎&#xff0c;因此它可以嵌入到任何Java应用程序或运行时…

Linux 添加环境变量的两种方法 exprot 临时法 vi /etc/profile永久法

编写一个shell脚本之后&#xff0c;怎么可在任意目录运行改脚本呢&#xff1f;为什么别人写的脚本可以直接运行&#xff0c;自己写的脚本就会出现 -bash: XXXXX.sh: command not found 这样的错误呢&#xff1f; 1、举例验证&#xff0c;先新建一个HelloWorld的shell脚本&…

Alibaba 工具型技术系列,实战技术针对于项目中常用的 Excel 操作指南

ExcelIgnoreUnannotated 默认不加 ExcelProperty 的注解的都会参与读写&#xff0c;加了不会参与 通用参数 ReadWorkbook,ReadSheet 都会有的参数&#xff0c;如果为空&#xff0c;默认使用上级。 converter 转换器&#xff0c;默认加载了很多转换器。也可以自定义。 rea…

emlog模板开发基础2022最新指南

emlog模板的开发基础指南,如果想要开发emlog的模板,你必须知道那些开发内容呢&#xff1f;下面将介绍分析emlog5下的模板基本结构以及基本变量、函数的作用。 首先我们用该知道emlog的模板是位于根目录content\templates\文件夹下,每个模板都是一个单独的文件夹,文件夹以模板名…

[附源码]JAVA毕业设计-英杰学堂网上教学平台-(系统+LW)

[附源码]JAVA毕业设计-英杰学堂网上教学平台-&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

一道关于Vue的数据绑定和依赖收集的面试题

概要 分享一道Vue的面试题&#xff0c;该题涉及Vue的响应式数据绑定和依赖收集&#xff0c;希望可以加深大家对Vue原理的理解。 题面 有如下html和JS&#xff0c;要求使用Vue的响应式数据原理和依赖收集原理&#xff0c;实现createApps和ref方法。只能使用原生JS&#xff0c…

教育的本质——采用不同学习方式,学习者在两周后还能记住的内容有多少

目录 一、学习金字塔模型 二、学习曲线 三、左右脑交替学习法 一、学习金字塔模型 “学习金字塔模型”&#xff0c;人们学习的效率一共分为七个层次&#xff1a; 第一层 ~ 第四层&#xff1a;这是我们最熟悉不过的形式&#xff0c;在学生时代&#xff0c;老师在上面讲课、…

【Leetcode】225. 用队列实现栈、232. 用栈实现队列

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 225. 用队列实现栈 232. 用栈实现队列 225. 用队列实现栈 225. 用队…

91-143-Scala-集合模式泛型等

91-Scala-集合模式泛型等&#xff1a; Scala 的集合有三大类&#xff1a;序列 Seq、集 Set、映射 Map&#xff0c;所有的集合都扩展自 Iterable特质。 2&#xff09;对于几乎所有的集合类&#xff0c;Scala 都同时提供了可变和不可变的版本&#xff0c;分别位于以下两个包 不…

人工智能(AI)背后人工的力量——数据标注

尽管随着AI的普及&#xff0c;我们在生活中越来越依赖于人工智能&#xff0c;但“人工智障”的相关调侃也从来没有消失过。 相信大家都知道&#xff0c;如果我们想要让AI准确识别出图中的鸟&#xff0c;我们需要在数据集中手动将这些照片标记为鸟&#xff0c;然后让算法和图像…