MiniGPT-4 笔记

news2025/1/23 21:14:29

目录

简介

实现方法

效果及局限

参考资料

简介

MiniGPT-4 是前段时间由KAUST(沙特阿卜杜拉国王科技大学)开源的多模态大模型,去网站上体验了一下功能,把论文粗略的看了一遍,也做个记录。

论文摘要翻译:最近发布的GPT-4展示了非凡的多模态能力,例如直接从手写文本生成网站,识别图像中的幽默元素。这些特性在以前的视觉语言模型中很少被观察到。我们认为GPT-4先进的多模态生成功能的主要原因在于使用了更先进的大型语言模型(LLM)。为了验证这一现象,我们提出了MiniGPT-4,它只使用一个投影层将冻结的视觉编码器与冻结的LLM Vicuna对齐。我们的研究结果表明,MiniGPT-4具有许多与GPT-4类似的功能,如生成详细的图像描述以及通过手写草稿来创建网站。此外,我们还观察到MiniGPT-4中的其他涌现能力,包括用给定的图像创作故事和诗歌,为图像中显示的问题提供解决方案,根据食物照片教用户如何烹饪等。在我们的实验中,我们发现只使用原始图像-文本对进行预训练,会产生缺乏连贯性的包括重复和碎片句子的不自然的输出。为了解决这个问题,我们在第二阶段创建了一个高质量、对齐良好的数据集,以使用对话模板微调我们的模型。事实证明,这一步骤对于增强模型的生成可靠性和整体可用性至关重要。值得注意的是,我们的模型计算效率很高,因为我们只使用大约500万对对齐的图像-文本对来训练一个投影层。我们的代码、预训练模型和收集的数据集可在Minigpt-4 获取。

实现方法

Minigpt-4 框架(原论文图1)

 Minigpt-4的框架如上图,它的主要目的是为了对齐预训练的视觉编码器和先进的大语言模型(LLM)。 使用大语言模型Vicuna来做语言编码器,视觉感知使用BLIP-2一样的视觉编码器:ViT + 预训练Q-Former。使用一个线性投影层将视觉编码器和LLM关联起来,也就是视觉编码器的结果经过线性投影层之后作为Vicuna的输入。Minigpt-4的训练有两个阶段:

阶段一: 

  • 预训练视觉编码器和LLM的权重都是冻结的,只有线性投影层被训练
  • 使用组合数据集来训练,数据集由Conceptual Caption、SBU、LAION 构成,共约500万的图像-文本对。
  • batch size 为256,共训练了20000步, 整个过程使用4个 A100(80GB) GPU,共花了10个小时
  • 阶段一训练完的模型能够理解图像的含义,但是生成的连贯的描述文本有困难,会出现重复单词或句子,不相关的内容等。

因为经过阶段一的训练后模型生成效果不好,所以作者们构建了一个数据集:

  • 从Conceptual Caption 数据集中随机选择了5000张图片,首先使用阶段一的模型来对这些给定的图片生成详细描述,设计了如下与Vicuna对话形式一致的prompt,prompt 中的<ImageFeature>是由前面提到的线性投影层生成的。 

 ###Human: <Img><ImageFeature></Img> Describe this image in detail. Give as many details as possible. Say everything you see. ###Assistant:

  • 为了识别到不完整的句子,会检查模型生成的句子的token数是否超过80,如果没有超过80,会使用额外的prompt: "###Human: Continue ###Assistant:" 让模型扩展生成的内容,将两部分prompt得到的结果拼成一个更详细的图像描述。

  • 前面也提到阶段一后的模型效果不理想,为了去掉错误信息,使用ChatGPT来对生成的描述进行完善,对ChatGPT使用的prompt 如下:

Fix the error in the given paragraph. Remove any repeating sentences, meaningless characters, not English sentences, and so on. Remove unnecessary repetition. Rewrite any incomplete sentences. Return directly the results without explanation. Return directly the input paragraph if it is already correct without explanation.

  • 执行上面的后处理步骤后,再通过人工确认每个图像描述的正确性以保证质量。主要是检查生成图像描述是否是想要的格式,也将chatGPT没有检测到的冗余单词和句子给去掉,最终生成了3500个满足要求的图像-句子对。

阶段二:

  • 使用创建的数据集来finetune 阶段一的模型,使用了如下模板的prompt, 里面的<instruction>是从定义好的指令集里随机选择的,指令集是类似于“ Describe this image in detail”的 “Could you describe the contents of this image for me” 的变化形式。

