Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于visual encoder部分的小问题 #8

Open
wrsnice opened this issue Oct 9, 2024 · 9 comments
Open

关于visual encoder部分的小问题 #8

wrsnice opened this issue Oct 9, 2024 · 9 comments

Comments

@wrsnice
Copy link

wrsnice commented Oct 9, 2024

大佬,

请问:CLIP模型是由一个图像编码器和一个文本编码器组成多模态模型,那么在minimind-v中llm部分接收的是来自CLIP的图像编码器信息呢还是文本编码器信息呢?

谢谢

@jingyaogong
Copy link
Owner

jingyaogong commented Oct 9, 2024

来自的是图像编码信息,而完全没有文本编码器信息

获得"文本编码"信息的前置条件是需要"有文本"
相反现在的目的是需要利用图像编码信息去"生成文本"

有其它任何问题欢迎继续交流~~

@wrsnice
Copy link
Author

wrsnice commented Oct 9, 2024

现在连接Visual encoder和LLM的中间组件是MLP/linear(类似llava?),之前像visualglm这些工作用了cross-attention,但是后来有研究表明cross-attention比mlp将会丢失更多对齐信息,这个你怎么看?

@jingyaogong
Copy link
Owner

jingyaogong commented Oct 9, 2024

现在连接Visual encoder和LLM的中间组件是MLP/linear(类似llava?),之前像visualglm这些工作用了cross-attention,但是后来有研究表明cross-attention比mlp将会丢失更多对齐信息,这个你怎么看?

其实visualglm的计算方式

image

image

等价于在投影矩阵=单层线性MLP的基础上做的Cross-Attention,残差连接也是存在的,且图像feature的维度也没有损失。从结构考虑,理论上不可能弱于MLP的表现。

另一种qwen-vl的做法是使用一组可学习的隐向量作为Q,CLIP生成的图像特征作KV进行交叉注意力操作,隐向量数的选取论文做过分析:
image
虽然qwen-vl伴随特征的压缩丢失了所谓的对齐信息,但是Query数量过多过少都会影响模型的收敛速度和最终表现(也就是图像特征并非越全越多越好),256是最佳平衡。

以上基于纯分析,虽然我没有基于此做过VLM本身的实验,但是根据个人其它方面研究经验而言,这个说法不成立(个人认为)。

如果您的表达和我的理解存在偏差或有其它进一步的研究示例观点
还请进一步交流~
谢谢!

@wrsnice
Copy link
Author

wrsnice commented Oct 9, 2024

不错的见解,现在VLM很少用cross-attention,可能是因为llava影响力比较大,而它没有使用cross-attention?(猜测)哈哈哈

还有一个想要探讨的问题,我看minimind-v中对图像进行了224*244的resize,那最终输入到LLM的 tokens 数是多少呢?这个tokens是固定的吗?还有就是LLM本身的context length对于输入大尺寸图像信息有帮助吗?

@jingyaogong
Copy link
Owner

jingyaogong commented Oct 9, 2024

不错的见解,现在VLM很少用cross-attention,可能是因为llava影响力比较大,而它没有使用cross-attention?(猜测)哈哈哈

还有一个想要探讨的问题,我看minimind-v中对图像进行了224*244的resize,那最终输入到LLM的 tokens 数是多少呢?这个tokens是固定的吗?还有就是LLM本身的context length对于输入大尺寸图像信息有帮助吗?

LlaVA更新到1.6~-NEXT至少说明了一点,多层非线性MLP效果同样可以做到90分,尽管Cross-Attention理论有更优的95分上限,但是开销更大。效果调优的其它途径还有很多,还远远没有卷完,动MLP层的收益值得权衡。而做VLM追求奥卡姆剃刀原则即可,不该花的钱不花,非必须的复杂度不加,可以实现需求即可。

最终输入的token数是 (224/32) * (224/32) +1= 49 +1 =50;都是固定的,任何图像都变成50个token输入;所以数量固定的话,context length改变没有什么关系。

@wrsnice
Copy link
Author

wrsnice commented Oct 9, 2024

/32是做类似缩放操作是吗?那如果我把32变成16,8...这种是不是压缩损失的视觉信息就会少?

@jingyaogong
Copy link
Owner

/32是做类似缩放操作是吗?那如果我把32变成16,8...这种是不是压缩损失的视觉信息就会少?

vit的patch是32,取决于clip模型,不是随便“变”的

patch16的话算出来257个token更好

@wrsnice
Copy link
Author

wrsnice commented Oct 10, 2024

谢谢。

如果我想要视觉信息更丰富是不是可以有以下做法:

  1. 我仍然使用CLIP模型,在data processing过程中将图像resize成(512,512),再/32是不是保留的视觉信息就多了?
  2. 从头训练CLIP模型,但是把patch变小(比如,patch size=8,4...)这样也可以达到目的?

现在其它类似的工作跟minimind-v处理视觉输入的方式是不是差不多,我指在类似224/32这样的方法上?

@jingyaogong
Copy link
Owner

jingyaogong commented Oct 10, 2024

谢谢。

如果我想要视觉信息更丰富是不是可以有以下做法:

  1. 我仍然使用CLIP模型,在data processing过程中将图像resize成(512,512),再/32是不是保留的视觉信息就多了?
  2. 从头训练CLIP模型,但是把patch变小(比如,patch size=8,4...)这样也可以达到目的?

现在其它类似的工作跟minimind-v处理视觉输入的方式是不是差不多,我指在类似224/32这样的方法上?

第1点,CLIP实现中输入到ViT模型的特征会被resizing到一个固定的224×224,所以传入的图像分辨率是多少都不重要,最终它计算的实际尺寸都是224×224。get_img_process里resize到224实际上不做也没关系,做了只是为了统一。

第2点,clip系列clip-vit-large-patch14-336最小的patch是14,最大预训练分辨率是336*336,产生577个token;如qwen-vl实验所示,图像的潜在token数并非越多越好,256已经可以对一副图像有很好的编码效果;Transformer计算复杂度和token数量o(n^2)关系;注意力计算577长度是256长度的至少4倍的计算时间和内存开销;这种large clip本身的处理时间也慢了至少3~4倍;简单总结,256以上的性价比很低。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants