类Blip2的视觉文本多模态算法

news2024/11/24 14:31:10

一、Blip2出现的意义不比ChatGPT差

BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

论文链接https://arxiv.org/abs/2301.12597

代码仓库:https://github.com/salesforce/LAVIS/tree/main/projects/blip2

总体思路:图像与语言特征空间对齐,这样就能复用训练好的大模型

如下图,语言编码(这里是VQA),LLM模型(这里是LLAMA)都是冻结训练的。

1 训练过程

1.1 第一阶段训练 

只看生成图像模型(Bootstrapping Pre-trained Image Models)部分,从冻结图像编码器(ViT)引导视觉-语言表示学习,强制 Q-Former 学习与文本最相关的视觉表示。下图左边为图像解码器+内部放大的Q-Former。Q-Former 通过一组可学习的嵌入(Learned Queries),与三个损失函数进行训练。下面详细说明这三个损失函数。

 

        1)图文匹配损失(image-text matching loss

        (上图右部分的第一个矩阵)训练模型得到“图文细粒度对齐”的能力。

        Query(这是Learne Queries和图片ViT编码经过cross-attention后的结果,后面统称为Query,不做翻译)和文本可以看到彼此,最终获得一个几率 (logit) 用以表示文字与图像是否匹配。这是一个二值分类任务,要求模型预测一个图像-文本对是正的(匹配的)还是负的(不匹配的)。

        2)基于图像的文本生成损失(image-grounded text generation

        (上图右部分的第二个矩阵)训练模型得到“依据Query生成文本”的能力。

        Query内部可以相互计算注意力但不计算文本词元对Query的注意力,同时文本内部的自注意力使用因果掩码且需计算所有Query对文本的注意力。

        3)图文对比损失 (image-text contrastive loss)

        (上图右部分的第三个矩阵)训练模型得到“图像信息与文本信息对齐”的能力。首先利用对比学习方法进行“单模态特征抽取”,然后通过相识度运算损失函数最大化互信息(Mutual Information)。

        每个Query的输出都与文本输出的 CLS 词元计算成对相似度,并从中选择相似度最高的一个最终计算对比损失。在该损失函数下,查询嵌入和文本不会 “看到” 彼此。

1.2 第二阶段训练

我们将Q-Frormer(附带冻结图像编码器)连接到冻结LLM,以获取LLM的生成语言能力。如下图所示,我们使用了一个全连接层,将输出Query embedding Z线性投影到与LLM的文本嵌入相同的维度。然后,将线性投影的Query embedding前置到输入text embedding上,作为软视觉提示(soft visual prompts)。以上的做法都是依据于“Q-Former在第一训练阶段被用来训练提取视觉表示”这一前提。这减少了LLM学习视觉-语言对齐的负担,从而减轻了灾难性的遗忘问题。

 

 二、SEEChat,自己的孩子自己得疼

论文链接:

GitHub - 360CVGroup/SEEChat: Multimodal chatbot with computer vision capabilities integrated

这是我们的团队搞的VQA多模态大模型。搞到最后身心俱疲。这可能就是资源少的团队搞大模型的能力天花板了。

总体思路:整体框架与Blip2相似,语言模块改为清华大学的ChatGLM-6B。

1. 训练过程

1.1 第一阶段训练 图文对齐

如同Blip2第一训练阶段。使用360人工智能研究院开源的Zero数据集,共计2300万图文对桥接层进行训练。这里训练了50轮。

1.2 第二阶段训练 人机对齐

如同Blip2第二训练阶段。衔接GLM中文语音模块,使用LLAVA开源数据集158K instruction翻译成中文的数据对桥接层和语言模型部分进行微调。这部分大约训练300轮。

2. 推理过程

图像经ViT,和Learned Queries 在Q-Former进行cross-attention后,与文本embedding进行的拼接。拼接后的结果经语言模块ChatGLM-6B输出结果。

3. 小团队大模型天花板(因体量小,而无法解决的问题)

二轮微调训练的数据还不够。158K 万图文依然不够,让最后输出的所有问答结果都有一种图片描述caption的味道。尝试过加LoRA的方法,但是效果不好,大概率是数据集的问题。因为同样用LoRA的中文VQA算法,VisualGLM效果就很好。下面我给大家介绍一下。

三、VisualGLM,如要玩中文多模态,还是用这个吧

代码仓库:

GitHub - THUDM/VisualGLM-6B: Chinese and English multimodal conversational language model | 多模态中英双语对话语言模型

视频讲解:https://www.bilibili.com/video/BV14L411q7fk/

