微信扫码
与创始人交个朋友
我要投稿
1、高推理效率
mPLUG-Owl3 以 llava-next-interleave 为基准,将模型的 first token latency 缩小了 6 倍。这意味着在实际应用中,用户能够更快地获得模型的响应,极大地提升了交互体验。同时,单张 A100 能建模的图像数目提升了 8 倍,达到了 400 张图片。对于长视频的处理,实测 4 秒就能看完一部 2 小时的电影。这种高效的推理能力,使得 mPLUG-Owl3 在处理大规模多模态数据时具有明显的优势。
2、不牺牲准确性
在追求高推理效率的同时,mPLUG-Owl3 并没有牺牲模型的准确性。它在多模态大模型所涉及的各种场景,包括单图、多图、视频领域的诸多 benchmarks 上达到了 SOTA(State Of The Art,即当前最佳水平)。这意味着无论是对图像的识别、分类,还是对视频内容的理解和分析,mPLUG-Owl3 都能够提供准确可靠的结果。
1、hyperattention 模块的工作原理
2、共享语言模型的 layer norm
hyperattention 采取了一种并行 cross-attention 和 self-attention 的策略。使用共享的 query 去与视觉特征交互,通过一个 adaptive gate 融合两者的特征,使得 query 可以根据自身语义针对性地选择与之相关的视觉特征。这种设计可以提高模型对多模态数据的理解能力,同时也能够提高模型的效率。
为了建模图像在原始上下文中与文本的相对位置关系,mPLUG-Owl3 引入了多模态交错的旋转位置编码 mi-rope。这种编码方式可以为视觉的 key 建模位置信息,并在 cross-attention 引入 attention mask,让原始上下文中在图片之前的文本不能看到后面的图片对应的特征。这些设计点为 mPLUG-Owl3 带来了进一步的效率提升,保障了它仍然能具备一流的多模态能力。
例如,在给定四张狗的照片和一个关于图片 5 中狗的分类问题时,mPLUG-Owl3 能根据已有的图片信息和知识进行准确分类并给出理由。这种多模态检索增强的功能,使得模型能够更好地处理复杂的多模态问题,提高了模型的实用性。
例如,在视频内容分析中,mPLUG-Owl3 可以通过对视频的理解和分析,提取关键信息,进行视频分类、标签生成等任务。在智能推荐中,它可以根据用户的观看历史和兴趣爱好,推荐相关的视频内容。在视频监控中,mPLUG-Owl3 可以实时分析视频画面,检测异常行为,提高监控效率和安全性。
在视觉问答基准测试中,选择了多个广泛使用的数据集,包括 VQAv2、OK - VQA、GQA 和 VizWizQA 等。这些数据集涵盖了不同类型的问题和图像场景,能够全面地评估模型的视觉问答能力。
在通用 MLLM 基准测试中,使用了 MMBench - EN、MMBench - CN、MM - Vet 和 POPE 等数据集。这些数据集涵盖了多种任务和场景,包括图像描述、图像分类、视觉推理等,能够全面地评估模型的通用多模态大语言模型能力。
mPLUG - Owl3 在这些数据集上达到了先进水平。在 MMBench - EN 和 MMBench - CN 数据集上,mPLUG - Owl3 的表现尤为突出,在多个任务上的准确率都高于其他模型。在 MM - Vet 和 POPE 数据集上,mPLUG - Owl3 也取得了较好的成绩。然而,在 AI2D 数据集上,mPLUG - Owl3 未达到先进水平,这可能是由于该数据集的特殊性和复杂性。
以下是基于魔搭社区提供的 mPLUG-Owl3-7b-240728 模型进行本地部署测试的步骤:
git clone https://github.com/X-PLUG/mPLUG-Owl.git
cd mPLUG-Owl/mPLUG-Owl3pip install -r requirements.txt
pip install modelscope
3、下载模型
使用 modelscope 中的 snapshot_download 函数下载模型。第一个参数为模型名称,参数 cache_dir 用于指定模型的下载路径。
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('iic/mplug-owl3-7b-240728', cache_dir='/root/autodl-tmp', revision='master')
执行代码下载完成后模型文件会存放到 /root/autodl-tmp 路径下。
使用以下代码加载 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 Image
from transformers import AutoTokenizer, AutoProcessor
from 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) / n
idxs = [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)# FPS
frame_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 frames
video_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+中大型企业
2024-05-30
2024-09-12
2024-06-17
2024-08-06
2024-08-30
2024-04-21
2024-06-26
2024-07-07
2024-06-14
2024-07-21
2024-09-26
2024-09-26
2024-09-01
2024-07-15
2024-07-14
2024-07-10
2024-07-02
2024-06-29