paper : link
github: link
两点:
(1)增大图像分辨率
(2)丰富图像caption
看起来都是很简单的方法,但是真正做的时候就会遇到各种问题
增大图像分辨率
- 将小图插值,还是直接训练时就用大分辨率的图像?
注:常规用的224x224算小图,对于LLM来说细节信息还是不够
答=>训练时用大分辨率的图像
这时候就会产生两个问题:
(1)测试的时候只有分辨率低的图像怎么办?
(2)大分辨率图像如何编码?ps: 预训练的CLIP往往只能编码小分辨率的图像,因为训练的时候就是这样 - 先看第二个问题,有了大分辨率的图像之后如何编码?
答:分块->编码->采样
如下图所示:
最右侧是原图,896x1344,假设将其切成6块448x448的小图,分别送进clip-vit,同时将原图缩放为448x448,得到局部特征。同样用clip-vit编码后得到全局特征。
对比一下,假如不分块,则首先将原图缩放为448x448,然后送入clip,虽然仍然会得到[cls] token对应的全局特征与每个patch的局部特征,但局部特征是缩放后的patch得到的,而上述方法直接对pixel维度分块,然后分别编码,得到的局部特征的信息量可能就会更多。
此外,提取局部特征的ViT加入了Lora微调,如果不微调就可以提前编码,训练速度快很多,但是会掉精度,但是掉的不多: r6 vs. r7,Lora列代表每个分支使用的Lora数量
丰富图像caption
这里有两种方案:
(1)常规的方案,就是原图用BLIP2得到caption,但是比较简短,于是让大语言模型扩充一下。
(2)本文的方案:分Region做Caption,然后让大语言模型合并
如图所示了,Caption分三块:
- 总的Caption: 由BLIP2和原数据集标注得到
- Region Caption: 目标检测 + Caption
- Segmentation Caption: SAM + Caption
在通过image-text相似度剔除错误的caption后,让GPT4做一个总结,得到丰富的Caption,Caption中的很多句子都可以和原图一一对应
训练
现在有了(1)模型结构(2)图像Detailed Caption,开始训练
训练实际上和其他模型没什么区别,就是用不同数据集、不同任务来训练,比如Caption,VQA, document-related VQA。只是在做Caption相关任务时,加入detailed caption,让模型输出更细节的caption。