【多模态】19、RegionCLIP | 基于 Region 来实现视觉语言模型预训练

news2024/11/18 9:39:42

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 Region-based Language-Image Pretraining
      • 2.2 目标检测的迁移学习
    • 三、效果
      • 3.1 数据集
      • 3.2 实现细节
      • 3.3 结果

论文: RegionCLIP: Region-based Language-Image Pretraining

代码:https://github.com/microsoft/RegionCLIP

出处:CVPR2022 Oral | 微软 | 张鹏川

一、背景

近期,视觉-语言模型取得了很大的突破,如 CLIP 和 ALIGN,这些模型使用了极大的图文对儿来学习图像和文本的匹配,并且在很多无手工标签的情况下也取得了很好的效果。

为了探索这种思路能否在 region-caption 的情况下起作用,作者基于预训练好的 CLIP 模型构建了一个 R-CNN 形式的目标检测器。

主要思路:

  • 先从输入图像中抠出候选区域
  • 然后使用 CLIP 模型将抠出的区域和 text embedding 进行匹配

在这里插入图片描述

  • 图 1 a-b 展示了在 LVIS 上的结果,当使用 proposal 作为输入时,CLIP 的得分无法代码定位的质量,可以看出不准的框得分为 65%,较准的框得分为 55%。
  • 图 1b 中对比了使用 gt 框作为输入,CLIP 在 LVIS 框上的分类准确率只有 19%
  • 所以,直接将预训练好的 CLIP 拿来用于对 region 的分类不太适合

作者想探索一下这种差别来源于哪里?

  • 首先可以想到,CLIP 模型的训练是使用整个 image 作为输入的,使用的是 image-level 的文本描述来训练的,所以,模型学习到的是整张图的特征
  • 所以这种模型无法将文本概念和图像中的区域联系起来

本文如何解决 image 和 region 之间的差距:

  • 作者通过使用 vision-language 预训练的模型来探索如何学习 region 的表达
  • 主要思想是在预训练过程中,将 image region 和 text token 进行对齐

面临的问题:

  • image-text pairs 中不包含 image region 和 text token 的对齐关系
  • 整张图的文本描述是不全的,也就是图中的有些目标是没有体现在文本描述中的

二、方法

在这里插入图片描述
本文的目标是学习一个区域级别的视觉-语义空间,能够覆盖足够丰富的目标词汇且用于开放词汇目标检测

  • 假设文本描述 t 能够描述图像 I 中的区域 r
  • 在视觉-语义空间,从 r 中抽取到的 visual region representation 能够和 text representation 很好的匹配上

总体框架图如图 2:

  • V t V_t Vt :CLIP 的 visual encoder, L L L :CLIP 的 language encoder
  • V V V:本文需要训练的 visual encoder,使用 V t V_t Vt 进行初始化,
  • 我们的目标是训练一个 visual encoder V V V 类实现对 image region 的编码,并且将这些编码和 language encoder 输出的语言编码对齐
  • 为了克服缺少大规模 region 描述的问题,如图 2 底部,作者构建了一个目标词汇池,通过将词汇填入 prompt 来构建 region 的描述,并且借助 teacher encoder V t V_t Vt 来将这些描述和使用图像定位网络得到的图像区域进行对齐
  • 通过使用这些创建的 region-text pairs,visual encoder V V V 就需要通过对比学习和词汇整理来学习将这些 pairs 对齐

2.1 Region-based Language-Image Pretraining

1、Visual region representation

可以使用现有的目标定位器(如 RPN)或密集滑动窗口 来进行图像区域的生成

作者使用经过人工标注 bbox 训练过的 RPN 来生成,这里不对 bbox 的类别进行区分

  • 对于一个输入 batch,使用 RPN 产生 N 个 image regions
  • 使用 visual encoder V V V 进行视觉特征抽取,并使用 RoIAlign 来 pooling,且 V V V 的权重是使用 teacher V t V_t Vt 的来进行初始化的

2、Semantic region representation

一个单个的图像通常会包含丰富的语义信息,多个不同类别的目标,且人工标注这么大规模哦对数据也不太可行

所以,作者首先构建了一个大的词汇池,来尽可能的覆盖所有区域词汇,如图 2 所示,而且建立的词汇池是从文本语料库中解析得来的