这个工程与360的SEEChat很相似,是GLM的官方多模态嫁接实现。但是因为清华的资源比较好,在“图像编码器ViT”与“语言模型ChatGLM”处都使用LoRA进行训练,效果会变好。

训练过程

第一训练阶段,使用大量低质量图文对,对 ViT的LoRA,Q-Former进行学习。​​​​​第二训练阶段使用高质量图文对,对Q-Former,ChatGLM的LoRA进行微调学习。

注意:在清华大学公布的视频中,作者提到并没有完全冻结ViT与ChatGLM的参数,为了避免灾难性遗忘。但究竟什么叫“没有完全冻结”参数,作者并没有详细公布。

训练目标

对比损失(如上图):输入ChatGLM的视觉特征与对应文本的语义特征对齐。

自回归损失:根据图像生成正确的文本

训练数据

        1) CogView工作积累的30M中文图文对

        2) 精选LAION+CC12M的100M英文图文对

        3) 来自其他工作和数据集的视觉问答指令微调数据集

        4) 自己构建的数据集(有这个,就很难复现了)

        VisualGLM-6B更令人兴奋的一个方面是其集成了模型量化技术,用户可以在消费级显卡上本地部署模型,INT4量化级别只需要8.7G的显存。同时还有微调模块代码。

四、类BLIP2模型的通病

1. 图像细节信息捕捉不足

        这大概率是ViT的问题了。ViT对全局性描述很好,但细节处理能力一般。个人感觉将ViT改进成其他transform视觉backbone网络,是未来发展的趋势。

2. 大语言模型常见问题:复读机行为,重复用户问题

        复读机问题比如:ABCABCABC 不断循环输出到 max length。对于这种现象可能得解释是:生成文本本质上是找条件概率的最大值token。生成重复内容,条件概率 P(B|A)一直是最大的。这是语言模型本身的一个弱点,无论是否微调,都有可能出现。并且,理论上良好的指令微调能够缓解大语言模型生成重复内容的问题。

        重复用户问题,原因未知。

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

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

相关文章

解密GIS系统:数字化地球的智慧导航之道

作为现代科技与地理信息的完美结合,地理信息系统(GIS)在如今的社会中发挥着越来越重要的作用。GIS系统通过整合地理数据、分析空间关系和可视化信息,为我们呈现了一个数字化的地球,带来了许多令人惊叹的功能与作用。 ①…

服务器返回 413 Request Entity Too Large

问题 上传一个大于1.5M的文件时,报错:413 Request Entity Too Large 使用的配置 1、用的是docker环境,还有一层代理,代理用的镜像是:jwilder/nginx-proxy 2、docker里是有php和nginx 确认配置 docker里的php和nginx都配置了上传的限制是20M以上,包括请求超时时间也是…

【unity之IMGUI实践】游戏结束流程封装实现【七】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

把握前沿大模型风向标?这场大会一定不能错过!

2023年全球AI浪潮迭起,大语言模型热度空前,生成式人工智能为千行百业高质量发展带来更多想象空间。作为前沿科技风向标、汇聚全球开发者的顶级盛会,WAVE SUMMIT 2023深度学习开发者峰会正式定档8月16日,在北京望京凯悦酒店召开。本…

振弦采集仪完整链条的岩土工程隧道安全监测

振弦采集仪完整链条的岩土工程隧道安全监测 隧道工程是一种特殊的地下工程,其建设过程及运行期间,都受到各种内外力的作用,如水压、地震、地质变形、交通荷载等,这些因素都会对隧道的安全性产生影响。因此,对隧道的安…

【C++】开源:mumble跨平台语音通信配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍mumble跨平台语音通信。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

二分查找及详细注意事项

二分查找是很基础的一种算法 例题: 在一个有序数组中查找具体的某个数,如果找到了返回,这个数的下标。找不到的返回-1 其原理图如图所示 因为是有序的数列,所以可以将要查找的数与中间的数进行比较,如果要查找的数比…

【论文】【生成对抗网络五】Wasserstein GAN (WGAN)

【题目、作者】: 紫色:要解决的问题或发现的问题 红色:重点内容 棕色:关联知识,名称 绿色:了解内容,说明内容 论文地址: 论文下载 本篇文章仅为原文翻译,仅作参考。…

C# 根据图片的EXIF自动调整图片方向

PropertyItems 代码 /// <summary>/// 根据图片exif调整方向/// </summary>/// <param name"img"></param>public void RotateImage(Bitmap img){var exif img.PropertyItems;byte orien 0;var item exif.Where(m > m.Id 274).ToArra…

