---
# System prepended metadata

title: 【生成式AI導論 2024】第17講：有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)
tags: [生成式AI導論 2024]

---

# 【生成式AI導論 2024】第17講：有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)

## 今日的人工智慧如何看影像

現在的人工模型大多都不是直接拿像素來作為輸入
![image](https://hackmd.io/_uploads/H1_6MLwbgl.png)
1. 會先將輸入的圖片切成一塊一塊的patch
2. 會將每個patch透過Encoder進行壓縮，可以將每個patch看成一個token。
3. 將patch拉直
4. 丟給人工模型

而生成影像時則是透過以下步驟
![image](https://hackmd.io/_uploads/r1mWQ8vZel.png)
1. 逆向時則是由Pathc開始
2. 透過Decoder將Patch變回照片

## 人工智慧如何看影片

* 當然可以將影片變成一張張的圖片，將每張圖片透過上面的步驟變成一堆token
![image](https://hackmd.io/_uploads/H13FmLwbxe.png)
* 但是影片是有時間維度的，因此也可以在時間為肚上壓縮，例如將frame 1跟frame 2進行壓縮，我們也可以[使用另一個Encoder來完成](https://arxiv.org/abs/2103.15691)時間壓縮這件事情。
![image](https://hackmd.io/_uploads/r1PBVLPbex.png)
* 因此整體流程會長得像這樣，這就是現今人工智慧看影片的方法。對神經模型來說，影片就是一排patch。
![image](https://hackmd.io/_uploads/rk6BI8wblg.png)

## 文字生圖

以文字生圖為開始，再漸漸推廣到文字生成影片。

1. 我們要為文字生圖準備相應的資料，因此我們需要準備圖片(這邊講的圖片都已經是轉為Patch的圖片)與其對應的文字。
![image](https://hackmd.io/_uploads/ByDedLDZlx.png)
2. 透過文字與圖片，我們可以使用一個Transformer去產生文字與圖片的關係
![image](https://hackmd.io/_uploads/H1v7dIwZgg.png)
3. 但是我們先前有講過AR的問題，因此會選用NAR來平行生成，典型的NAR應該會長得像這樣，不同pixel之間平行生成
![image](https://hackmd.io/_uploads/HkgQCuIvWee.png)
4. 但實際上生成時，我們會將所有需要生成的pixel全部丟給Transformer，因此各pixel之間還是因為生成時的Attention而有一些關聯性。但是單純這樣操作，還是無法完全解決模型腦補不同步的狀況。
![image](https://hackmd.io/_uploads/B1MXFUDZex.png)

## 評量影像生成的好壞

* 最好的評斷當然是由人評斷，但人的時間有限
* 因此[CLIP](https://arxiv.org/abs/2103.00020)是一個用於評分的模型
    * CLIP的輸入是照片與文字敘述，如果匹配就給予高分，不匹配就給低分
    * 訓練時給予的敘述與照片匹配，就要給高分的輸出
![image](https://hackmd.io/_uploads/rkiNcUvZlx.png)
    * 如果隨機匹配的照片與文字，則要輸出低分
![image](https://hackmd.io/_uploads/By0OqIPWgx.png)
* 因此訓練生成結果時方法就是將輸入與模型輸出的照片給予CLIP，就可以得到生成的好壞
![image](https://hackmd.io/_uploads/S17JsIPbll.png)

## 客製化圖片生成模型

[Src](https://arxiv.org/abs/2208.01618)
* 我們可以用一個不常用的符號來代表要客製化(學習)的物體，例如將下面這張照片中的雕塑稱為`S*`。
![image](https://hackmd.io/_uploads/S1vAi8wZlg.png)
* 要用不常用的符號是為了避免意義的汙染，例如用狗就會將狗與這個雕塑搞混
* 透過學習，就可以學會了`S*`這個物件
![image](https://hackmd.io/_uploads/rk-Ih8Dbex.png)

## 文字生影片的挑戰

* 兩者本質上沒有什麼不同，都是產生一大堆的Patch
![【生成式AI導論 2024】第17講：有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理) 38-14 screenshot](https://hackmd.io/_uploads/HyJh3UPbex.png)
* 但是假設每個frame有64\*64個patches，一分鐘的24fps影片就有1440個frame，共有600萬個patch。因此所有patch間都要做Attention，因此會要做36兆次Attention

### 改造Attention

* 第一個frame左上角的patch會跟最後一個frame左下角的patch相關嗎?也許我們根本不用計算這麼多的Attention
* 因此我們要改良Attention的方法，減少Attention計算的次數
* 影片Attention的方法可以分為![image](https://hackmd.io/_uploads/SJiP0UD-ee.png)
    * Spatio-temporal Attention(3D): 使用原始Attention概念，所有frame的所有patch都做Attention
    * Spatial Attention(2D): 只做單一個frame中的所有patch做Attention，至少可以保證產生的單一frame沒有問題。
    * Temporal Attention(1D): 只做同個pathc在不同時間的Attention。考慮時間，但是缺乏了同個平面的資訊
* 而現在影片生成大多採用了兩者交替使用，把2D和1D疊再一起交替使用，就可以製造出偽3D的Attention。![image](https://hackmd.io/_uploads/B14GkPvblx.png)

### 將生成分步驟進行

* 可以將生成影片的任務切成幾個步驟進行![image](https://hackmd.io/_uploads/S1gkGvw-lg.png)
* 例如
    * v1>v2專注於解析度提高![image](https://hackmd.io/_uploads/HyJeMPP-ee.png)
    * v2>v3專注於幀率提高![image](https://hackmd.io/_uploads/rJ-bfvPWxg.png)
* Google的[Imagen Video](https://arxiv.org/abs/2210.02303)就是採取這樣的，提高解析度、提高幀數一步一步去進行![image](https://hackmd.io/_uploads/BkMUMPDWgg.png)

## 補充資料

* [語言模型如何將影像當成輸入](https://arxiv.org/abs/2405.17247)
* [Diffusion Model怎麼產生影片](https://arxiv.org/abs/2405.03150)