有了词汇池后,按照如下的方式来构建每个区域的语义表达:

  • 第一步,将 concept 填入 prompt 模版(a photo of a kite)
  • 第二步,使用预训练的 language encoder L 来得到语义特征表达
  • 最后,使用语义编码就能表达每个区域词汇的特征表达 { l j } j = 1 , . . . , C \{l_j\}_{j=1,...,C} {lj}j=1,...,C

3、visual-semantic alignment for regions

① 如何对齐 region-text pairs:使用 CLIP 来构建伪标签,即使用 teacher model CLIP 预测的得分最大的 concept 作为该区域的描述

  • 作者借用 teacher visual encoder 来建立 region-text 之间的关系,这里的 text 表示语义编码,区域 r i r_i ri 的 visual representation v i t v_i^t vit 是从 teacher visual encoder V t V_t Vt 中抽取的

  • 然后,计算 v i t v_i^t vit { l j } \{l_j\} {lj} 的匹配得分,得分最高的就和区域进行关联起来,然后就能得到每个区域的伪标签: { v i , l m } \{v_i, l_m\} {vi,lm}

    在这里插入图片描述

② 如何预训练:

  • 同时使用来自网络的 region-text pairs 和 image-text pairs

  • region-text pairs 就是通过 ① 的方法来创建的

  • 拿到上述 region-text pairs { v i , l m } \{v_i, l_m\} {vi,lm},使用对比学习 loss 和蒸馏 loss 来训练 visual decoder,总共包含 3 部分

    在这里插入图片描述

    • region-text 的对比学习 loss 如下, τ \tau τ 是预定义的温度参数, N r i N_{ri} Nri 是 region r i r_i ri 的 negative textual samples,也就是在一个 batch 中和 region r i r_i ri 不匹配但和其他区域匹配的

      在这里插入图片描述

      在这里插入图片描述

    • 除了对比学习 loss 以外,还有考虑每个图像区域的知识蒸馏,蒸馏 loss 如下, q i t q_i^t qit 是从 teacher model 得到的 soft target, q i q_i qi 是 student model 得到的预测

      在这里插入图片描述

    • image-text 的对比学习 loss L c n t r s t − i m g L_{cntrst-img} Lcntrstimg 可以从 region level 扩展而来,也就是特殊情况,即 ① 一个 box 覆盖了整张图,② 文本描述来源于网络,③ negative samples 是从其他图像而来的文本描述

零样本推理

预训练之后,训练得到的 visual encoder 可以直接用于 region reasoning 任务,比如从 RPN 获得区域,从训练的 visual encoder 得到该区域的视觉表达,然后和文本词汇表达进行匹配,得到相似度最高的文本

实验证明使用 RPN score 能够提升 zero-shot 推理的效果,所以作者也使用了 RPN objectness score + category confidence score 的均值来作为最终的得分,用于匹配。

2.2 目标检测的迁移学习

预训练中,本文的 visual encoder 是从 teacher model 提供的 region-text alignment 中学习的,不需要人为一些操作,所以也会有一个噪声,当引入更强的监督信号(如人为标注 label)时,可以进一步 fine-tuning visual encoder,如图 2

如何将预训练网络迁移到目标检测器呢,作者通过初始化目标检测器的 visual backbone 来实现,先使用现有的 RPN 网络来进行目标区域的定位,然后将区域和文本匹配

开放词汇目标检测:

  • 对基础类别,使用类似于 focal loss 的加权权重 ( 1 − p b ) γ (1-p^b) \gamma (1pb)γ p b p^b pb 是预测的概率, γ \gamma γ 是超参数,该加权权重能缓解模型对预训练中的知识的遗忘,尤其是当数据集中有很少的基础类时(如 coco),作者猜测如果基础类别很少,模型可能会对基础类别过拟合,对新类的泛化能力会降低
  • 对背景类别,作者使用固定的 all-zero 编码方式,并且使用预定义的权重

三、效果

3.1 数据集

预训练时,作者使用:

  • 来自于 Conceptual Caption dataset (CC3M) 的 image-text pairs,包括 300 万来自网络的 pairs
  • COCO Caption(COCO Cap),包含 118k images,每个 images 约有 5 个人工标注的 captions
  • 作者从 COCO/CC3M 中抽取了目标词汇,过滤掉了出现频次小于 100 的词汇,得到了 4764/6790 个词汇

