【传知代码】BLIP - VLP任务的新框架(论文复现)

前言:在当今人工智能与机器学习领域,视觉-语言预训练(Vision-and-Language Pre-training, VLP)任务正逐渐崭露头角,其对于推动跨模态智能系统的进步起着至关重要的作用。在这些系统中,图像与文本不再是孤立的实体,而是能够相互理解、相互增强的互补信息源。正是在这样的背景下,我们提出了一种全新的BLIP - VLP任务框架,它不仅融合了图像与文本的最前沿技术,还通过创新的预训练策略,为跨模态智能应用开辟了新的可能性。

本文所涉及所有资源均在传知代码平台可获取

目录

概述

演示效果

核心代码

写在最后


概述

        视觉语言预训练(VLP)显著提升了众多视觉语言任务的执行效果。其中,对图像和文本进行分类是一种重要的预训练任务。尽管如此,目前大部分的预训练任务主要集中在基于理解或基于生成的任务上。这些预训练方法都没有考虑到用户对输入的反馈和交互。尽管利用Web收集的带有噪声的图像-文本对来扩充数据集在很大程度上增强了其性能,但这种方法仍然是一个不太理想的监控来源。

        BLIP代表了一种创新的VLP架构,它能够灵活地应用于视觉语言的理解和生成任务中,在视频解码系统中,字幕的处理非常重要。BLIP有效地利用了带有噪声的网络数据通过引导字幕,其中字幕生成器负责生成合成字幕,而滤波器则负责去除含有噪声的字幕。其对应的模型结构如下图所示:

        BLIP采用ViT模型作为其图像编码器,而ViT则将输入的图像分割成补丁块,并进一步将这些补丁块编码为嵌入序列,同时还使用了额外的[cls]标记以表示图像的全局特征。这种方法使得编码器能够对一个特定的目标进行分类,并且能根据用户指定的上下文信息自动地确定是否需要修改该目标。BLIP提出了一种名为编码器-解码器的多模式混合(MED)的多任务模型,其目的是为了预先训练一个具备理解和生成功能的统一模型,该模型能够在以下三种功能之一中运行:

单峰编码器

        单峰式编码器分别对图像和文本进行编码,文本编码器与BERT相同,其中[CLS]标记被附加到文本输入的开头,以总结句子。BLIP使用图像-文本对比(ITC)损失的训练单峰编码器,以对齐视觉和语言表示。

基于图像的文本编码器

        基于图像的文本编码器,同时在文本编码器的每个transformer块的自注意力层SA和前馈网络FFN之间插入一个额外的交叉注意力层CA来注入视觉信息。特定于任务的[Encode]标记附加到文本中,[Encode]的输出嵌入用于图像-文本对的多模态表示。基于图像的文本编码器使用图像-文本匹配(ITM)损失进行训练,以区分匹配和不匹配的图像-文本对。

基于图像的文本编码器

        基于图像的文本编码器以因果自注意力层取代双向自注意力层,一个[Decode]标记用于表示序列的开始,一个序列结束标记用于表示序列的结束。基于图像的文本编码器使用语言建模(LM)损失进行训练,以生成给定图像的标题。

预训练的目标函数可以从下图看出:

        BLIP在预训练中共同优化了三个目标函数,两个基于理解的目标函数和一个基于生成的目标函数。每个图像-文本对只需要通过计算量较大的ViT进行一次前向传递,并通过文本转换器进行三次前向传递,用以激活不同的功能以计算如下所述的三种损失:

图像-文本对比损失(ITC)

        图像-文本对比损失激活单峰编码器,它的目的是通过鼓励匹配的图像-文本对具有相似的表示,不匹配的图像-文本对具有差异较大的表示来对齐视觉转换器和文本转换器的特征空间。

图像-文本匹配损失(ITM)

        图像-文本匹配损失激活基于图像的文本编码器,它旨在学习图像-文本多模态表示,以捕获视觉和语言之间的细粒度对齐。ITM是一个二元分类任务,模型使用ITM头部(线性层)来预测给定图像-文本对的多模态特征是匹配的,还是负的不匹配的。

