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

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

什么是 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 AutoModelForCausalLM

model = 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.kler.cn/news/356262.html

相关文章:

  • java 第12天 单例 接口
  • Redis入门到精通(二):入门Redis看这一篇就够了
  • 云黑系统全解无后门 +搭建教程
  • 保研考研机试攻略:python笔记(1)
  • 初识git · 远程操作
  • DAY52WEB 攻防-XSS 跨站反射型存储型DOM 型标签闭合输入输出JS 代码解析
  • Python 独立成分分析(ICA) 详解与应用案例
  • 什么是ASC广告?Facebook ASC广告使用技巧
  • 量纲分析的巅峰之作:Taylor点源爆炸模型产生始末
  • 【软件】Ubuntu下QT的安装和使用
  • 深入剖析:.Net8 引入非root用户运行的新特性提升应用安全性
  • 【AI学习】Mamba学习(九):HiPPO LegS版本
  • 05.栈介绍+实现
  • NGINX 的 Event Loop
  • 3.3关节组件
  • setuptools封装自己python包
  • Linux与Windows文件共享:Samba的详细配置(Ubuntu)
  • Spring 和 javaEE的关系
  • 基于 UDP 协议的 socket 编程:实现 UDP 服务器
  • 概率 多维随机变量与分布