性能评测第一,阿里开源可商用AI模型Ovis 1.6使用指南,AI多模态大模型首选

ops/2024/10/19 21:43:21/
aidu_pl">

什么是 Ovis 1.6 Gemma 2 9B?

Ovis 1.6 Gemma 2 9B 是阿里国际AI团队推出的最新多模态大模型(Multimodal Large Language Model,MLLM)。该模型旨在结构化地对齐视觉和文本嵌入,能够处理和理解多种不同类型的数据输入,如文本和图像。Ovis 1.6 Gemma 2 9B 模型已经开源,其权重和代码可供开发者和企业自由使用和修改。

性能评测

Ovis 1.6 Gemma 2 9B 模型在多个基准测试中表现出色,并在30B参数以下的多模态大模型中取得了综合排名第一的成绩
。具体来说,它在数学推理问答、物体识别、文本提取和复杂任务决策等方面展现了出色的表现
。例如,该模型能够准确回答数学问题,识别花的品种,支持多种语言的文本提取,甚至可以识别手写字体和复杂的数学公式
。此外,Ovis-1.6在幻觉等任务中的错误率显著低于同级别的模型,展现了更高的生成文本质量和准确性

功能特色

Ovis 1.6 Gemma 2 9B 具有以下主要功能和特色:

  • 高分辨率图像处理:支持处理极端长宽比的图像,兼容高分辨率图像,展现出色的图像理解能力。
  • 多模态数据覆盖:全面覆盖Caption、VQA、OCR、Table、Chart等多模态数据方向,显著提升多模态问答、指令跟随等任务表现。
  • 卓越模型性能:在多模态权威综合评测OpenCompass上,Ovis1.6-Gemma2-9B在30B参数以下的模型中取得了综合排名第一,超过了Qwen2-VL-7B、MiniCPM-V-2.6等模型。
  • 创新架构设计:引入可学习的视觉嵌入词表,将连续的视觉特征转换为概率化的视觉token,再经由视觉嵌入词表加权生成结构化的视觉嵌入。
  • 开源可商用:Ovis系列模型采用 Apache 2.0 许可证,Ovis1.6-Gemma2-9B的模型权重已开源。

技术原理

提出了一种新的Multimodal Large Language Models (MLLMs)架构,名为Ovis。Ovis的关键创新在于其视觉嵌入表和概率性视觉令牌的引入,这些创新旨在将视觉嵌入与文本嵌入在结构上对齐,从而增强MLLMs在处理视觉信息时的能力。

具体来说,Ovis通过以下方式实现这一目标:

  1. 视觉嵌入表:Ovis引入了一个额外的可学习视觉嵌入表,用于将连续的视觉令牌转换为结构化的形式,类似于文本嵌入表中的操作。每个视觉单词(视觉嵌入表中的每一行)都与一个嵌入向量相关联,这些向量与文本嵌入表中的嵌入向量具有相同的维度。
  2. 概率性视觉令牌:为了将视觉令牌与视觉词汇表中的视觉单词联系起来,Ovis使用一个线性头将视觉令牌映射到一个概率简单形上,这个简单形表示了视觉令牌与视觉词汇表中所有视觉单词的相似度分布。
  3. 视觉令牌的生成:视觉令牌通过视觉编码器生成,然后通过线性投影和softmax归一化转换为概率性令牌。这个概率性令牌表示视觉令牌与视觉嵌入表中所有视觉单词的相似度。
  4. 视觉嵌入的生成:Ovis通过概率性令牌索引视觉嵌入表,并使用这些索引的嵌入向量的加权平均作为最终的视觉嵌入。这种生成方式使得视觉嵌入与文本嵌入在生成过程中具有相似性。
  5. 训练策略:Ovis采用三阶段的训练策略,包括冻结LLM和视觉编码器的大部分参数,只训练特定部分的参数,然后逐步解冻并训练整个模型。
  6. 性能验证:通过在多个多模态基准测试上的评估,Ovis展示了其相对于开放源代码MLLMs和某些专有模型的优越性能。特别是在处理高分辨率图像和解决复杂的视觉任务方面,Ovis显示出显著的优势。

综上所述,Ovis的关键点在于其对视觉和文本嵌入策略的结构对齐,以及通过创新的训练策略和架构设计来提升MLLMs在多模态任务中的性能。

定价信息

Ovis 1.6 Gemma 2 9B 是开源的,用户可以免费使用其模型权重和代码。模型的开源许可证为 Apache 2.0。

如何使用

使用 Ovis 1.6 Gemma 2 9B 需要以下步骤:

安装依赖

pip install torch==2.2.0 transformers==4.44.2 numpy==1.24.3 pillow==10.3.0

加载模型

