AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


阿里 mPLUG-Owl3 震撼登场:通用多模态大模型的创新风暴来袭
发布日期:2024-09-20 10:34:27 浏览次数: 1688 来源:小兵的AI视界


在当今人工智能领域,多模态大模型的发展正以惊人的速度改变着我们与技术交互的方式。阿里发布的 mPLUG-Owl3 通用多模态大模型,以其在多图、长视频理解等方面的卓越表现,成为了行业内的焦点。本文将深入探讨 mPLUG-Owl3 的技术特点、实现原理以及广泛的应用场景,带您领略这一强大模型的魅力。


mPLUG-Owl3 模型特点


1高推理效率


mPLUG-Owl3 llava-next-interleave 为基准,将模型的 first token latency 缩小了 6 倍。这意味着在实际应用中,用户能够更快地获得模型的响应,极大地提升了交互体验。同时,单张 A100 能建模的图像数目提升了 8 倍,达到了 400 张图片。对于长视频的处理,实测 4 秒就能看完一部 2 小时的电影。这种高效的推理能力,使得 mPLUG-Owl3 在处理大规模多模态数据时具有明显的优势。


2不牺牲准确性


在追求高推理效率的同时,mPLUG-Owl3 并没有牺牲模型的准确性。它在多模态大模型所涉及的各种场景,包括单图、多图、视频领域的诸多 benchmarks 上达到了 SOTAState Of The Art,即当前最佳水平)。这意味着无论是对图像的识别、分类,还是对视频内容的理解和分析,mPLUG-Owl3 都能够提供准确可靠的结果。


二、技术实现


mPLUG-Owl3 与传统模型的不同之处在于,它不需要提前将视觉序列拼接到语言模型的文本序列中,从而规避了长视觉序列带来的巨额计算开销和显存占用。为了实现视觉信息融入语言模型,团队提出了一种轻量化的 hyperattention 模块。


1hyperattention 模块的工作原理


通过在整个语言模型中稀疏地扩展 4 transformer block,就能用较小的代价将 LLMLanguage Model)升级成多模态 LLM。视觉特征在从视觉编码器抽取出来后,会通过一个简单的线性映射把维度对齐到语言模型的维度。随后,视觉特征只会在这 4 transformer block 与文本交互,保留了细粒度的信息。


这种设计的优势在于,它既能够有效地融合视觉信息和语言信息,又能够避免传统方法中因拼接视觉序列而带来的计算负担。同时,通过稀疏扩展 transformer block,模型可以更加高效地处理多模态数据,提高推理速度。


2共享语言模型的 layer norm


hyperattention 模块中,选择共享语言模型的 layer norm 对于稳定学习新引入的 cross-attention 至关重要。Layer norm 可以对输入数据进行归一化处理,使得模型在训练过程中更加稳定,避免了梯度消失或爆炸等问题。通过共享 layer norm,模型可以更好地融合视觉和语言信息,提高模型的性能。


3并行 cross-attention self-attention


hyperattention 采取了一种并行 cross-attention self-attention 的策略。使用共享的 query 去与视觉特征交互,通过一个 adaptive gate 融合两者的特征,使得 query 可以根据自身语义针对性地选择与之相关的视觉特征。这种设计可以提高模型对多模态数据的理解能力,同时也能够提高模型的效率。


4多模态交错的旋转位置编码 mi-rope


为了建模图像在原始上下文中与文本的相对位置关系,mPLUG-Owl3 引入了多模态交错的旋转位置编码 mi-rope。这种编码方式可以为视觉的 key 建模位置信息,并在 cross-attention 引入 attention mask,让原始上下文中在图片之前的文本不能看到后面的图片对应的特征。这些设计点为 mPLUG-Owl3 带来了进一步的效率提升,保障了它仍然能具备一流的多模态能力。


三、功能应用



1多模态检索增强


对于模型没有学过的知识,mPLUG-Owl3 能通过检索系统进行补充。并且,它不仅能基于检索知识正确回复,还能给出它基于哪一条知识做出的判断,以及详细的判断依据。这对于下游研发人员开发和调试非常友好。


例如在给定四张狗的照片和一个关于图片 5 中狗的分类问题时mPLUG-Owl3 能根据已有的图片信息和知识进行准确分类并给出理由。这种多模态检索增强的功能,使得模型能够更好地处理复杂的多模态问题,提高了模型的实用性。