从单平台运营到多平台服务,Live Market打造跨境产业集合平台

随着全球贸易和数字化的不断发展&#xff0c;跨境电商市场已经成为全球贸易的重要组成部分。在这个竞争激烈的市场中&#xff0c;品牌需要寻找更好的出海跨境运营孵化服务&#xff0c;而多平台服务已经成为了品牌出海的必选之路。Live Market是一家跨境电商产业集合平台&#x…

leetcode 135. 分发糖果

2023.8.1 这道题只从前向后遍历会出各种问题&#xff0c;所以最后决定向前向后各遍历一次。 先定义一个饼干数组biscuits&#xff0c;记录每个孩子的饼干数量&#xff0c;初始化每个孩子饼干数量为1。 然后从前向后遍历、从后向前遍历&#xff0c;使其满足“相邻两孩子评分更高…

day17 | 654.最大的二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

文章目录 一、最大的二叉树二、合并二叉树三、二叉搜索树中的搜索四、验证二叉搜索树 一、最大的二叉树 654.最大的二叉树 构建二叉树的题目&#xff0c;都用前序遍历。 因为我们一定要先构建根节点&#xff0c;才能继续向后构建。 递归函数的参数和返回值&#xff1a; Tree…

问道管理:总资产大于总市值好吗?

在财政领域&#xff0c;总财物和总市值是两个非常重要的指标。总财物是指公司所有的财物&#xff0c;包括固定财物、流动财物、无形财物等&#xff0c;而总市值则是指公司股票在商场上的总价值。当总财物大于总市值时&#xff0c;这是否是一个好的信号呢&#xff1f;咱们将从多…

【万字长文】SpringBoot整合MyBatis搭建MySQL多数据源完整教程(提供Gitee源码)

前言&#xff1a;在我往期的博客介绍了2种关于如何使用SpringBoot搭建多数据源操作&#xff0c;本期博客我参考的是目前主流的框架&#xff0c;把最后一种整合多数据源的方式以博客的形式讲解完&#xff0c;整合的过程比较传统和复杂&#xff0c;不过我依旧会把每个实体类的思路…

【C++初阶】C++基础(下)——引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr

目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.5 传值、传引用效率比较 1.6 引用和指针的区别 2. 内联函数 2.1 概念 2.2 特性 3.auto关键字&#xff08;C11&#xff09; 3.1 类型别名思考 3.2 auto简介 3.3 auto的使用细则 3.4 auto不能推…

企业级IT应用运维监控层次架构设计

企业基本都有自己的IT系统&#xff0c;而每个IT系统都有自己的监控系统。 企业级的IT应用监控架构是一种综合性的解决方案&#xff0c;涉及到很多层级和相应的工具。随着企业IT系统的规模和复杂程度的不断增加&#xff0c;监控和管理系统也面临着越来越大的挑战。 大家有时在…

【算法心得】善用js可以把函数写在函数里的特性;善用spread表达式生成新数组

https://leetcode.cn/problems/combinations/ 善用js可以把函数写在函数里的特性 这样维护全局变量很烦 把子函数直接写在combine()内部&#xff0c;n和k可以直接用&#xff0c;也不用因为ans是全局的&#xff0c;每次来一个新的case要专门将ans清空了 善用spread表达式生成新…

2023年推荐的四款出色财务管理软件,助力您高效管理财务

在当今数字化时代&#xff0c;各类数字化工具逐渐普及&#xff0c;其中财务管理软件成为各个企业的标配工具。财务管理软件市场也逐渐百花齐放&#xff0c;那么2023年有什么好用的财务管理软件吗&#xff1f;本文就为大家推荐2023好用的四款财务管理软件&#xff01; 一. Zoho …

Vue 常用指令 v-model 双向数据绑定

之前的指令&#xff0c;无论使用哪一种&#xff0c;都是在代码当中定义的内容。在web开发当中经常要去获取用户的输入&#xff0c;v-model可以十分方便的将表单的值和实例当中的数据关联起来。 这样就可以十分便捷的获取和设置表单元素的值了。&#xff08;注意是表单元素&…

基于Spirngboot运动会管理系统

一&#xff1a;技术栈 SpringbootVueElement-UIMavenMysqlredis 二&#xff1a;角色 1.管理员&#xff08;创建运动会项目&#xff0c;视频&#xff0c;运动会开幕式等&#xff09; 2.裁判&#xff08;打分&#xff09; 3.运动员&#xff08;报名参赛&#xff09; 二&#…