# 李宏毅_生成式導論 2024_第17講:有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)
###### tags: `Hung-yi Lee` `NTU` `生成式導論 2024`
[課程撥放清單](https://www.youtube.com/watch?v=AVIKFXLCPY8&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI)
## 第17講:有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)
[課程連結](https://www.youtube.com/watch?v=5H2bVEmYDNg&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI&index=18)
### 與影像有關的生成式AI

影像相關的生成式AI大致有兩種,一種就是給定影像或是影片,然後由生成式AI生成文字說明。另一種則是給定條件,然後由生成式AI生成影像或是影片。
### 與影像有關的生成式AI

簡報上的範例就是給定照片,然後讓生成式AI生成文字描述。
### 與影像有關的生成式AI

如果你真的要模型回答誰帥的話,它還是會說,而且說話技巧很不錯,好人卡,發。
### 生成影像的生成式AI - 文字生影像

課程會關注在給定條件的情況下讓模型生成影像或是影片。
目前最火熱的大概就是OpenAI發佈出來的Sora,不過目前並沒有真的開放使用就是。
### 生成影像的生成式AI - 文字生影像(Sora)


這是Sora生成的範例,看課程中放出來的影片真的蠻驚人的,雖然細節上還是有點小問題就是。
### 生成影像的生成式AI - 影像生影像

除了文字生成影像之外,也可以用影像來生影像,大致幾種:
1. 給定幾個frame,讓模型補完影片
2. style transfer
3. 畫質提升
### 生成影像的生成式AI - 其他輸入生影像

[參考論文_AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation](https://arxiv.org/abs/2403.17694)
另一種目前常見的方式就是使用Talking Head,在給定一段語音跟照片之後,模型會讓你的照片嘴巴動起來,就像照片中的人物在唸這段話的樣子。
### 生成影像的生成式AI - 其他輸入生影像
[參考論文_Adding Conditional Control to Text-to-Image Diffusion Models](https://arxiv.org/abs/2302.05543)
這邊說明的是,給定一個草稿,讓模型幫忙補完。照片的第一個row是草稿,然後向下就是各草稿由模型補完的狀況。
這模型就是知名的ControlNet。
### 圖片是由像素所構成

繼續說下去之前,先來複習一下功課。
圖片是由像素所構成,像素愈多圖片愈清晰。簡報中左右圖很明顯的看的出差異。
### 影片是由一張一張圖片所構成

像素構成圖片,多張圖片再構成影片,影片中的每一張圖片又稱為frame,中文為幀,fps指的就是每秒幀數。
### 今日的人工智慧如何看影像

[參考論文_Masked Autoencoders Are Scalable Vision Learners](https://arxiv.org/abs/2111.06377)
最開始的作法也許是直接以像素提供給予機器,但這樣的作法真的太不行了,所以後來的作法會將照片經過編碼,可能會將一個64x64的照片先切割成4x4,然後經過編碼器之後再展開變成一個一維向量。
切割成4x4的每一個區域又稱為patch。
解碼器的部份則是以編碼展開後的一維向量做為輸入再還原回64x64的照片。
### 今日的人工智慧如何看影像

[參考論文_ViViT: A Video Vision Transformer](https://arxiv.org/abs/2103.15691)
影片的概念是差不多,差別在於,影像的部份單純的考慮長寬,而影片的部份則是多了一個時間維度。
所以在作法上可以將相鄰的frame合成一組,然後再做一次編碼再縮壓一次,最後再展平成一個一維向量。
### 今日的人工智慧如何看影像
雖然openai沒有明著說,不過sora也許也是用著類似的技術。
### 以文字生圖為例

以文字生圖為例,我們就是希望模型可以看到一段文字然後生成對應的圖片。
### 以文字生圖為例

[開源資料集](https://laion.ai/blog/laion-5b)
目前來說已經有不少開源資料集可以提供我們做這類的模型訓練。
教授特別提到,laion特別說明,他們只有搜集資料,但這些資料他們是沒有所有權的,所以拿去訓練之後的法律風險就是自負的概念?
### 以文字生圖為例

我們已經知道,圖片會被編碼器編碼成patch,然後展開變成一維向量。
也許搭配transformer的作法就是讓模型像文字接龍一樣把patch一個一個接出來。不過文字生圖很少用這種方式來處理就是。
這種文字接龍的作法也稱為Auto-Regressive。
### 以文字生圖為例

先前的課程中提過,文字生圖的部份一般我們會採用Non Auto-Regressive將所有的patch一次生成。
這是個概念說明圖,後面說明實際處理方式。
### 以文字生圖為例

實務上,如果我們要生成16個patch,那我們會讓transformer一開始就知道就是要生成16個patch,讓模型可以一次性的生成這16個patch。
這樣的作法多多少少還是可以利用到transformer內的attention,不至於讓各patch之間的生成毫無關聯。
不過即使如此還是無法完全避掉腦補問題就是,這下一堂課會有說明。
### 如何評量影像生成的好壞

[參考論文_Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/abs/2103.00020)
評量影像生成的好壞,雖然人才是最好的評分老師,不過人的時間實在有限,這種事還是交給機器來做。
大致作法就是,讓模型CLIP學習文字與影像的pair,當這個pair是正確的情況下就是給予高分,然後再讓影像跟其它的文字配對,給予低分。
### 如何評量影像生成的好壞

基本上CLIP是開源模型,所以現在不少生成模型都是拿CLIP來做為衡量工具,稱為CLIK Score。
### 一張圖勝過千言萬語


這邊是教授感概,很多圖是文字難以描述,圖右是教授家的鐘,希望利用文字描述讓模型生成一樣的,不過,人生好難。
生命總是會自己找到出路。
### 個人化的圖像生成

[參考論文_An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion](https://arxiv.org/abs/2208.01618)
[參考論文_DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generationn](https://arxiv.org/abs/2208.12242)
如果我們真的希望可以個人化一些影像生成,我們可以拿一些平常沒有在用的符號,簡報範例為『S*』,來做為你希望個人化的影象。
接著讓文字生圖模型知道,只要你提到『S*』就是要生成你的個人化影像。
### 個人化的圖像生成

[參考論文_An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion](https://arxiv.org/abs/2208.01618)
根據參考論文中所述,只需要三到五張的各種不同角度的照片來微調模型,讓模型知道『S*』就是這個人化的照片,然後可以利用『S*』這個關鍵字來做各種生成。
### 文字生影片的挑戰

本質上文字生影片跟文字生圖是差不多的,只是生成的是一大塊的patch。
生成影片的困難點在於簡報上所說明的那樣,每一分鐘要生成的patch大約有600萬個,而因為transformer中的self-attention,這兩兩之間的注意力計算就有600萬平方,也就是大約36兆次的計算。
### 文字生影片的挑戰


也因為計算量真的太大了,所以目前的研究都是在於怎麼減化計算量。
上面簡報給的三種是不同的計算邏輯:
* 3D:各patch、frame一起考慮
* 2D:不管前後frame,只自己frame的patch
* 1D:只考慮時間維度的資訊,沒有空間維度的資訊
很明顯的,每一種都有它的缺點,最好的作法就是通通喇在一起。
### 文字生影片的挑戰

喇在一起之後的計算量很明顯的相差千倍。
### 文字生影片的挑戰

減少計算的方式還有一種,就是逐步的生成。
### 文字生影片的挑戰

[論文參考_Imagen Video: High Definition Video Generation with Diffusion Models](http://arxiv.org/abs/2210.02303)
Imagen Video就是採用類似的作法。其中框框內的文字16x40x24表示,16個frames,40x24的長寬,然後3fps。
模型從一個很小很簡單的生成開始然後逐步的放大。
### 延伸閱讀


[論文參考_An Introduction to Vision-Language Modeling](http://arxiv.org/abs/2405.17247)
[論文參考_Video Diffusion Models: A Survey](http://arxiv.org/abs/2405.03150)