为了开放词汇目标检测的迁移学习,作者使用 COCO 数据集和 LVIS 数据集的基础类来训练。

  • COCO:48 个基础类,17 个新类
  • LVIS:866 个基础类,337 个新类

作者使用目标检测标准测评:AP 和 AP50

  • COCO:使用 AP50 测评新类、基础类、所有类
  • LVIS:rare 类也就是 novel 类,即测评新类的 AP (APr)、基础类的 AP (APc/APf)、所有类的 AP (mAP)

3.2 实现细节

1、预训练

  • teacher model 和 student model :都是预训练的 CLIP(ResNet50)
  • RPN:使用 LVIS 的基础类别训练
  • 默认模型:使用 CC3M 数据集,使用从 COCO Cap 解析出来的词汇
  • 优化器: SGD、batch = 96、learning rate = 0.002, maximum iteration = 600k、 100 regions per image.

2、目标检测迁移

  • 使用 detectron2 基于 Faster RCNN [42] with ResNet50-C4 结构作为检测器
  • RPN:使用目标数据集的基础类别来训练
  • SGD:batch=16,initial learning = 0.002,1x schedule
  • focal scaling: γ = 0.5 \gamma=0.5 γ=0.5

3、目标检测零样本推理

  • RPN:使用 LVIS 的基础类别训练得到的 RPN
  • NMS:threshold=0.9
  • τ = 0.01 \tau=0.01 τ=0.01

3.3 结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

要理解用户空间与内核空间之间的关系

需要对内核有深入的认识。从两个不同的角度来理解内核:一是从静态角度,内核可以被看作一个类库,对外提供API接口;二是从动态角度,内核启动多个内核线程提供系统服务,这些线程在ps命令下可以被看到。 当用户…

二级制部署kubernetes(1.20)

😘作者简介:一名运维工作人员。 👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。 🙏创作不易,动动小…

HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力

ArkTS卡片开放了使用动画效果的能力,支持显式动画、属性动画、组件内转场能力。需要注意的是,ArkTS卡片使用动画效果时具有以下限制: 以下示例代码实现了按钮旋转的动画效果: Entry Component struct AttrAnimationExample { St…

系列二、RocketMQ简介

一、概述 RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向Apache软件基金会捐赠RabbitMQ,成为Apache孵化项目。2017年9月25日,Apache宣布RocketMQ孵化成为Apache顶级项目(TLP),成为国内…

01)docker学习 centos7离线安装docker

docker学习 centos7离线安装docker 在实操前可以先看下docker教程,https://www.runoob.com/docker/docker-tutorial.html , 不过教程上都是在线安装方式,很方便,离线安装肯定比如在线麻烦点。 一、什么是Docker 在学习docker时,在网上看到一篇博文讲得很好,自己总结一下…

日期类的实现【C++】

1、Date.h #pragma once #include <iostream> using namespace std;class Date { public:Date(int year 1, int month 1, int day 1);void Print();//Date& operator(const Date& d); //赋值重载int GetMonthDay(int year, int month);bool operator<(con…

CSDN周赛66期图文题解 - 路灯亮度 池塘水量

本期非编程题考察更多是对原书的阅读理解&#xff0c;可能还是因为自己理解不够&#xff0c;翻了半天书&#xff0c;还是错了两道。失之我命&#xff0c;不多废话。 本期编程题比较符合我的胃口&#xff0c;有陷阱&#xff0c;有技巧&#xff0c;窃以为是最近不少期里比较有意…

华为eNSP通过VMnet8虚拟网卡,NAT转换访问互联网

防火墙上配置&#xff1a; 配置G1/0/1接口IP地址&#xff0c;其实G1/0/1的IP就是终端PC1的网关地址。 配置G1/0/0接口自动获取IP地址&#xff0c;从VMnet8中自动获取地址。 配置安全区域zone,把对应的接口加入到对应的zone中 配置安全策略&#xff0c;放通trust安全区域到u…

基于Vue3+LeaderLine实现画线时对应点放大精确选点功能

