前言
随着大模型的爆火,多模态大模型也随之卷了起来,基本每隔一小段时间就会冒出一个新模型。
今天给大家带来一个最新发现的关于视频理解的多模态大模型。
它的名字是MiniGPT4-video,可以看的出来其是MiniGPT4的一个分支;MiniGPT4主要是图文理解,而MiniGPT4-video则是沿用其思路将其扩展到视频领域。
项目主页 https://vision-cair.github.io/MiniGPT4-video
论文链接 http://arxiv.org/abs/2404.03413.pdf
代码链接 https://github.com/Vision-CAIR/MiniGPT4-video
效果
废话不多说,先看看效果。
(1)为了测试其真实泛化效果,笔者随机从抖音找了一些视频,本地加载模型进行了尝试
demo
翻译一下模型的回复是:“这个视频是一个由婴儿和幼儿互相玩耍的片段合集。视频展示了孩子们的天真和好玩,他们参与各种活动,比如爬行、笑声和互相拥抱。视频配有欢快的音乐,氛围轻松愉快,充满了喜悦的气氛。
这个视频似乎没有特定的主题或信息,而是旨在展示年幼儿童的天性好奇和好玩。它可以用作娱乐或教育观众有关幼儿发展阶段的方式,或者仅仅是为了给他们带来微笑。
总的来说,这个视频是对童年的天真和快乐的温馨而令人愉悦的描绘。”
整体上效果还不错。
(2)论文中的一些体感case
(3)论文中的一些benchmark量化效果
怎么做到的呢
其整个模型架构设计沿用MiniGPT4的思路,即讲图像encode和文本encode拼在一起,然后送到一个已经开源的LLM模型中进行训练。具体的其一共分了三步进行逐步训练。
- stage1 : Large-scale image-text pair pretraining
第一步主要就是训练一个图像特征提取器即一个线性层linear layer。具体的图像先经过EVA-CLIP编码,然后通过linear layer将其映射到LLM,然后使用captioning loss进行更新学习linear layer。
注意这里还没有上升到要处理视频,就是简单的一个图文pair预训练。目的就是让模型先对图片有一个简单的学习和理解。为后面的视频理解打下一个基础。
- stage2 : Large-scale video-text pair pretraining
经过stage1后,模型已经对单张图片有了一个不错的理解了,现在开始让其对视频进行理解学习。所谓视频其实就是由一些列单个图片在时间序列进行串联组成的。
所以使用了如下模版来作为处理视频的模版:
<s>[INST]<Img><FrameFeature_1><Sub><Subtitle text_1>... <Img> <FrameFeature_N><Sub><Subtitle text_N><Instruction></INST>
其中<s>、[INST]、<Img>、<Sub>、</INST>
都是特殊的占位符或者说分割符号。
<FrameFeature_1>
位置就是放经过stage1的linear layer得到的图片特征。
其次一个视频除了有图像,还有字幕这个信息源,所以<Subtitle text_1>
的位置就是为了放字幕。
<Instruction>
就是放用户针对视频要提问的具体文本问题。
可以看到作者就是将一个视频的多张图片和其对应的字幕以及用户的问题直接平铺cat到一起,以此最后送到LLM进行推理理解。 具体在拼接的时候其实是拼接emb。即各个模态先各自过各自的特征网络得到emb,然后再拼接在一起送到上层的LLM也即transformer。
更具体的,作者用的LLM是Llama2-7B,其最大token窗口是4096,作者将一张图片视为64个token。然后每个视频抽45帧,所以一个视频的图像部分用掉了2880个token。同时预留了1000个token给字幕。当然随着用的底座LLM不同,其最大token窗口也是不一样的,那么抽帧数量等等上面也可以适当进行调整,比如论文中也对Mistral进行了训练,感兴趣的同学可以去看一下。
另外需要说明的是stage2这里使用了大量的视频数据,但是这些视频数据对应的输出文本其实都是对视频本身的描述,所以作者的Instruction部分就是预先定义了一些指令池,然后每条样本随机抽一个处理比如:Briefly describe these video.
- stage3 : Video question answering instruction finetuning
经过stage2后模型已经对视频有了理解的潜力,只不过需要更多样性的指令来激发模型对指令的理解。所以stage3在训练上和stage2没有任何区别,只是训练数据不一样,其<Instruction>
更加多样。
这里stage3这里的作用有点类似LLM的SFT。
- 小结
可以看到stage1和stage2其实都是在为最终的视频理解打基础,从“看懂图片到看懂视频”打基础,其实大模型领域的预训练pretrain就是在打基础,所以作者也将stage1和stage2过程命名为了是pretraining。
而stage3才是真真的微调finetuning也即在pretrain的基础上通过少量高质量的指令微调数据泛化出最终的视频理解模型。
另外作者所有的训练都是基于Lora进行的,并没有进行全参训练,所以下载模型的时候可以看到各个阶段的模型大小都比较小。
总结
有资源(pretrain阶段需要吃大量的数据,笔者看了一下基本都是按照T起步的)的同学可以做以下两个事情来玩玩:
(1) 奉行scaling law 大法,继续提升性能:比如使用全参训练、尝试基于13B的底座进行训练,又比如使用更多的优质视频数据等等:
Panda-70M:https://github.com/snap-research/Panda-70M
HD-vila-100:https://github.com/microsoft/XPretrain/blob/main/hd-vila-100m/README.md
InternVid:https://github.com/opengvlab/internvideo
相信性能肯定会有一个非常大的提升。
(2)汉化:当前的MiniGPT4-video还是一个以英文为主的模型,还可以尝试将其进行汉化,模型方面可以选择一些中文底座比如qwen等等(其实之前已经有人对MiniGPT4进行了汉化:https://github.com/Coobiw/MiniGPT4Qwen
),数据方面可以进行翻译获得。
相信不久MiniGPT4-video的一些汉化工作就会出现。
总的来说上面的工作都可以拿来练练技术和实践。至于有什么实际用处的话,笔者觉得可以多发散想想,比如目前比较火的sora,很多团队在复现其工作,其中数据就是个难点,如果MiniGPT4-video最终的效果还不错,可以考虑拿来做视频打标工作(最起码做银标数据也不错)。