2多图推理


mPLUG-Owl3 能够正确理解不同材料(多图)中的内容关系,并进行推理。比如,它能通过两张图像所见,激活语言模型的常识知识,并围绕两张图片进行推理,判断左边的动物能否在右边的环境中存活,并给出解释。还能察觉两张图片风格上的差异性,并且意识到两张图中的人物虽然风格不同,但其实是同一个角色。


这种多图推理的能力,使得 mPLUG-Owl3 在图像识别、分类、场景理解等方面具有广泛的应用前景。例如,在图像搜索、智能安防、医疗影像分析等领域,mPLUG-Owl3 可以通过对多张图片的分析和推理,提供更加准确和全面的结果。

3长视频理解


mPLUG-Owl3 可以观看超长视频,并且能在 4 秒内开始回答用户关于视频的问题。无论是对开头、中间还是结尾的细致片段提问,都能对答如流。这种长视频理解的能力,使得 mPLUG-Owl3 在视频内容分析、智能推荐、视频监控等领域具有巨大的应用潜力。


例如,在视频内容分析中,mPLUG-Owl3 可以通过对视频的理解和分析,提取关键信息,进行视频分类、标签生成等任务。在智能推荐中,它可以根据用户的观看历史和兴趣爱好,推荐相关的视频内容。在视频监控中,mPLUG-Owl3 可以实时分析视频画面,检测异常行为,提高监控效率和安全性。


基准测试


1视觉问答基准测试


在视觉问答基准测试中,选择了多个广泛使用的数据集,包括 VQAv2OK - VQAGQA VizWizQA 等。这些数据集涵盖了不同类型的问题和图像场景,能够全面地评估模型的视觉问答能力。


mPLUG - Owl3 在这些数据集上表现出色,优于其他 8B 参数级别的语言模型。在 VQAv2OK - VQA GQA 等数据集上,mPLUG - Owl3 的准确率明显高于其他模型。在 VizWizQA 数据集上,mPLUG - Owl3 也取得了较好的成绩。虽然在 TextVQA 上略低于 Idefics2,但仍超过其他 8B 模型。


2通用 MLLM 基准测试


在通用 MLLM 基准测试中,使用了 MMBench - ENMMBench - CNMM - Vet POPE 等数据集。这些数据集涵盖了多种任务和场景,包括图像描述、图像分类、视觉推理等,能够全面地评估模型的通用多模态大语言模型能力。


mPLUG - Owl3 在这些数据集上达到了先进水平。在 MMBench - EN MMBench - CN 数据集上,mPLUG - Owl3 的表现尤为突出,在多个任务上的准确率都高于其他模型。在 MM - Vet POPE 数据集上,mPLUG - Owl3 也取得了较好的成绩。然而,在 AI2D 数据集上,mPLUG - Owl3 未达到先进水平,这可能是由于该数据集的特殊性和复杂性。


3视频处理能力测试


在视频基准测试中,mPLUG - Owl3 展示了出色的处理能力。它能够有效地处理不同时长的视频,准确地回答与视频内容相关的问题。在处理长视频时,mPLUG - Owl3 能够保持较高的准确率,并且能够捕捉视频中的时间序列信息,进行有效的推理和回答。


4多图像理解能力测试


在多图像理解基准测试中,mPLUG - Owl3 NLVR2 Mantis - Eval 数据集上超越了现有模型。它能够准确地理解不同图像之间的关系,进行跨图像推理,并且能够回答与多图像场景相关的问题。然而,在 BLINK 数据集上,mPLUG - Owl3 的表现较弱,这可能是由于该数据集的难度较大或者模型在处理某些特定类型的多图像场景时存在不足。


、本地部署


以下是基于魔搭社区提供的 mPLUG-Owl3-7b-240728 模型进行本地部署测试的步骤:


1下载代码


下载GitHubmPLUG-Owl代码
git clone https://github.com/X-PLUG/mPLUG-Owl.git

2、安装依赖


使用以下命令安装相关依赖:
cd mPLUG-Owl/mPLUG-Owl3pip install -r requirements.txt
安装modelscope用于下载模型文件
pip install modelscope

