### [AI / ML領域相關學習筆記入口頁面](https://hackmd.io/@YungHuiHsu/BySsb5dfp)
- [[Mulimodal] CVPR 2023。Multimodal Foundation Models : From Specialists to General-Purpose Assistants<br>多模態基礎模型研究回顧](https://hackmd.io/@YungHuiHsu/HkOjXPg46)
- [[Multimodal] LLaVA鍊成術-視覺指令調節 Visual Instruction Tuning](https://hackmd.io/@YungHuiHsu/HyMgBbjSa)
- [[Multimodal] 通用多模態模型資訊檢索器模型 UniIR: Training and Benchmarking Universal Multimodal Information Retrievers](https://hackmd.io/@YungHuiHsu/rJVsI68B6)
- [[Multimodal] 多模態語言模型在自駕領域筆記 Multimodal Large Language Models for Autonomous Driving](https://hackmd.io/@YungHuiHsu/HJzyHId4T)
- [Prompt Engineering for Vision Models。視覺模型的提示工程](https://hackmd.io/@YungHuiHsu/rkqs588d0)
---
---
# [Multimodal] LLaVA鍊成術-視覺指令調節 Visual Instruction Tuning
## [LLaVA](https://github.com/haotian-liu/LLaVA/tree/main)
- [2023.10。Improved Baselines with Visual Instruction Tuning](https://arxiv.org/abs/2310.03744)
- Haotian Liu, Chunyuan Li, Yuheng Li, Yong Jae Lee
- [2023.04。Visual Instruction Tuning (NeurIPS 2023, Oral)](https://arxiv.org/abs/2304.08485)
- Haotian Liu*, Chunyuan Li*, Qingyang Wu, Yong Jae Lee
論文主文超級短,整個研究概念如下:
:::info
透過結合視覺與語言資料(以強大的ChatGPT/GPT4當作指導來生成資料),強化"弱模型(這裡是LLaVA)"對視覺的理解與回應能力
:::
- 研究亮點
:::success
1. 此研究首次利用只懂語言的GPT-4來製作多模態語言-圖片指令資料,開創多模態領域新方向。
2. 研究推出了LLaVA,一個結合了視覺編碼器和大型語言模型的全新多模態模型,能夠進行通用視覺與語言理解。
3. LLaVA在早期實驗中展現出了強大的多模態交談能力,能在未見過的圖像或指令上表現得像多模態GPT-4一樣。
4. 在多模態指令遵循資料集上,LLaVA的表現達到了GPT-4的85.1%。
5. LLaVA結合GPT-4在Science QA上經過細微調整後,達到了全新的最高準確率92.53%。
:::
- 個人感想
- 用來做視覺與語言資料對齊的設計易常簡單,只用一個簡單的線性投影($W$)將圖像(經過視覺編碼器$g$轉換為embeddings)轉換為語文本資料同樣的word embeddings
- 由於設計非常簡單計算量小,所以可以快速迭代
- 然後透過大量的{圖片、語言指令}問答集(由chatGpt生成)集來訓練LLaVA
## Visual Instruction Tuning (NeurIPS 2023, Oral) [Paper](https://arxiv.org/abs/2304.08485)
### 3. GPT-assisted Visual Instruction Data Generation

> 表1展示了指令遵循資料的一個範例,頂部區塊展示了用來提示GPT的上下文,如圖片說明(Captions)和物件框(Bounding boxes),底部區塊則顯示了三種回應類型。這裡的視覺影像並未用來提示GPT,只是作為參考。
> - 上下文類型1(圖片說明Captions):描述了一組人站在一輛黑色車旁,周圍擺放著各種行李,車輛位於地下停車場。
> - 上下文類型2(Bounding boxes):標記了圖片中的人物和物件,例如:人物 [0.681, 0.242, 0.774, 0.694],背包 [0.384, 0.696, 0.485, 0.914]。
> - 回應類型1(對話):問答形式,例如問“圖片中的車型是什麼?”答“SUV”。
> - 回應類型2(詳細描述):對圖片進行描述,例如描述SUV停放情況、人物活動和位置。
> - 回應類型3(複雜推理):提供深入分析,例如分析圖片中的人面臨的挑戰和打包行李的困難。
在文本標註任務中的GPT模型,此研究提議利用ChatGPT/GPT-4來收集多模態指令遵循資料,這是基於廣泛存在的圖片對資料。對於一個圖像$X_v$及其相關的圖片說明$X_c$,自然地可以創建一組問題$X_q$,其目的是指示助理描述圖像內容。此研究提示GPT-4並在附錄中的表8策劃這樣的問題列表。因此,將圖文對擴展到其指令遵循版本的一個簡單方法是:
Human : $X_q X_v<STOP>$\n.
Assistant:$X_c<STOP>$\n
雖然構建成本低廉,但這個簡單的擴展版本在指令和回應中缺乏多樣性和深入的推理。
為了緩解這個問題,此研究利用只接受文字輸入的語言專用**GPT-4或ChatGPT作為強大的教師(strong teacher model),來創建涉及視覺內容的指令遵循資料**。具體來說,為了將圖像編碼成視覺特徵來提示純文字的GPT,此研究使用兩種類型的符號表示:(i) 圖片說明(**Captions**)通常從各種角度描述視覺場景。(ii) 物件框(**Bounding boxes**)通常定位場景中的物體,每個框編碼了物體概念及其空間位置。表1的上方區塊展示了一個範例。
:::info
ChatGPT或GPT-4在這個過程中扮演關鍵角色,負責生成用於訓練的問答對$X_q$和$H_q$。這些問答對旨在指導助理描述圖像內容,進而用於訓練LLaVA模型,讓它學會理解和生成關於視覺內容的語言指令。
:::

> 表2說明了用來訓練模型的輸入序列。以下是其主要內容:
> - 展示的是兩次對話轉換,但在實際應用中,依據指令遵循資料的不同,對話轉換的次數會有所變化。
> - $X_{system-message}$代表一場由好奇的人類和一個人工智慧助理之間的對話。
> - 助理提供有用的、詳細的、和禮貌的回答來回應人類的問題。
> - $<STOP>$代表序列的結束符號,例如"###"。
> - 模型被訓練來預測助理的回答以及何時停止,因此**只有<font color="lightgreen">綠色的序列/token</font>被用來計算自回歸模型的損失**。
### 4.1 Architecture

研究主要目標是有效利用預先訓練的大型語言模型(LLM)和視覺模型的能力。網路架構如圖1所示,此研究選擇LLaMA作為此研究的LLM $f_\phi(·)$,它被參數化為$\phi$,其有效性已在多個開源的僅限語言指令調整作品中得到驗證。
- 對於輸入影像$X_v$,考慮了預先訓練的CLIP視覺編碼器ViT-L/14,它提供視覺特徵$Z_v = g(X_v)$。在實驗中考慮了Transformer層之前和之後的網格特徵(grid features)。
- 研究用一個簡單的線性層(linear layer)將影像特徵連接到詞嵌入空間(word embedding space)。具體的操作是應用一個可訓練的投影矩陣 $W$ 將視覺特徵 $Z_v$ 轉換為語言嵌入符號(tokens) $H_q$。這裡的 $H_q$ 是指在語言模型中,與詞嵌入空間具有相同維度的向量(ps: 原文寫$H_q$,但應該是$H_v$?)
- 公式(1)
$$
H_v = W \cdot Z_v, \text{ with } Z_v = g(X_v)
$$
由此,得到了一系列的視覺符號$H_v$。
- code
:::spoiler
LLaVA1.5改用2層linear layer + gelu
程式碼位於[`LLaVA/llava/model/multimodal_projector/builder.py`](https://github.com/haotian-liu/LLaVA/blob/main/llava/model/multimodal_projector/builder.py#L33)
```python=
def build_vision_projector(config, delay_load=False, **kwargs):
projector_type = getattr(config, 'mm_projector_type', 'linear')
if projector_type == 'linear':
return nn.Linear(config.mm_hidden_size, config.hidden_size)
mlp_gelu_match = re.match(r'^mlp(\d+)x_gelu$', projector_type)
if mlp_gelu_match:
mlp_depth = int(mlp_gelu_match.group(1))
modules = [nn.Linear(config.mm_hidden_size, config.hidden_size)]
for _ in range(1, mlp_depth):
modules.append(nn.GELU())
modules.append(nn.Linear(config.hidden_size, config.hidden_size))
return nn.Sequential(*modules)
```
:::
- 研究採用的**簡單投影方案是輕量且成本效益高的**,這允許此研究迅速地進行以資料為中心的實驗迭代。
- 也可以考慮更複雜(但成本較高)的方案來連接影像和語言表示,例如在Flamingo中的閘控交叉注意力(gated cross-attention)和BLIP-2中的Q-former,或提供物體級特徵的其他視覺編碼器,例如SAM。
:::info
白話來說,這個轉換過程是一個從視覺特徵空間到語言模型的詞嵌入空間的映射,目的是讓圖像的視覺資訊能以一種適合語言模型處理的形式來呈現,從而讓語言模型能夠理解和處理視覺資訊。
- $H_v$
- 從圖像中提取的視覺特徵向量,這些特徵向量是由視覺編碼器(如卷積神經網絡)產生的,它們捕捉了圖像的視覺內容(這邊是用簡單哦Linear Layer)
- $H_q$
- 語言模型產生的語言嵌入向量,這些嵌入向量代表了語言指令或文字資料的語義訊息。語言嵌入是將單詞、短語或句子轉換為數值向量的過程,使得這些語言單元可以被機器學習模型處理
$H_v$是圖像資料的數值表示,而$H_q$是語言資料的數值表示。在多模態學習框架中,這兩種類型的表示被進一步用於訓練模型,使其能夠處理並理解結合視覺和語言的複雜任務
:::
### 4.2 Training
在訓練階段,每個圖像$X_v$會生成多回合的對話資料$(X^1_q, X^1_a, \ldots, X^T_q, X^T_a)$,其中$T$是回合的總數。這些資料被組織成一個序列,將所有的回答視為助理的回應,並將指令$X^t_{instruct}$放在第$t$回合:
- 公式(2)
$$
\begin{equation}
X^t_{instruct} =
\begin{cases}
\text{Random choose } [X^1_q, X_v] \text{ or } [X_v, X^1_q], & \text{for the first turn } t = 1 \\
X^t_q, & \text{for the remaining turns } t > 1
\end{cases}
\end{equation}
$$
:::info
這個公式描述的是在訓練過程中,如何構建每個回合$t$的指令$X^t_{instruct}$:
- 當是第一回合(即$t = 1$)時,系統會隨機選擇兩種組合中的一種:要么是問題$X^1_q$後接圖像$X_v$,要么是圖像$X_v$後接問題$X^1_q$。
- 對於隨後的回合(即$t > 1$),指令則直接是該回合的問題$X^t_q$。
這種設計用於訓練模型如何根據給定的問題和相應的圖像進行交互。在第一回合,通過隨機改變問題和圖像的順序,模型能學習到不同的訊息呈現方式;而在後續的回合,模型則聚焦於如何基於新的問題繼續對話。這樣的訓練方法旨在提高模型處理視覺訊息和語言指令的能力
:::
- demo code
:::spoiler
```python=
import random
# Function to determine X^t_instruct based on the turn t
def get_instruction(t, X_q, X_v):
if t == 1:
# Randomly choose between [X^1_q, X_v] or [X_v, X^1_q] for the first turn
return random.choice([[X_q[0], X_v], [X_v, X_q[0]]])
else:
# Use X^t_q for the remaining turns
return X_q[t-1]
# Example usage
t = 1 # Current turn
X_v = 'Image representation' # Placeholder for the image representation
X_q = ['Question 1', 'Question 2', 'Question 3'] # Placeholder for questions
X_t_instruct = get_instruction(t, X_q, X_v)
print(X_t_instruct)
```
:::
這產生了統一的多模態指令遵循序列格式,如表2所示。對LLM進行指令調整,針對預測的tokens使用原始的自回歸訓練目標(auto-regressive training objective)。
具體來說,長度為$L$的序列,研究中通過以下方式計算生成目標回答$X_a$的機率(見公式3):
- 公式(3)
$$
\begin{equation}
p(X_a|X_v, X_{instruct}) = \prod_{i=1}^{L} p_{\theta}(x_{i}|X_v, X_{instruct,<i}, X_{a,<i})
\end{equation}
$$
其中$\theta$是可訓練的參數,$X_{instruct,<i}$和$X_{a,<i}$是在預測token <font color="lightgreen">$x_{i}$</font>之前的指令和回答字詞(token)。為了更好的說明預測條件,研究中在公式(3)中明確加入了$X_v$,以強調所有回答都是基於圖像的,並且為了有較好的可讀性,公式中省略了$X_{system-message}$和所有先前的$<STOP>$。 在LLaVA model模型的訓練上,研究中用了以下兩階段的指令調節(instruction-tuning)過程
:::info
公式解釋了在給定圖像$X_v$和指令$X_{instruct}$的情況下,模型預測目標回答$X_a$的機率:
- $p(X_a|X_v, X_{instruct})$ 是在已知圖像$X_v$和指令$X_{instruct}$的條件下,模型產生正確回答$X_a$的機率。
- $\prod_{i=1}^{L}$ 表示對於所有的$L$個預測字詞$x_i$,將每個字詞的條件機率相乘,這裡$L$是序列的長度。
- $p_{\theta}(x_{i}|X_v, X_{instruct,<i}, X_{a,<i})$ 是模型在參數$\theta$下,根據已知的圖像$X_v$、之前的指令$X_{instruct,<i}$和之前的回答$X_{a,<i}$,產生下一個字詞$x_i$的機率。
- $X_{instruct,<i}$ 和 $X_{a,<i}$ 分別代表在生成第$i$個字詞之前的所有指令和回答字詞。
這裡的核心是自回歸模型的概念,它在預測序列中的每一個新字詞時,都會考慮到前面所有已經產生的字詞。
:::
- demo code
:::spoiler
- 在實際應用中,機器學習模型特別是自然語言處理(NLP)和序列生成任務中,常常會使用負對數似然(Negative Log Likelihood,簡稱 NLL)作為損失函數。這是因為當計算序列機率的乘積時,若序列較長,乘積中的每個項目都小於1,則整體乘積會非常接近於0,導致計算上的不穩定性和數值下溢。
負對數似然損失(NLL Loss)的計算方式是取機率的對數後再取負值。因此,對於機率乘積 $\prod_{i=1}^{L} p_{\theta}(x_{i}|X_v, X_{instruct,<i}, X_{a,<i})$,其對應的負對數似然損失是:
$$
-\sum_{i=1}^{L} \log p_{\theta}(x_{i}|X_v, X_{instruct,<i}, X_{a,<i})
$$
將乘積轉換為求和,從而簡化計算。在訓練過程中,模型會嘗試最小化這個損失值,這等同於最大化原始序列的機率
```python=
import torch
import random
def calculate_nll_loss(X_a, X_v, X_instruct, model_predict):
"""
Calculate the Negative Log Likelihood (NLL) loss using PyTorch.
Parameters:
X_a (list): Target answer sequence.
X_v (Tensor): Image representation.
X_instruct (list): Instruction sequence.
model_predict (function): Model's prediction function.
Returns:
torch.Tensor: Calculated NLL loss.
"""
nll_loss = 0.0
for i, x_a_i in enumerate(X_a, start=1):
# Model's prediction probability for the current element
prob = model_predict(x_a_i, X_v, X_instruct[:i], X_a[:i-1])
# Accumulate the negative log likelihood
nll_loss -= torch.log(prob)
return nll_loss
# Example usage
# Define a placeholder model's prediction function
model_predict = lambda x_i, X_v, X_instruct_i, X_a_i: torch.tensor(random.random())
# Sample data
X_v = torch.randn((3, 224, 224)) # Random image tensor
X_instruct = ['Instruction 1', 'Instruction 2', 'Instruction 3']
X_a = ['Answer 1', 'Answer 2', 'Answer 3']
# Calculate NLL loss
nll_loss = calculate_nll_loss(X_a, X_v, X_instruct, model_predict)
print(nll_loss)
```
:::
#### Stage 1: Pre-training for Feature Alignment
- 為了在概念涵蓋(concept coverage)和訓練效率之間取得平衡,研究中篩選了CC3M資料集到595K的圖像-文字對。細節請參閱附錄中的過濾過程描述。這些對轉換成指令遵循資料,使用第3節描述的初級擴展方法。
- 每個樣本可以當作單回合對話處理。為了構建輸入$X_{instruct}$,對於圖像$X_v$,表8中的問題$X_q$是隨機挑選的,它是一個語言指令,要求助手簡要描述圖像。預測回答$X_a$是原始的圖片說明。
- 在訓練過程中,**保持視覺編碼器和LLM($\phi$)的權重不變,並最大化以可訓練參數$\theta = W$(投影矩陣)的似然性$(3)$**。這樣,圖像特徵$H_v$能與預訓練的LLM詞嵌入對齊。這個階段可以理解為為固定的LLM訓練一個相容/搭配的視覺編碼器(visual tokenizer/encoder)。
:::info
visual tokenizer
- 把圖像資料轉換成模型可以處理的資料格式,類似於自然語言處理中將文字轉換為字元或詞彙代碼的過程。這樣轉換後的視覺資料能夠被語言模型理解和處理,進而用於圖像相關的任務,如圖像識別、描述生成等。
- 在這邊即是指$\theta = \{W, \phi\}$中的$W$
:::
#### Stage 2: Fine-tuning End-to-End
只凍結視覺編碼器的權重,並繼續更新LLaVA中投影層($W$)和LLM的預訓練權重($\phi$),也就是可訓練的參數 $\theta = \{W, \phi\}$。研究中考慮了兩種特定的使用案例情境:
- 多模態聊天機器人:透過在第3節收集的158K獨特的多模態語言-圖像指令遵循資料上進行細調來開發聊天機器人。在三種回應類型中,有一種是多回合對話,其他兩種是單回合。他們在訓練中被均勻抽樣。
- 科學問答:在ScienceQA基準測試上研究研究中的方法,這是第一個大規模的多模態科學問題資料集,它以詳細講解和多項選擇來註釋答案。對於在公式(2)中的訓練,研究中將資料組織為單回合對話,以$X_{instruct}$作為問題和上下文,以$X_a$作為推理過程和答案。
:::success
$\theta = \{W, \phi\}$ 代表著兩部分的參數集合:
1. $\phi$ 通常指代在LLaMA(Large Language Model)中的參數。這些參數控制了語言模型的行為,包括如何處理和生成語言資料。
2. $W$ 則是一個額外的投影矩陣,用於將視覺特徵(如從圖像中提取的特徵)轉換成適合語言模型處理的格式(呼應前面提到的visual tokenizer)。這使得LLaVA(Large Language and Vision Assistant)能夠整合視覺資訊,從而進行多模態的理解和生成任務。
在LLaVA模型中,這些參數集合共同工作,使模型能夠處理和回應結合了語言和視覺的複雜任務。$\theta$ 因此代表了LLaVA模型的全部可訓練參數,涵蓋了從圖像到語言的整個處理流程。
:::
### Experiments

> 表4展示的主要概念是展示LLaVA與GPT-4對圖像理解的能力。透過一個極端熨燙的圖片例子,來展示這些模型如何解釋圖片中的不尋常行為以及場景描述。LLaVA和GPT-4提供了對圖片內容的詳細解釋,包括對周圍環境的描述和對男子熨燙衣物這一行為的分析。
> 從表4中可見,LLaVA和GPT-4在對圖像內容解釋上的差異主要表現在:
> - LLaVA提供了對圖像場景的具體和詳細描述,能夠準確識別出圖片中的獨特和不尋常之處,如男子在車頂熨燙衣物以及周圍的環境細節。
> - GPT-4的回答則沒有提及具體的場景元素,而是提供了一個較為一般性的描述,說明圖片中的男子在移動的出租車頂部熨燙衣服,這與實際的圖像內容不符。
>
>這顯示了**LLaVA在處理視覺資訊和提供相關語言描述方面可能具有更精細的理解能力**,而GPT-4可能未能充分理解圖像的具體視覺細節。這可能是由於LLaVA特別訓練來處理視覺和語言的多模態資料,而GPT-4作為一個主要面向語言處理的模型,可能在解讀視覺內容上不如專門的多模態模型準確。
## Reference
#### [2023.04。Chunyuan Li。知乎。Visual Instruction Tuning: 用LLaVA近似多模态GPT-4](https://zhuanlan.zhihu.com/p/622907299)
LLaVA團隊作者之一/微軟研究員親自解說
## Supplementary
#### CogVLM: Visual Expert for Pretrained Language Models(https://github.com/THUDM/CogVLM)
:100: 開源
- [code](https://github.com/THUDM/CogVLM/blob/main/README_zh.md)
- [paper](https://arxiv.org/abs/2311.03079)

視覺理解能力更勝LLaVA-1.5的視覺語言模型
- :pencil2:論文亮點
- **「視覺優先」的設計理念**
- 在之前的多模態模型中,通常僅將影像特徵對齊到文本特徵的**輸入**空間(只有輸入層的淺層對齊)
- 處理影像特徵的編碼器規模相對較小。在這種情況下,影像特徵就好似是文本特徵的「附屬物」,其效果自然受限。
:::success
CogVLM在多模態模型中將視覺理解置於更優先的位置。它使用了5B(50億)參數的視覺編碼器和6B(60億)參數的視覺專家模塊,共計11B(110億)參數來建模影像特徵,這甚至超過了用於文本處理的7B(70億)參數量。這種設計強調了視覺部分的重要性,與以往多模態模型中將視覺作為次要或輔助訊息的做法形成鮮明對比
:::
- **深度融合視覺和語言訊息**
- 克服了傳統方法中的淺層(僅在輸入層)對齊限制,深入模型的內部讓視覺和語言資料在多個層次上進行互動和對齊,使得模型能夠更好地理解和利用多模態資料的互補性和冗餘性。
- 在注意力層和前饋網絡(FFN)層中加入可訓練的視覺專家模組(Visual expert module)
:::info
- 多模態資料的互補性和冗餘性
指的是不同類型資料(如圖像、文字、聲音等)結合使用時所表現的特性。
- 互補性:不同資料模式可以補充彼此的信息,比如圖像中看不清的部分可能通過相關的文字描述來理解
- 冗餘性:不同資料模式之間可能存在的重複信息,例如一幅圖片和其描述可能包含相同的信息。
:::
>
> - 研究團隊認為過去VLM性能不佳的主因:缺乏視覺和語言訊息之間的深度融合(淺層對齊)
> - 語言模型中的凍結權重是為文本符號訓練的。視覺特徵在輸入文本空間中沒有完美的對應物。因此,在多層轉換後,視覺特徵可能不再與深層中權重的輸入分佈匹配。
> - 在預訓練期間,例如圖片標題生成任務的先驗,比如寫作風格和標題長度,只能在淺層對齊方法中編碼到視覺特徵中。這削弱了視覺特徵與內容之間的一致性。
>
> "CogVLM則在語言模型中添加了一個可訓練的**視覺專家(Visual expert module)**。在每一層中,序列中的影像特徵使用新的不同的QKV矩陣和MLP層與文本特徵一起使用。視覺專家在保持FLOPs不變的同時將參數數量增加了一倍。由於原始語言模型中的所有參數都是固定的,如果輸入序列不包含影像,其行為與原始語言模型相同。"
> :::info
> 在CogVLM的情況下,它將一個可訓練的“視覺專家”添加到每一層中。這個視覺專家使用新的不同的QKV矩陣和MLP層來處理序列中的影像特徵。這種方法允許模型在不改變原始語言模型主體的基礎上學習處理視覺資訊的能力
> :::
> :writing_hand:與LoRA或adaptor的概念相似,凍結LLM原始參數,用插入可訓練權重的方式微調
>

> CogVLM模型包含四個主要組件:ViT編碼器、MLP轉接器、預訓練的大型語言模型(GPT),以及視覺專家模組。以下是其架構和實現細節的條列式繁體中文解釋:
>
> 1. **ViT編碼器**:利用預訓練的EVA2-CLIP-E模型進行圖像處理,移除最後一層專門用於匯聚[CLS]特徵的ViT編碼器,以適應連續學習。
>
> 2. **MLP轉接器**:這是一個兩層的MLP(SwiGLU),用於將ViT的輸出映射到與文字嵌入同一空間的特徵。所有圖像特徵共用相同的位置id。
>
> 3. **預訓練的大型語言模型**:CogVLM模型設計與任何現成的大型語言模型(如GPT)兼容,採用了Vicuna-7B-v1.5進行進一步訓練。
>
> 4. **視覺專家模組**:在每層中增加一個視覺專家模組,以促進深度視覺-語言特徵對齊。每個視覺專家模組由一個QKV矩陣和MLP組成,與預訓練語言模型中的形狀相同,並從中初始化。
- **注意力機制**:$\text{Attention}(X, W_I, W_T) = \text{softmax}(\frac{QK^T}{\sqrt{D}})V$
- **QKV計算**:$Q = \text{concat}(X_I W_I^Q , X_T W_T^Q), K = \text{concat}(X_I W_I^K , X_T W_T^K), V = \text{concat}(X_I W_I^V , X_T W_T^V)$
- **FFN**:$\text{FFN}(X) = \text{concat}(\text{FFN}_I (X_I), \text{FFN}_T (X_T))$
其中,$W_I$ 和 $W_T$ 是視覺專家和原始語言模型的QKV矩陣。`Tril(·)` 表示下三角掩碼。視覺專家在FFN層的操作類似。這些公式描述了注意力機制和前饋網絡(FFN)如何在處理圖像和文字特徵時進行操作。
| Method | LLM | MM-VET | POPE(adversarial) | TouchStone |
| ---------------- | ------------- |--------| --------- |------------|
| BLIP-2 | Vicuna-13B | 22.4 | - | - |
| Otter | MPT-7B | 24.7 | - | - |
| MiniGPT4 | Vicuna-13B | 24.4 | 70.4 | 531.7 |
| InstructBLIP | Vicuna-13B | 25.6 | 77.3 | 552.4 |
| LLaMA-Adapter v2 | LLaMA-7B | 31.4 | - | 590.1 |
| LLaVA | LLaMA2-7B | 28.1 | 66.3 | 602.7 |
| mPLUG-Owl | LLaMA-7B | - | 66.8 | 605.4 |
| LLaVA-1.5 | Vicuna-13B | 36.3 | 84.5 | - |
| Emu | LLaMA-13B | 36.3 | - | - |
| Qwen-VL-Chat | - | - | - | 645.2 |
| DreamLLM | Vicuna-7B | 35.9 | 76.5 | - |
| CogVLM | Vicuna-7B | **52.8** | **87.6** | **742.0** |