import torch
from PIL import Image
from modelscope import AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("AIDC-AI/Ovis1.6-Gemma2-9B",torch_dtype=torch.bfloat16,multimodal_max_length=8192,trust_remote_code=True).cuda()
text_tokenizer = model.get_text_tokenizer()
visual_tokenizer = model.get_visual_tokenizer()

输入图像和文本

image_path = input("Enter image path: ")
image = Image.open(image_path)
text = input("Enter prompt: ")
query = f'<image>\n{text}'

格式化对话并生成输出

prompt, input_ids, pixel_values = model.preprocess_inputs(query, [image])
attention_mask = torch.ne(input_ids, text_tokenizer.pad_token_id)
input_ids = input_ids.unsqueeze(0).to(device=model.device)
attention_mask = attention_mask.unsqueeze(0).to(device=model.device)
pixel_values = [pixel_values.to(dtype=visual_tokenizer.dtype, device=visual_tokenizer.device)]with torch.inference_mode():gen_kwargs = dict(max_new_tokens=1024,do_sample=False,top_p=None,top_k=None,temperature=None,repetition_penalty=None,eos_token_id=model.generation_config.eos_token_id,pad_token_id=text_tokenizer.pad_token_id,use_cache=True)output_ids = model.generate(input_ids, pixel_values=pixel_values, attention_mask=attention_mask, **gen_kwargs)[0]output = text_tokenizer.decode(output_ids, skip_special_tokens=True)print(f'Output:\n{output}')

适用场景

Ovis 1.6 Gemma 2 9B 适用于多种场景,包括但不限于:

  • 数学推理问答:能够准确回答数学问题。
  • 物体识别:识别花的品种等物体。
  • 文本提取:支持多种语言的文本提取。
  • 复杂任务决策:例如识别手写字体和复杂的数学公式。
  • 图像描述生成:通过对图片的识别处理能够给出菜谱。
  • 视觉问答:在图像理解任务上表现出色。

项目链接

  • ModelScope
  • GitHub
  • Huggingface
  • arXiv

http://www.ppmy.cn/ops/126809.html

相关文章

面试应该问什么?

在求职者面试的过程中&#xff0c;向面试官提问是一个展现自己积极态度、对职位和公司兴趣以及进一步了解工作环境和职业发展机会的重要环节。以下是一些求职者可以在面试中向面试官提问的问题&#xff0c;这些问题旨在帮助你更全面地了解未来的工作环境、团队文化、以及个人职…

VScode实现服务器免密登录(亲测有效)

目录 1 免密步骤1.1 在本地生成密钥1.2 在vscode中下载Remote-SSH1.3 配置SSH文件1.4 在服务器中添加本地公开密钥1.5 远程免密连接试验 2 后记 1 免密步骤 1.1 在本地生成密钥 window R打开命令面板 ssh-keygen1.2 在vscode中下载Remote-SSH 1.3 配置SSH文件 本地密钥的文…

IBM Flex System服务器硬件监控指标解读

随着企业IT架构的日益复杂&#xff0c;服务器的稳定运行对于保障业务连续性至关重要。IBM Flex System作为一款模块化、可扩展的服务器解决方案&#xff0c;广泛应用于各种企业级环境中。为了确保IBM Flex System服务器的稳定运行&#xff0c;监控易作为一款专业的IT基础设施监…

git提交信息写错处理方式

在Git中&#xff0c;你可以通过使用rebase命令来合并提交记录。以下是一个简单的步骤来合并一系列提交&#xff1a; 使用git rebase -i开始交互式变基。在打开的编辑器中&#xff0c;你会看到一个提交列表。若要合并提交&#xff0c;将要合并的提交前面的pick改为squash或s。保…

文件上传漏洞-绕过js验证

1.漏洞原理&#xff1a; Web应用系统虽然对用户上传的文件进行了校验&#xff0c;但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件&#xff0c;就会导致基于js的校验很容易被绕过。 2.判断页面是否存在前…

【Flutter】Dart:类

在 Dart 中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程的核心概念之一&#xff0c;提供了一种封装数据和功能的方式。理解 Dart 中的类以及它的相关特性是开发 Flutter 应用的基础。本教程将深入介绍 Dart 中类的定义、属性、构造函数、方法、接口、Mixin 以及…

python 作业1

任务1: python为主的工作是很少的 学习的python的优势在于制作工具&#xff0c;制作合适的工具可以提高我们在工作中的工作效率的工具 提高我们的竞争优势。 任务2: 不换行 换行 任务3: 安装pycharm 进入相应网站Download PyCharm: The Python IDE for data science and we…

git submodule add用法

背景 介绍 git submodule add 命令用于将一个 Git 仓库作为子模块添加到另一个 Git 仓库中。子模块是一个独立的 Git 仓库&#xff0c;但它被嵌套在另一个 Git 仓库中&#xff0c;并且可以通过主仓库进行管理。当你需要在主项目中引用另一个项目&#xff08;子模块&#xff09…