当前位置: 首页 > news >正文

【WIP】【VLAVLM——InternVL系列】

InternVL

  1. 指出了目前VLM存在的几个问题:
    1)LLM和Vision Enc的参数量不均衡:LLM参数量已经扩大到很大了,Vision Enc还只有1B左右;
    2)视觉特征和语言特征没对齐:Vision Enc主要用纯图像数据做训练,于文本特征存在domain gap;
    3)“glue layer”效果差:也就是Vision Enc过后的几层特征映射层(QFormer),参数过少且往往随机初始化,不能有效的将视觉特征对齐;
    综上,作者认为VLM的效果问题主要制约在视觉和语言从模型到特征的不对等上。InternVL致力于解决这种不均衡;
  2. 思考:
    1)这个初版的InternVL和后面很大的不同是,为了让视觉特征对齐,专门用了一个QLLaMA进行两个阶段的预训练,目标就是将Vision Encoder的特征对其到Language上,这个是不是必要的,而且最后使用的语言模型反而不是LLaMA,而是Vicuna,这么操作是必要的嘛?我认为有些浪费,后面再看看InternVL2.5和InternVL3验证一下这个操作是不是一直被保留下来了。
    2)总的来说,这篇工作专注于缓解视觉与语言特征的不均衡上,从各模块参数量、特征对齐方式、数据选择上都下了功夫。但是用一个LLM(QLLaMA)作glue layer,用另一个LLM(Vicunna)作LLM,结构上看起来不是很简洁,感觉后续还是有进一步改进的空间的。

模型结构

总览

  1. Vision Encoder:InternViT-6B,将ViT参数量增大至6B,并针对模型width和depth进行一系列尝试,权衡速度和效果,最终确定如下模型配置。
    模型优化
  2. Lauguage Middileware:QLLaMA,将7B的LLaMA,加上了1B的queries+cross attention layer,用于适配Vision Encoder的特征。这个“MiddleWare”的意义,就是将VisionEnc输出的特征对齐到语言空间中。
    在这里插入图片描述
  3. InternVL-chat
    这里提供了两种用法,要么直接InternViT->Vicuna,要么InternViT+QLLaMA->Vicuna。但是后面好像没看到这两种用法的优劣?
    在这里插入图片描述

训练方法

在这里插入图片描述

  1. 第一阶段:参考CLIP方法,将InternViT-6B输出的图像特征和LLaMA-7B输出的文本特征进行对比学习(Contrastive Loss)。选用的数据集范围很广,可能包含噪声数据,但是可以接受。这个阶段主要目的是提升Vision Enc的基础视觉能力,并且对齐语言特征空间。补充:InternViT-6B是随机初始化的,LLaMA直接用的开源的pretrain作初始化;
  2. 第二阶段:参考BLIP方法,用(Generative Loss),只训练QLLaMA新增的query+cross attention(1B),进一步增强特征对齐的能力;并且让InternViT+QLLaMA获得image caption能力;另外这个阶段用的数据是上一阶段数据集提纯后得到的,数据量更少但是质量更好;
  3. 第三阶段:这个阶段直接在InternViT+QLLaMA后面衔接MLP+LLM(InternLM&Vecunna均可)。作者认为,由于stage1&2时VisionEnc与QLLaMA适配的很好了,而QLLaMA又和LLM的特征空间很相近,所以不需要再次对Vision和Text进行适配,所以只训练新增的MLP(可选:LLM)部分,既加速了训练又保留了LLM本身的能力;数据方面,这一阶段训练数据更精更少了,只有4 million左右的数量;
    在这里插入图片描述

实验

前面一些实验证明了InternViT-6B本身的感知能力,以及InternVL-C的zero-shot和泛化性,不详细写了。主要看下ablation study
可以看到,相比于MLP,QLLaMA能够明显涨点,作者认为这证明了QLLaMA作为glue layer能够更好的将视觉特征对齐到LLM上。(是不是有点存疑?)
在这里插入图片描述

http://www.dtcms.com/a/266670.html

相关文章:

  • Maven编译和打包插件
  • cd-agent更换cd模型(自用)
  • i18next + 原生JS 双引擎:打造前端多语言系统最佳实践
  • Android 网络请求优化全面指南
  • 韩国小说《素食者》读后感
  • C++--多态
  • 全网唯一/Qt结合ffmpeg实现手机端采集摄像头推流到rtsp或rtmp/可切换前置后置摄像头/指定分辨率帧率
  • 在 Minikube 上部署 Kubernetes Deployment 并解决 ImagePullBackOff 问题
  • WPS中配置MathType教程
  • stm32学到什么程度可以找工作?
  • Java学习第十二部分——idea各种项目简介
  • 电阻温升评估的相关测试总结
  • openlayers 判断geojson文件是否在视口内
  • Android BitmapRegionDecoder 详解
  • Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动
  • <tauri><rust><GUI>使用tauri创建一个文件夹扫描程序
  • 深度学习前置知识全面解析:从机器学习到深度学习的进阶之路
  • 《Java修仙传:从凡胎到码帝》第三章:缩进之劫与函数峰试炼
  • 鸿蒙系统(HarmonyOS)4.2 设备上实现无线安装 APK 并调试
  • Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
  • React中的useState 和useEffect
  • 记一次Linux手动设置网卡的过程
  • Spark从入门到实战:安装与使用全攻略
  • EM储能网关ZWS智慧储能云应用(13) — 企业个性化配置
  • 【CTF-Web环境搭建】中国蚁剑antSword
  • 电商分拣的“效率密码”:艾立泰轻量化托盘引领自动化流水线革新
  • ORACLE 日常查询
  • Linux三剑客:grep、sed、awk 详解以及find区别
  • RT‑DETR 系列发展时间顺序
  • 判断文件是否有硬链接