语言建模损失(LM)

        语言建模损失激活基于图像的文本解码器,其目的是生成给定图像的文本描述。该损失训练模型以自回归的方式最大化文本的可能性,优化了交叉熵损失。

        为了在利用多任务学习的同时执行有效的预训练,文本编码器和文本解码器共享除了自注意力层之外的所有参数,因为编码和解码任务之间的差异最好由自注意力层捕获。编码和解码任务之间的嵌入层,自注意力层和全连接前馈网络层的作用相似,因此,共享这些层可以提高训练效率,同时受益于多任务学习。

由于标注成本过高,高质量的人工标注图像-文本对的数量有限{(Ih,Th)},最近的工作使用了大量从网络上搜取的图像和替代文本对{(Iw,Tw)},然而,替代文本通常不能准确的描述图像的视觉内容,使他们成为一个嘈杂的信号,对于学习视觉对齐来说是次优的,如下图所示:

BLIP提出了Captioning 和Filtering(CapFilt),这是一种提高文本语料库质量的新方法,它引入了两个模块,一个用于生成给定web图像的标题的captioner,以及一个用于去除图像-文本对噪声的filter。captioner和filter都是从相同的预训练的MED模型初始化的,并在COCO数据集上分别进行微调,调优是一个轻量级的过程。

具体来说,captioner是一个基于图像的文本解码器,它使用LM目标函数进行微调,以解码给定图像的文本。给定web图像IwIw​,captioner生成合成的标题TsTs​。filter是一个基于图像的文本编码器,它使用ITC和ITM目标函数进行微调,以确定文本是否与图像匹配。如果标题预测文本与图像不匹配,则认为文本有噪声,过滤器去除原始网络文本和合成文本中的噪声文本。最后,BLIP将过滤后的图像文本对于人工注释的图像文本对结合起来形成一个新的数据集,使用它来训练一个新的模型。

演示效果

通过如下命令进行环境部署:

# 创建环境
conda create -n lavis python=3.8
conda activate lavis
pip install salesforce-lavis
# 进阶版包含源码
git clone https://github.com/salesforce/LAVIS.git
cd LAVIS
pip install -e .

BLIP对整个图像的关注程度可视化如下:

BLIP对局部分词的关注程度:

BLIP生成多个标题通过如下方式进行:

核心代码

下面这段代码的作用是加载一个预训练好的图像描述生成模型,然后使用该模型对给定的图像生成多个标题,如下:

# 加载预训练好的模型
model, vis_processors, _ = load_model_and_preprocess(
    name="blip_caption", model_type="large_coco", is_eval=True, device=device
)
# 以下是其他可以使用的模型
# model, vis_processors, _ = load_model_and_preprocess(
#     name="blip_caption", model_type="base_coco", is_eval=True, device=device
# )

# 对图像进行预处理操作
image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)

# 采用核函数采样生成多个标题
model.generate({"image": image}, use_nucleus_sampling=True, num_captions=3)

下面这段代码的作用是加载一个预训练的图像文本匹配模型,并使用该模型计算并可视化图像和文本的梯度,通过计算每个 token 的梯度并可视化。首先,获取注意力矩阵和 token 的 ID 迭代器。然后,迭代每个 token 和对应的注意力矩阵,并使用 getAttMap 函数将注意力矩阵映射到图像上进行模糊处理。最后,使用 imshow 方法将每个 token 的 Grad-CAM 结果显示在一个或多个子图中,同时在图像上方显示对应的文本:

# 加载预训练模型
# model, vis_processors, text_processors = load_model_and_preprocess("blip_image_text_matching", "base", device=device, is_eval=True)
model, vis_processors, text_processors = load_model_and_preprocess("blip_image_text_matching", "large", device=device, is_eval=True)

# 准备操作
from matplotlib import pyplot as plt
from lavis.common.gradcam import getAttMap
from lavis.models.blip_models.blip_image_text_matching import compute_gradcam
import numpy as np

dst_w = 720
w, h = raw_image.size
scaling_factor = dst_w / w