我们在画线时&#xff0c;可能开始结束位置选择不准&#xff0c;导致测量结果会有偏差&#xff0c;所以新增放大功能&#xff0c;如下所示 核心源码&#xff1a; <template>...<el-col :span"2" v-if"largeImageSelected"><!-- 显示在右…

Redis简介,设置redis内存大小,设置redis淘汰机制,查看内存占用情况,内存占用分析

为什么使用Redis缓存数据库 我们日常的开发&#xff0c;无非是对数据的处理。程序的定义也可以这样狭义的解释&#xff1a;算法数据。可见数据库是多么重要的工具。但是关系型数据库的读写能力在200-1000次/秒不等&#xff0c;服务器好点可能更多&#xff0c;这导致在高并发的…

w10修改cmd用户中文名

注销当前使用的账户&#xff0c;使用Administrator登录。右击左下角的开始&#xff0c;找到注销 一般注销之后&#xff0c;是没有Administrator登录的&#xff0c;因为Windows自动将它禁用了&#xff0c;所以在注销之前&#xff0c;你应该先右击我的电脑&#xff0c;点击管理&a…

学习笔记十三:云服务器通过Kubeadm安装k8s1.25,供后续试验用

Kubeadm安装k8s1.25 k8s环境规划&#xff1a;初始化安装k8s集群的实验环境先建生产环境服务器&#xff0c;后面可以通过生成镜像克隆node环境修改主机名配置yum源关闭防火墙关闭selinux配置时间同步配置主机 hosts 文件&#xff0c;相互之间通过主机名互相访问 **192.168.40.18…

argo workflows archived 归档设置

由于工作需要配置argo workflows归档&#xff0c;介绍一下大致步骤: 文章目录 1.在k8s中是找这个configmap2.编辑configmap3 配置数据库用户名和密码&#xff1a;4.把workflow这个pod删掉&#xff0c;让他重新生成一个 1.在k8s中是找这个configmap kubectl get cm -n argo2.编…

SpringBoot集成Lock4j 底层使用Redission 实现分布锁

Lock4j 在分布式系统中&#xff0c;实现锁的功能对于保证数据一致性和避免并发冲突是非常重要的。Lock4j是一个简单易用的分布式锁框架&#xff0c;而Redisson是一个功能强大的分布式解决方案&#xff0c;可以与Lock4j进行集成。 操作步骤 第一步&#xff1a;添加依赖 首先&…

uniAPP 视频图片预览组件

效果图 思路&#xff1a;处理文件列表&#xff0c;根据文件类型归类 已兼容 H5 ios 设备&#xff0c;测试已通过 浙政钉&#xff0c;微信小程序 视频资源因为&#xff0c;没有预览图&#xff0c;用灰色图层加播放按钮代替 <template><!--视频图片预览组件 -->&l…

【2023最新教程】6个步骤从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…

使用MyBatis(1)

目录 一、什么是MyBatis 二、搭建MyBatis开发环境 &#x1f345;添加MyBatis依赖 &#x1f345;在数据库添加数据 &#x1f345;设置MyBatis配置 &#x1f388;数据库的相关连接信息&#x1f388;xml的保存和设置路径 三、使用MyBatis模式和语法操作数据库 &#x1f34…

BGP的介绍

目录 BGP基础 BGP的发展历史 BGP在企业中的应用 距离矢量型协议和路径矢量型协议的区别 BGP的特征 1.可控性 2.可靠性 3.AS-BY-AS BGP的对等关系 BGP的数据包 1.open报文 2.Keepalive报文 3.Update报文 4.Notification 报文 5.Route-refresh报文 BGP的状态机 …

GitLab备份升级

数据备份(默认的备份目录在/var/opt/gitlab/backups/下&#xff0c;生成一个以时间节点命名的tar包。) gitlab-rake gitlab:backup:create新建repo源&#xff0c;升级新版本的gitlab vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.…

EMQ X 集群部署

EMQ X 消息服务器集群基于 Erlang/OTP 分布式设计,集群原理可简述为下述两条规则: MQTT 客户端订阅主题时,所在节点订阅成功后广播通知其他节点:某个主题(Topic)被本节点订阅。 MQTT 客户端发布消息时,所在节点会根据消息主题(Topic),检索订阅并路由消息到相关节点。 1. 集…