# 圖片生成式AI ## 1.圖片AI的框架(Framework) 1. 文字編碼器(text encoder) : 將輸入的文字資料轉換為向量(vector)或編碼的過程 2. 生成模型(generation model) : 將向量或編碼轉換為圖片,後面我們將介紹幾個較著名的模型 - **名詞解釋**: 1. **Latent Representation(壓縮資料)**: 對輸入資料壓縮、簡化過後的資料型態 2. **高斯分布(常態分佈)**: 一種常見的連續機率分布,講述在樣本數增大時會趨近的分布曲線,如下圖  - **訓練過程**: 1. 用文字的資料產生中間產物圖片壓縮的結果,可以是小圖或是壓縮資料 2. 先從高斯分布裡取樣出壓縮資料 3. 不斷加上文字(文字也是以壓縮資料型態來表示),然後經過去躁(Denoise)的模型去掉噪音(noise) 4. 反覆直到產出的結果夠好 3. decoder : 解碼器,將編碼或向量轉換為輸出圖片的模型 - **訓練過程**: 1. 如果輸入為小圖: - 輸入小圖 - 將其還原成圖片,令其與輸入圖片相似 2. 如果輸入為壓縮資料: - 訓練Autoencoder - 利用編碼器將圖片轉變一個壓縮資料 - 用解碼器將其還原為圖片,並令其與輸入圖片相似 ## 2.VAE模型(Variational AutoEncoder) 1. **中文名稱**: 變分自編碼器 2. **訓練流程**: 輸入->編碼器->code->解碼器->輸出  我們首先來看看VAE的前身AE是怎麼樣運作的  我們以以上這幾個圖片做舉例,可以將圖片歸類出幾個圖片中的物件 | 物件 | | -------- | | 天空 | | 雲 | | 左邊的山 | | 中間的山 | | 右邊的山 | | 河 | | 太陽 | 對於這些物件,我們可以描述他的位置、大小及顏色,如以下範例   而編碼器的作用,就是把圖片轉為這些能夠被機器處理的數據  然後再經由解碼器把處理完的數據轉換為圖片  以上就是自編碼器(AutoEncoder)的訓練過程,而VAE模型,則是在過程中再加入一個步驟以讓資料更多元化 3. **Variance of noise(雜訊)** 在VAE當中,我們會將編碼器轉換的輸出資料與雜訊做疊加,產生新資料 在上面的範例中,我們先以編碼器將輸入圖片轉為可處理的資料,然後VAE則是在這個步驟加入隨機數字以產生不同於原圖的圖片,這個隨機數字就是所謂的噪點(Noise)  原本圖片的數據可能是淺藍與深橘的天空,但加入噪點過後,新生成的圖片可能擁有綠色的特徵,最後我們再把變換過後的數據丟進解碼器,轉換回圖片 假設原本的數據可能是300(橘色),那我們加入的噪點就是以此為基準進行上下的浮動調整,最後可能得到250~350的數據(紅色到黃色)  4. **優勢**: 1. 良好的生成能力 2. 統計特性 因為我們加入了隨機值進入資料,對於電腦來說,可以學習到的是資料的大範圍趨勢,而非過於死板的非0即1的判斷,可以拼湊出兩者的各種線性組合。  如上圖,由VAE所生成的圖片除了我們自己給出的資料以外,還會自行組合出中間的圖片,達到漸變的感覺 5. **VAE的問題**: 無法產出以假亂真的圖片 1. 產出的圖片畫質較差 2. 容易產出相似卻在細節上有邏輯缺陷的圖 3. 計算複雜,增加訓練難度  上圖模型中產生的7分別多了一個像素點在7的下方及外側,點在下方可能對於人類來說可以接受,但外側的一點對於電腦判讀來說可能相差不遠(只差一個像素),以人類角度來判讀就有些不盡完美 ## 3.GAN模型(Generative Adversarial Network) 1. **中文名稱**:生成對抗網路 2. **訓練流程**:輸入->編碼器->生成器(Generator)->鑑別器(Discriminator)->解碼器->輸出 3. **生成器**:一種神經網路,在模型中負責生成圖片,並想辦法不被辨識出來 4. **鑑別器**:一種神經網路,在模型中負責分辨圖片是人為還是生成器所生成出來的圖片 5. **模型更新步驟**: 先來看看訓練GAN模型的流程 ```flow st=>start: 第一代生成器 e=>end: 結束 op=>operation: 生成器生成一些圖片 op1=>operation: 鑑別器會根據真實圖片與生成的圖片去調整它的參數 op2=>operation: 將生成器生成的圖片都標示為假,真實圖片標示為1為真 cond=>condition: 是否夠逼真能夠騙過鑑別器? st->op->op1->op2->cond cond(yes)->e cond(no)->op ``` - 會有好幾代的生成器與鑑別器 - 生成器的輸出便是鑑別器的輸入 簡單來說,就是生成器要努力生成出能夠騙過鑑別器的圖片,然後鑑別器則是要辨認那些圖片是生成器生成的,並且兩者透過彼此的輸出去更新自己的模型 下圖為簡單的訓練過程:  6. **優點**:高品質生成、多樣性 7. **缺點**:訓練不穩定難以除錯、模型崩壞,以下是模型訓練時可能會發生的錯誤  可以發現GAN的模型生成的圖片會過於侷限在某個特徵上,造成容易生成相近的圖片  上圖當中GAN模型所生成的圖片有15張是非常相近的 ## VAE與GAN比較 | Model | VAE | GAN| |--------|----|----| | 影響生成 | 更適用於需要統計建模的任務 | 更適用於產生高品質的影像 | | 訓練穩定度 | 訓練過程通常較穩定 | 可能需要更精細的調試 | | 複雜性與可解釋性 | 提供了更好的統計特性和解釋性 | 通常更難以理解和調試 | ## 4.Diffusion模型 1. **中文名稱**:擴散模型 2. **訓練流程**: 輸入->增加噪點->去噪器->輸出 - 前半流程(Forward Process): 我們需要將一張圖片經過不斷增加噪點數次  - 反向流程(Reverse Process): 將前項流程得到的有噪點圖片經過去噪器把圖片還原,在輸入資料中我們需要給模型一個有噪點圖片並告訴它這是第幾次處理的有噪點圖片 ```graphviz digraph hierarchy { nodesep=0.5 // increases the separation between nodes node [color=Red,fontname=Courier,shape=box] //All nodes will this shape and colour edge [color=Blue, style=dashed] //All the lines look like this 輸入 ->{有噪點圖片 第幾步} 去噪器 ->{噪點預測器noise_predicter 噪點圖案 圖片減掉噪點} } ``` 現在我們以貓咪的圖片作為範例,看看實際訓練的詳細流程 - 首先我們會將一張圖片加入隨機的噪點,然後重複數次  - 選取一張有噪點圖片並將其輸入到噪點預測器裡面,然後透過生成的資料去預測出噪點 - 將有噪點圖片減掉預測出來的噪點得到去噪圖片  - 將以上過程加入文字  因為添加噪點是採取隨機添加的機制,所以實際上我們只需要訓練去噪器而已 3. **優點**:只需要訓練去噪器,因此相對好訓練;流程是分階段式的處理,細節清楚明瞭 4. **缺點**:採樣速度較慢,因為我們需要對原圖加很多次的隨機噪點,一筆資料就要處理較多時間  ## 總結 以上介紹的多種模型可以透過相互結合的方式達到不同的效果,我們可以在一個模型裡面套用多種的模型,達成不同的功能或目的 1. **VAE和Diffusion的比較**: VAE簡單來說就是利用編碼器將圖片轉換為壓縮資料後再利用解碼器轉換回圖片,而Diffusion則是透過重複添加噪點再去噪的方式來生成圖片,如下圖  2. **VAN與GAN的結合**:  VAE的解碼器和GAN的概念相近,都是透過輸入向量後得到圖片的過程,我們能夠將解碼器視為生成器,並額外加入鑑別器來進行解碼器(在這裡也是生成器)的訓練 3. **Diffusion與GAN的結合**: 在這張圖中, 鑑別器在進行比較時,用的是加上噪點的版本,優點是可以避免在比較時真實圖像和生成圖像相差太大,以達到穩定模型的目的。 如果我們針對同一張圖片加上不同種的噪點,也可以增加數據效率與生成器的多樣性 ## 附錄-卷積神經網路(Convolutional Neural Network,CNN) 1. 目的:為了降低輸入的參數,避免浪費大量算力 2. 原理: - 卷積 : 大圖片對應小特徵的相似程度 假設今天要判斷一個圖片是否為叉叉,我們可以先將線條分成左上右下及右上左下兩種,如例圖我們先使用左上右下的線條作為我們的kernel,疊合後依序相乘後取平均就得到了一個像素點「附近」跟對應特徵的相似度。 - -1代表1 * (-1)或(-1) * 1,即相反元素疊合在同一個位置 - 1代表1 * 1或(-1) * (-1),即相同元素疊合在同一個位置 - 取平均後-1代表特徵與每個像素點剛好完全相反,1代表完全符合特徵  - 池化 : 壓縮圖片的同時盡量保留重要資訊 做法是取相鄰元素中最相似(最大值)的作為代表  可以發現上圖經過池化之後資料減少到了1/4,然後我們這時就能做神經網路的處理了 下面我們來看CNN與一般文字模型的比較 - 圖(a)代表編碼器模型的大小 - 圖(b)代表CNN中的U-Net(影像分割)大小  上圖結果越往右下越好,由此可看出對於CNN來說,模型的大小對於結果來說影響並不大,而文字模型大小對生成圖片的影響較大 - CNN的缺點:缺乏對圖像本身的全局理解 雖然CNN在提取視覺特徵方面很出色,但它們無法對這特徵之間的相對關係進行連結,如下圖CNN可能無法找到臉部器官的對應位置  # 影片生成式AI ## 影片生成軟體sora 1. sora簡介 sora是由OpenAI所發布的一項影片生成模型,目的是透過文字提示生成真實並且具吸引力的圖片,這項工具的出現象徵著人工智慧不僅在文字生成上面,在視覺內容方面也有重大的進展 OpenAI的發展: | 模型名稱 | Chat GPT | DALL‧E 3 | SORA | | --- | ---------- | -------------------------- | ------------------------ | | 模型類型 | 文字生成AI | 圖片生成AI | 影片生成AI | | 發行日期| 2022/11/30 |2023/10 | 2024/02/15 | 2. 使用原理 sora是使用diffusion模型與transformer模型的結合應用 :::spoiler 要怎麼讓transformer對圖片進行讀取與輸出呢? A:我們會使用圖像塊(patch)來替代transformer裡的token進行運算,成為新的Vision Transformer (ViT) 視覺transformer架構 ::: Transformer如今已經成為熱門的神經網路架構,並且已經大量的應用在自然語言(NLP)任務上,在圖像及影像方面,透過將Transformer架構中的編碼器抽離出來轉變成了ViT架構在影像分類技術上取得了重大的突破。 ViT拋棄了圖像AI所使用的傳統CNN技術並以 self-attention(自我注意力機制) 計算做取代,並在分類問題上取得不錯的成績 3. transformer模型(使用patch) - 分割圖片:我們首先會將原圖片分割成為固定大小的圖像塊(patch),並對其添加位置的相關資訊(圖塊是有順序性的)後轉換成向量,如下圖中原圖被依序分割成了9個區塊,除了原本資訊還添加了包含起始位置的0-9位置資訊  - 運算:將處理過的資料輸入進transformer模型,進行特徵的抓取 - 分類:對輸出的特徵進行分類 4. **sora的優缺點**: - 優點:生成影片時長較長、解析度較高 - 缺點:生成影片時間較長(使用Difusion模型)、場景中物件過多時會造成不合物理、光影等邏輯的片段
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up