日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Diffusion

發布時間:2024/1/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Diffusion 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Diffusion是如何根據文字生成圖片的?詳解Diffusion的整個生成過程、訓練過程等。

在之前的文章中,我們曾經介紹過Diffusion的具體原理,但是講的還是比較偏理論,為了讓大家快速了解Diffusion原理,這篇文章我們通過圖解的方式。

1. Diffusion文字生成圖片——整體結構
1.1 整個生成過程

我們知道在使用 Diffusion 的時候,是通過文字生成圖片,但是上一篇文章中講的Diffusion模型輸入只有隨機高斯噪聲和time step。那么文字是怎么轉換成Diffusion的輸入的呢?加入文字后 Diffusion 又有哪些改變?下圖可以找到答案。文字生成圖片全過程

實際上 Diffusion 是使用Text Encoder生成文字對應的embedding(Text Encoder使用CLIP模型),然后和隨機噪聲embedding,time step embedding一起作為Diffusion的輸入,最后生成理想的圖片。我們看一下完整的圖:?token embedding、隨機噪聲embedding、time embedding一起輸入diffusion

上圖我們看到了Diffusion的輸入為token embedding和隨機embedding,time embedding沒有畫出來。中間的Image Information Creator是由多個UNet模型組成,更詳細的圖如下:更詳細的結構

可以看到中間的Image Information Creator是由多個UNet組合而成的,關于UNet的結構我們放在后面來講。

現在我們了解了加入文字embedding后 Diffusion 的結構,那么文字的embedding是如何生成的?接下來我們介紹下如何使用CLIP模型生成文字embedding。

1.2 使用CLIP模型生成輸入文字embedding

CLIP 在圖像及其描述的數據集上進行訓練。想象一個看起來像這樣的數據集,包含4 億張圖片及其說明:圖像及其文字說明

實際上CLIP是根據從網絡上抓取的圖像及其文字說明進行訓練的。CLIP 是圖像編碼器和文本編碼器的組合,它的訓練過程可以簡化為給圖片加上文字說明。首先分別使用圖像和文本編碼器對它們進行編碼。然后使用余弦相似度刻畫是否匹配。最開始訓練時,相似度會很低。?然后計算loss,更新模型參數,得到新的圖片embedding和文字embedding?

通過在訓練集上訓練模型,最終得到文字的embedding和圖片的embedding。有關CLIP模型的細節,可以參考對應的論文(https://arxiv.org/pdf/2103.00020.pdf)。

1.3 UNet網絡中如何使用文字embedding

前面已經介紹了如何生成輸入文字embedding,那么UNet網絡又是如何使用的?實際上是在UNet的每個ResNet之間添加一個Attention,而Attention一端的輸入便是文字embedding。如下圖所示。??whaosoft?aiot?http://143ai.com???更詳細的圖如下:??

2. 擴散模型Diffusion

前面介紹了Diffusion是如何根據輸入文字生成圖片的,讓大家有個大概的了解,接下來會詳細介紹擴散模型Diffusion是如何訓練的,又是如何生成圖片的。

2.1 擴散模型Duffison的訓練過程擴散模型Diffusion

Diffusion模型的訓練可以分為兩個部分:

  • 前向擴散過程(Forward Diffusion Process) \rightarrow\rightarrow 圖片中添加噪聲

  • 反向擴散過程(Reverse Diffusion Process) \rightarrow\rightarrow 去除圖片中的噪聲

  • 2.2 前向擴散過程前向擴散過程是不斷往輸入圖片中添加高斯噪聲。
    2.3 反向擴散過程反向擴散過程是將噪聲不斷還原為原始圖片。
    2.4 訓練過程在每一輪的訓練過程中,包含以下內容:
  • 每一個訓練樣本選擇一個隨機時間步長 tt

  • 將time step tt 對應的高斯噪聲應用到圖片中

  • 將time step轉化為對應embedding

  • 下面是每一輪詳細的訓練過程:2.5 從高斯噪聲中生成原始圖片(反向擴散過程)上圖的Sample a Gaussian表示生成隨機高斯噪聲,Iteratively denoise the image表示反向擴散過程,如何一步步從高斯噪聲變成輸出圖片。可以看到最終生成的Denoised image非常清晰。

    補充1:UNet模型結構

    前面已經介紹了Diffusion的整個過程,這里補充以下UNet的模型結構,如下圖所示

    這里面Downsampe、Middle block、Upsample中都包含了ResNet殘差網絡。

    補充2:Diffusion模型的缺點及改進版——Stable Diffusion

    前面我們在介紹整個文字生成圖片的架構中,圖里面用的都是Stable Diffusion,后面介紹又主要介紹的是Diffusion。其實Stable Diffusion是Diffusion的改進版。

    Diffusion的缺點是在反向擴散過程中需要把完整尺寸的圖片輸入到U-Net,這使得當圖片尺寸以及time step t足夠大時,Diffusion會非常的慢。Stable Diffusion就是為了解決這一問題而提出的。后面有時間再介紹下Stable Diffusion是如何改進的。

    補充3:UNet網絡同時輸入文字embedding

    在第2節介紹Diffusion原理的時候,為了方便,都是沒有把輸入文字embedding加進來,只用了time embedding和隨機高斯噪聲,怎么把文字embedding也加進來可以參考前面的1.3節。

    補充4:DDPM為什么要引入時間步長_t_

    引入時間步長 tt 是為了模擬一個隨時間逐漸增強的擾動過程。每個時間步長 tt 代表一個擾動過程,從初始狀態開始,通過多次應用噪聲來逐漸改變圖像的分布。因此,較小的 tt 代表較弱的噪聲擾動,而較大的 tt 代表更強的噪聲擾動。

    這里還有一個原因,DDPM 中的 UNet 都是共享參數的,那如何根據不同的輸入生成不同的輸出,最后從一個完全的一個隨機噪聲變成一個有意義的圖片,這還是一個非常難的問題。我們希望這個 UNet 模型在剛開始的反向過程之中,它可以先生成一些物體的大體輪廓,隨著擴散模型一點一點往前走,然后到最后快生成逼真圖像的時候,這時候希望它學習到高頻的一些特征信息。由于 UNet 都是共享參數,這時候就需要 time embedding 去提醒這個模型,我們現在走到哪一步了,現在輸出是想要粗糙一點的,還是細致一點的。

    所以加入時間步長 tt 對生成和采樣過程都有幫助。

    補充5:為什么訓練過程中每一次引入的是隨機時間步長?t

    我們知道模型在訓練過程中 loss 會逐漸降低,越到后面 loss 的變化幅度越小。如果時間步長 tt 是遞增的,那么必然會使得模型過多的關注較早的時間步長(因為早期 loss 大),而忽略了較晚的時間步長信息。

    總結

    以上是生活随笔為你收集整理的Diffusion的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。