resized_img = raw_image.resize((int(w * scaling_factor), int(h * scaling_factor)))
norm_img = np.float32(resized_img) / 255

# 分别处理图像和文本
img = vis_processors["eval"](raw_image).unsqueeze(0).to(device)
txt = text_processors["eval"](caption)

# 计算梯度
txt_tokens = model.tokenizer(txt, return_tensors="pt").to(device)
gradcam, _ = compute_gradcam(model, img, txt, txt_tokens, block_num=7)

# 计算整个图像的梯度并且可视化
avg_gradcam = getAttMap(norm_img, gradcam[0][1].numpy(), blur=True)
# fig, ax = plt.subplots(num_image, 1, figsize=(15,5*num_image))
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
ax.imshow(avg_gradcam)

# 计算每一个token的梯度并且可视化
num_image = len(txt_tokens.input_ids[0]) - 2
fig, ax = plt.subplots(num_image, 1, figsize=(15, 5 * num_image))

gradcam_iter = iter(gradcam[0][2:-1].numpy())
token_id_iter = iter(txt_tokens.input_ids[0][1:-1])

for i, (gradcam, token_id) in enumerate(zip(gradcam_iter, token_id_iter)):
    word = model.tokenizer.decode([token_id])
    gradcam_image = getAttMap(norm_img, gradcam, blur=True)
    ax[i].imshow(gradcam_image)
    ax[i].set_yticks([])
    ax[i].set_xticks([])
    ax[i].set_xlabel(word)

写在最后

        通过本文的探讨,我们可以看到,BLIP-VLP新框架在图像描述生成、视觉问答、图像检索等多个领域都展现出了卓越的性能。这不仅证明了其技术的先进性,更预示着它在未来跨模态智能应用中的主导地位,现在,我们正站在跨模态智能技术的新起点上,BLIP-VLP新框架无疑为我们指明了一条充满希望的探索之路。随着技术的不断进步和应用场景的不断拓展,我们相信,这一框架将在未来引领更多的创新和突破。

        我们期待着BLIP-VLP新框架在更多领域大放异彩,为人工智能领域带来新的革命。让我们一起期待并见证跨模态智能技术的辉煌未来,共同探索这个充满无限可能的新世界。

详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第137题只出现一次的数字II

题目: 题解: class Solution:def singleNumber(self, nums: List[int]) -> int:a b 0for num in nums:b ~a & (b ^ num)a ~b & (a ^ num)return b

【vue实战项目】通用管理系统:图表功能

目录 前言 1.概述 2.数据概览页 2.1.柱状图 2.2.折线图 2.3.地图 前言 本文是博主前端Vue实战系列中的一篇文章,本系列将会带大家一起从0开始一步步完整的做完一个小项目,让你找到Vue实战的技巧和感觉。 专栏地址: https://blog.csd…

harbor1.7.1的访问报错502 bad gateway

背景: 在访问harbor镜像仓库时提示报错如下: 问题分析: 根据提供的报错内容来看时harbor服务的nginx组件服务异常了的,导致无法访问harbor服务,查看harbor服务结果如下: serviceharbor:~/harbor$ docker…

MicroPython esp32 连接wifi 配网

整体流程: 1)开启STA 和 AP 模式 2)扫描周围wifi 保存在 变量 wifi_list(后面要用到) 3) 尝试STA模式连接Wifi,并查寻状态。 4) 如果STA 无法连网,就用AP模式,创建热点。 5&a…

Vue数据动态代理机制的实现