###Human: <Img><ImageFeature></Img> <Instruction> ###Assistant:

  • 作者强调对上述text-image prompt 没有计算回归损失 (do not calculate the regression loss for this specific text-image prompt)
  • 经过阶段二后,MiniGPT-4可以生成更自然和可靠的回应,并且这个finetune 过程非常高效,batch size 为12, 训练400 步,使用一个A100 GPU 只需要训练7分钟

效果及局限

miniGPT-4 可以达到的效果(论文图2-图13展示了案例):

  • 生成详细的图片描述
  • 识别图片中有趣的点,比如猫穿了衣服躺着的照片
  • 识别图片中不寻常的点,比如仙人掌不会出现在冰川之类
  • 从手写文字生成网站
  • 识别图片中的问题并给出解决方案
  • 根据图片内容创造诗歌和rap歌曲
  • 为图片写故事
  • 为图片中的产品打广告
  • 识别出图片中的名人
  • 提供有洞察的图片评论
  • 抽取跟图片相关的事实
  • 根据给定的照片,教用户如何做菜

局限性:

  • 语言幻想,这个主要是由于LLM模型的局限性导致的,可能通过在更高质量的图像文本对或者对齐更好的LLM来减轻。
  • 不充足的感知能力,对识别图像中的文字、空间定位等有困难。可能因为这几个因素:1. 缺少充足的对齐的关于空间信息和文本注释的图像-文本对,通过更多数据集来减轻; 2. 视觉编码器中的Q-former可能会丢失一些关键特征,替换更强的视觉感知模型来提高效果; 3. 只使用一个投影层可能没有足够的空间来学习视觉-文本对齐信息。

参考资料

1. 论文链接 https://arxiv.org/abs/2304.10592

2. github: GitHub - Vision-CAIR/MiniGPT-4: MiniGPT-4: Enhancing Vision-language Understanding with Advanced Large Language Models

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

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

相关文章

【图】DFS、BFS遍历

图有两种遍历方式&#xff1a;DFS深度优先&#xff0c;BFS广度优先。 把所有顶点访问一遍&#xff0c;且每个顶点只访问一次&#xff0c;把走过的顶点标记一下。 标记&#xff1a;为图设置一个访问标志数组visited[n&#xff3d;&#xff0c;用于标示图中每个顶点是否被访问过…

C++引用()笔记

C引用(&)笔记 1.寄存器一般只有4/8个字节&#xff0c;所以返回时候的中间变量(下图的临时变量)不一定是储存在寄存器当中 2.传引用返回可以减少拷贝&#xff0c;增加效率 但运行打印会出错的&#xff0c;因为当栈帧销毁的时候&#xff0c;清理栈帧就会得到随机值 正确表达…

西宾蜻蜓FM语音下载(qingtingdown)

一、介绍 西宾蜻蜓FM语音下载&#xff08;qingtingdown&#xff09;&#xff0c;能够帮助你下载蜻蜓FM音频节目。如果你是蜻蜓FM会员&#xff0c;它还能帮你下载会员节目。 二、下载地址 本站下载&#xff1a;西宾蜻蜓FM语音下载&#xff08;qingtingdown&#xff09; 百度…

PSP - AlphaFold2 适配不同来源搜索的 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

从零开始学习JVM(二)--类加载子系统

1. 类加载子系统介绍 JVM内存结构如下图所示&#xff1a; 程序计数器&#xff08;PC寄存器&#xff09;&#xff1a;程序计数器是⼀块⼩的内存空间&#xff0c;可以看作是当前线程所执⾏的字节码的⾏号指示器。字节码解释器⼯作时通过改变这个计数器的值来选取下⼀条需要执⾏…

PyTorch读取数据集全部进内存,使网络的训练速度提高10倍以上!!!

正常情况下&#xff0c;torch读取数据的时候是Batch Size小批量读取。首先找到所有数据集的路径保持到一个变量中&#xff0c;之后需要读取哪个数据的时候&#xff0c;就根据这个变量中的路径索引去读取。因为硬件的限制&#xff0c;从硬盘中读取数据到显存中所花的时间要远远大…

计算机体系结构实验一

计算机体系结构实验一 一.实验目的 ​理解RISC-V的指令执行的数据流和控制信号&#xff0c;熟悉指令流水线的工作过程。 二.实验过程 1.RISC-V的相关指令 实验的模拟器使用RISC-V指令集&#xff0c;为了便于后续分析&#xff0c;首先学习实验中使用的RISC-V指令。 基本RIS…

Cesium最新版使用天地图地形及注记服务

天地图三维地名服务和地形服务需要利用 cesium 开源三维地球API与天地图扩展插件共同使用&#xff0c;目前支持cesuim1.52、1.58、1.63.1。 天地图调用demo: http://lbs.tianditu.gov.cn/docs/#/sanwei/ 注意&#xff1a; demo里的地形服务地址不对&#xff0c;需要自己更换成…