3下载模型

使用 modelscope 中的 snapshot_download 函数下载模型。第一个参数为模型名称,参数 cache_dir 用于指定模型的下载路径。

#模型下载
from modelscope import snapshot_downloadmodel_dir = snapshot_download('iic/mplug-owl3-7b-240728', cache_dir='/root/autodl-tmp', revision='master')

执行代码下载完成后模型文件会存放到 /root/autodl-tmp 路径下

4加载模型


使用以下代码加载 mPLUG-Owl3-7b-240728 模型,目前仅支持 attn_implementation 中的 .['sdpa', 'flash_attention_2']

import torchmodel_path = '/root/autodl-tmp/mPLUG/mPLUG-Owl3-7B-240728'config = mPLUGOwl3Config.from_pretrained(model_path)print(config)# model = mPLUGOwl3Model(config).cuda().half()model = mPLUGOwl3Model.from_pretrained(model_path, attn_implementation='sdpa', torch_dtype=torch.half)model.eval().cuda()

5、图片对话

输入图片,与模型进行聊天对话
from PIL import Imagefrom transformers import AutoTokenizer, AutoProcessorfrom decord import VideoReader, cpu # pip install decordmodel_path = '/root/autodl-tmp/mPLUG/mPLUG-Owl3-7B-240728'tokenizer = AutoTokenizer.from_pretrained(model_path)processor = model.init_processor(tokenizer)image = Image.new('RGB', (500, 500), color='red')messages = [  {"role": "user", "content": """<|image|>Describe this image."""},{"role": "assistant", "content": ""}]inputs = processor(messages, images=image, videos=None)inputs.to('cuda')inputs.update({'tokenizer': tokenizer,'max_new_tokens':100,'decode_text':True,})g = model.generate(**inputs)print(g)

6、视频对话

输入视频,与模型进行聊天对话
from PIL import Imagefrom transformers import AutoTokenizer, AutoProcessorfrom decord import VideoReader, cpu # pip install decord
model_path = '/root/autodl-tmp/mPLUG/mPLUG-Owl3-7B-240728'tokenizer = AutoTokenizer.from_pretrained(model_path)processor = model.init_processor(tokenizer)messages = [  {"role""user""content""""<|video|>Describe this video."""},{"role": "assistant", "content": ""}]
videos = ['/nas-mmu-data/examples/car_room.mp4']MAX_NUM_FRAMES=16
def encode_video(video_path):def uniform_sample(l, n): gap = len(l) / nidxs = [int(i * gap + gap / 2) for i in range(n)]return [l[i] for i in idxs] vr = VideoReader(video_path, ctx=cpu(0))sample_fps = round(vr.get_avg_fps() / 1)# FPSframe_idx = [i for i in range(0, len(vr), sample_fps)]if len(frame_idx) > MAX_NUM_FRAMES:frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES) frames = vr.get_batch(frame_idx).asnumpy()frames = [Image.fromarray(v.astype('uint8')) for v in frames]print('num frames:', len(frames))return framesvideo_frames = [encode_video(_) for _ in videos]inputs = processor(messages, images=None, videos=video_frames)
inputs.to('cuda')inputs.update({'tokenizer': tokenizer,'max_new_tokens':100,'decode_text':True,})g = model.generate(**inputs)print(g)

请注意,在实际部署和测试中,你需要确保图片路径的正确性,并根据具体的应用场景和需求对输入数据和输出结果进行适当的处理。此外,还可以参考官方关于该模型的详细文档和示例,以获取更准确的使用方法和最佳实践。


阿里的 mPLUG-Owl3 通用多模态大模型以其高推理效率、不牺牲准确性的特点,以及创新的技术实现和广泛的应用场景,在人工智能领域树立了新的标杆。通过轻量化的 hyperattention 模块,mPLUG-Owl3 成功地实现了视觉信息与语言信息的高效融合,为多模态数据的处理提供了一种全新的解决方案。


在未来,随着多模态数据的不断增长和应用需求的不断提高,mPLUG-Owl3 有望在更多领域发挥重要作用,为人们的生活和工作带来更多的便利和创新。无论是在图像识别、视频理解、智能推荐还是其他多模态应用场景中,mPLUG-Owl3 都将展现出强大的实力和潜力。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询