Object.defineProperty() (1)这个方法是ES5新增的 (2)这个方法的作用是:给对象新增属性,或者设置对象原有的属性 (3)用法:Object.defineProperty(给哪个对象新增属性,‘…

【吊打面试官系列-Mysql面试题】BLOB 和 TEXT 有什么区别 ?

大家好,我是锋哥。今天分享关于 【BLOB 和 TEXT 有什么区别?】面试题,希望对大家有帮助; BLOB 和 TEXT 有什么区别 ? BLOB 是一个二进制对象,可以容纳可变数量的数据。TEXT 是一个不区分大小写的 BLOB。 1…

InfiniGate自研网关实现思路七

25.网关Nginx负载模型配置 通过模拟多个HTTP服务配置到 Nginx 做负载均衡,以学习API网关负载的配置和使用 API 网关是用于支撑分布式 RPC 接口协议转换提供 HTTP 调用的一套服务,那么 API 网关系统就需要可横向扩展来满足系统的吞吐量诉求。所以这里需…

两轮自平衡小车资料(L298N 模块原理图及使用说明+c源码)

本文详细介绍了基于STM32微控制器的两轮自平衡小车的设计与实现过程。内容包括小车的硬件选型、电路设计、软件编程以及PID控制算法的应用。通过陀螺仪和加速度计获取小车的姿态信息,利用PID控制算法调整电机输出,实现小车的自主平衡。此外,还…

Elasticsearch之写入原理以及调优

1、ES 的写入过程 1.1 ES支持四种对文档的数据写操作 create:如果在PUT数据的时候当前数据已经存在,则数据会被覆盖,如果在PUT的时候加上操作类型create,此时如果数据已存在则会返回失败,因为已经强制指定了操作类型…

调查显示各公司在 IT 安全培训方面存在差距

网络安全提供商 Hornetsecurity 最近进行的一项调查显示,许多组织的 IT 安全培训存在严重缺陷。 这项调查是在伦敦举行的 Infosecurity Europe 2024 期间发布的,调查发现 26% 的组织没有为其最终用户提供任何 IT 安全培训。 这些调查结果来自世界各地的…

Nginx的https功能和防盗链

目录 一.HTTPS功能简介 二.https自签名证书 三.防盗链 一.HTTPS功能简介 Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安…

力扣hot100:739. 每日温度/54. 螺旋矩阵

文章目录 一、 739. 每日温度二、54. 螺旋矩阵1、模拟螺旋矩阵的路径2、按层模拟 一、 739. 每日温度 LeetCode:739. 每日温度 经典单调栈问题,求下一个更大的数。 使用单调递减栈,一个元素A出栈,当且仅当它第一次出现比它更大…

Linux常见故障处理之df命令卡住不输出

一、背景说明 朋友咨询Linux系统下输入df -h命令后没有任何输出结果,博主的第一反应是/根分区磁盘空间满了,朋友说cd等其他命令可以执行。博主又猜测可能是有人误定义了命令别名,进一步确认命令卡住在等待输出页面。事后博主想起来可能是共享…

【Docker系列】跨平台 Docker 镜像构建:深入理解`--platform`参数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【计网复习】应用层总结(不含HTTP和错题重点解析)

应用层总结(不含HTTP和错题重点解析) 应用层简介 应用层的主要功能常见的应用层协议小林对于应用层通常的解释 网络应用模型 客户端-服务器模型(Client-Server Model, C/S) 特点优点缺点应用场景 对等网络模型(Peer-to…

中文文案写作有哪些合适的AIGC工具?

这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声,互动答疑环节往往反映了高校师生当前最普遍的运营困境,特此计老师在现场即兴答疑之外,会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…

8.数砖数

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/879 题目描述 给定一种 2222 规格的瓷砖,…

标准发布实施 | 《村镇污水处理一体化集成装备技术规范》

根据《中华人民共和国标准化法》以及国家标准化管理委员会、民政部联合制定的《团体标准管理规定》,依据全国团体标准信息平台和《中华环保联合会团体标准管理办法(试行)》,全国团体标准《村镇污水处理一体化集成装备技术指南》&a…

Scanpy(3)单细胞数据分析常规流程

单细胞数据分析常规流程 面对高效快速的要求上,使用R分析数据越来越困难,转战Python分析,我们通过scanpy官网去学习如何分析单细胞下游常规分析。 数据3k PBMC来自健康的志愿者,可从10x Genomics免费获得。在linux系统上,可以取消注释并运行以下操作来下载和解压缩数据。…

【下篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。上回我解释了YoloX, 今天从Yolov6开始。 YOLOv6:面向工业应用的单级物体检测框架 美团视觉人工智能事业部(Meituan Vision AI Department)于 2022 年 9 月在…