MCU通用移植方案

MCU通用移植方案 目录 MCU通用移植方案前言1 硬件移植2 软件移植2.1 底层移植方法2.1.1 移植原理2.1.2 移植方法 2.2 中间层移植方法2.2.1 移植原理2.2.2 移植方法 2.3 两种移植方法比对 3 结束语 前言 因为项目的需求或者成本控制等因素&#xff0c;我们经常会遇到更换MCU的情…

华硕 PRIME H610M-A D4 i5-12490F 1060电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板华硕 PRIME H610M-A D4&#xff08;LPC Controller/eSPI Controller H610芯片组&#xff09; 处理器12th Gen Intel Core i5-12490F 六核已驱动 内…

Mysql的重要知识点以及问题

查看索引的命令 show index from mytable 索引的原理 索引用来快速地寻找那些具有特定值的记录。如果没有索引&#xff0c;⼀般来说执行查询时遍历整张表。 索引的原理&#xff1a;就是把无序的数据变成有序的查询 把创建了索引的列的内容进行排序 对排序结果生成倒排表…

货运物流小程序开发功能有哪些?

移动互联网的深入发展让网购等线上交易更加盛行&#xff0c;货运快递物流也随之增多&#xff0c;成为我们日常生活的重要组成部分。传统的货运物流管理主要依赖人工&#xff0c;不仅效率慢还容易出错。随着市场的发展以及人们对服务质量要求的提高&#xff0c;现在很多中大型货…

Oracle 12c安装

前言 版本&#xff1a;12c第二版 检查弹出窗口程序&#xff0c;需要安装xmanager,并执行以下命令&#xff1a; xhost 192.168.194.91 安装步骤如下 安装必须的安装包&#xff1a; rpm -q bc binutils compat-libcap1 compat-libstdc-33 glibc glibc-devel ksh libaio libaio…

c++ 多态与虚函数

c中多态分为静态多态和动态多态&#xff0c;静态多态是函数重载&#xff0c;在编译阶段就能确定调用哪个函数。动态多态是由继承产生的&#xff0c;指不同的对象根据所接收的消息(成员函数)做出不同的反应。例如&#xff0c;动物都能发出叫声&#xff0c;但不同的动物能发出不同…

esp32之解析json

文章目录 前言一、json的作用二、json结构三、esp32 json解析安装库解析StaticJsonDocumentDynamicJsonDocument 四、解析今天的北京天气总结 前言 在现代Web开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为常用的数据传输格式。ESP32是一款…

Netty 爱好者必看!一文详解 ChannelHandler 家族,助你快速掌握 Netty 开发技巧!

1 Channel 接口的生命周期 Channel 定义了一组和 ChannelInboundHandler API 密切相关的简单但功能强大的状态模型 1.1 Channel 的状态 状 态描 述ChannelUnregisteredChannel 已经被创建&#xff0c;但还未注册到 EventLoopChannelRegisteredChannel 已经被注册到了 EventL…

Wealth 开源的账本响应式网站系统免费部署

演示网站&#xff1a; https://wealth.willin.wang 前置准备 首先需要注册一个 Github 账号&#xff0c;Fork 这个开源项目&#xff1a; https://github.com/willin/wealth &#xff08;欢迎 Star&#xff09; 然后使用 Github 账号分别注册 Vercel 和 Planetscale&#xf…

【Linux 】 ps命令详解,查看进程pid

文章目录 ps概述ps语法指定pid进行查看 ps概述 ps 命令是最常用的监控进程的命令&#xff0c;通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令有多种不同的使用方法&#xff0c;这常常给初学者带来困惑。在各种 Linux 论坛上&#xff0c;询问 ps 命令语法的帖子屡…

双向链表--C语言实现数据结构

本期带大家一起用C语言实现双向链表&#x1f308;&#x1f308;&#x1f308; 文章目录 一、链表的概念&#x1f30e;二、链表中数据元素的构成&#x1f30e; &#x1f30d;三、链表的结构&#x1f30e; &#x1f30d; &#x1f30f;四、 双向带哨兵位循环链表的实现&#x1f3…

ROS2 中 使用奥比中光 Orbbec Astra Pro 深度相机

本文将以 Ubuntu 20.04 和 ROS2 foxy 环境为例&#xff0c;详细介绍如何在 ROS2 中使用奥比中光 Orbbec Astra Pro 深度相机。在这一篇文章中&#xff0c;你会学到如何创建工作空间&#xff0c;使用 usb_cam 功能包&#xff0c;编译安装使用 ros_astra_camera 等。 文章目录 1.…