生成模型 | 從 VAE 到 Diffusion Model (上)

在這里插入圖片描述

文章目錄

  • 一,GAN(對抗式生成網絡)
  • 二,Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)
  • 三,VAE
  • 四,VQ-VAE (Vector Quantized Variational Autoencoder)
    • VQ-VAE 2
    • 小總結:
  • 五,DALL-E (OpenAI) (2021.02)

一,GAN(對抗式生成網絡)

  • 生成器: 給定一個隨機噪聲,生成比較真實的圖像
  • 判別器:給一個生成的圖像和真實的圖像,讓判別器去判斷,哪個是真圖片,哪個是假圖片
  • 判別器和生成器會不斷提升自身的能力,互相較量。 DEEP FAKE 火爆 大家可以試一試這個基于GAN的應用。
  • 缺點:
    • GAN的 訓練不夠穩定,因為他要同時訓練兩個網絡,所以就有一個平衡的問題。訓練不好的話,模型就坍塌 了
    • GAN 主要的目標就是“真實”, 所以他的 創造性不好。他的多樣性來自于剛開始的隨機噪聲。他 不是一個概率模型,他的生成是隱式的,是通過一個網絡去完成的,所以你不知道他做了什么,遵循什么分布,在數學上不優雅。
      在這里插入圖片描述

二,Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)

  • 自己重建自己:給定一個圖片, 輸入到一個Encoder 里面, 然后得到一個維度小很多的 特征,然后過一個 Decoder 解碼器,最后得到一個圖像。我們的目標函數呢,就是重建這個圖像,所以是自己重建自己,自回歸模型

  • 中間那個特征維度很小,所以也叫bottleneck

  • 主要目的是學習bottleneck特征的,把這個特征去做分類,分割,檢測這些任務。并不是用來做生成的,他這里學到的不是一個概率分布。我們沒法對他進行采樣。

  • Denoising Auto-Encoder: 把輸入的原始圖片進行打亂 ,重建原始的圖片。會讓訓練的模型更加的穩健。

AE 和 DAE 主要的目的是去學bottlenck的特征,用這個特征去做 下游任務,并不是用來做生成的。

Encoder- Decoder這個結構很好,如何用這個結構做圖像生成呢? VAE來了。

在這里插入圖片描述

三,VAE

VAE 學習的不是 特征了,而是一個分布, 作者假設這個 分布是一個高斯分布,這個分布就可以用 (均值,方差) 來表示

具體來說:當我們從編碼器得到特征之后,我們在后面加 FC 層,用它去預測 均值 和 方差 , 然后就可以用下面的公式,采樣一個 z 出來,這樣VAE就可以做生成了,這個 z 就是一個可以從高斯分布中隨機抽樣出的一個樣本

從貝葉斯概率的角度來看, VAE 學的是一個概率分布,他從分布里去抽樣,所以他生成圖片的多樣性 比GAN好很多

缺點: VAE 不好把圖片的尺寸做大,而且 z 的分布也不是很好學
在這里插入圖片描述
在這里插入圖片描述

四,VQ-VAE (Vector Quantized Variational Autoencoder)

DALL-E的第一版模型就是 在VQ-VAE的基礎上做的.

把VAE量化 離散 了。

  • 為什么離散VAE呢? VAE 不好把圖片的尺寸做大,而且 z 的分布也不是很好學
  • 取而代之的是,不去做分布的推測,而是 用一個codebook去代替了。
    • codebook可以理解為聚類的中心,codebook的大小一般為KXD(8192x512), 也就是8192個聚類中心
  • 輸入一個圖片進入編碼器得到一個特征圖,把特征圖里面的向量 和 codebook 里面的向量做對比,看他和哪個聚類中心最接近,然后就把聚類中心這個編碼 存到 Z 這個矩陣里, 一旦做好了聚類的分配,我們就不需要之前的特征圖了,取而代之的是,把Z 中index 對應的codebook的特征拿出來,變成一個新的特征圖 ,也就是一個量化后的特征 (quantized feature), 這個量化后的特征就非常可控了,他是從codebook里面來的,而不是一個隨機的東西。所以優化起來相對容易。
  • 然后通過解碼器重構一張圖片。
這里的codebook有點像 AE 里面的 bottlenet那塊的特征,是拿去做high level 的任務的,也就是做分類,檢測。 如果想讓他做生成,我們還需要單獨 再 訓練一個prior 網絡。

在這里插入圖片描述

在視覺這邊 BEIT 把 DALL-E訓練好的 codebook 拿過去,然后把圖片全都量化成這樣子的特征圖,拿這個去做Ground Truth,自監督的訓練一個視覺網絡。

  • 缺點:VQ-VAE 學習的是一個固定的codebook,就意味著他沒有辦法像 VAE 這樣隨機采樣,生成對應的圖片

VQ-VAE 2

  • 把模型變成層級式的,不僅做局部的建模,也做了全局的建模,還加上了attention,模型表達能力變強了
  • 同時,他還根據codebook 又去學了一個prior,
    • 作者這里訓練了一個 pixelCNN 當作這個 prior 網絡, 從而能夠利用這個訓練好的codebook來做圖像的生成。 pixcelCNN 是一個自回歸模型

小總結:

對于VQ-VAE來說,先訓練了一個codebook, 然后又訓練一個pixcelCNN去做生成。
pixcelCNN 是一個自回歸模型,還有什么模型是自回歸模型嗎? GPT

在這里插入圖片描述

五,DALL-E (OpenAI) (2021.02)

  • OpenAI 把pixcelCNN 換成了GPT。既然 language 那邊做的又那么好,為什么不想個辦法,用文本來引導圖像生成呢?所以就有了DALL-E
  • 把文本特征和圖像特征直接連接起來,就變成了一個有1280token的序列
  • 然后把序列給到GPT,隨機把token做一下mask,然后GPT去自回歸的還原這個mask token
  • 推理的時候,提供text,變成text embedding, 然后GPT 把文本特征 用自回歸的方式 把圖片生成出來

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14098.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

硅谷裸機云服務器性能測評哪些內容

硅谷裸機云服務器,作為云計算領域的一股新興力量,近年來受到了廣泛關注。其強大的性能和靈活性為用戶提供了更高效、更穩定的云計算服務。那么,硅谷裸機云服務器的性能測評究竟包括哪些內容呢?接下來,我們就來科普一下。 首先&am…

如何讓大模型更聰明?

如何讓大模型更聰明? *隨著人工智能技術的飛速發展,大模型在多個領域展現出了前所未有的能力,但它們仍然面臨著理解力、泛化能力和適應性等方面的挑戰。那么,如何讓大模型變得更聰明呢? 方向一:算法創新 …

留學培訓行業PaaS應用系統架構的設計與實踐

隨著留學需求的增長和教育培訓市場的不斷擴大,留學培訓行業正面臨著越來越多的挑戰和機遇。在這個背景下,利用PaaS(Platform as a Service)平臺來構建留學培訓行業的應用系統架構,將成為提升服務質量和效率的重要手段。…

Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目錄 1. 概述1.1 API 網關1.1 Spring Cloud Gateway 2. 集成案例2.1 入門案例2.2 動態路由 1. 概述 1.1 API 網關 API網關已經成為了微服務架構的一個標配組件,是系統對外的唯一入口。所有的客戶端都通過統一的網關接入微服務,在網關層處理所有非業…

部署 harbor 創建私有項目

一在 Docker harbor 節點(192.168.11.)上操作 1 關閉防火墻防護 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 2 安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-ma…

SSRF攻擊技術

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF是要目標網站的內部系統。(因為他是從內部系統訪問的,所有可以通過它攻擊外網無法訪問的內部系…

思科模擬器--03.RIP協議路由--24.5.17

1.首先,先創建兩個個人電腦:PC0和PC1和三個路由器:R1,R2和R3. (訣竅:建議用文本框標注一下重要簡短的內容; 目的:降低失誤概率,提高成功率!) 第0步:(個人電腦的IP,子網掩碼和默認網關配置) 接著,可以先將個人電腦的IP和網關先配置一下…

ThreadLocal原理及使用

一、引言 在Java多線程編程中,ThreadLocal是一個非常有用的工具,它提供了一種將對象與線程關聯起來的機制,使得每個線程都可以擁有自己獨立的對象副本,從而避免了線程安全問題。然而,使用不當會導致內存泄漏問題。 二…

go 微服務框架kratos錯誤處理的使用方法及原理探究

通過go語言原生http中響應錯誤的實現方法,逐步了解和使用微服務框架 kratos 的錯誤處理方式,以及探究其實現原理。 一、go原生http響應錯誤信息的處理方法 處理方法: ①定義返回錯誤信息的結構體 ErrorResponse // 定義http返回錯誤信息的…

無人機飛手前途分析

無人機飛手的前途充滿了各種可能性和挑戰,這主要得益于無人機技術的快速發展和廣泛應用。以下是對無人機飛手前途的一些分析: 1. 技術發展與需求增長:隨著無人機技術的不斷進步,其應用場景也在持續擴大。從地理測繪、巡檢、農林植…

利用阿里OSS服務給文件設置過期刪除--簡單版

在云存儲廣泛應用的今天,阿里云的Object Storage Service(OSS)以其高度可擴展性、安全性和成本效益,成為了眾多企業和開發者存儲海量數據的首選方案。隨著數據量的不斷膨脹,高效的數據管理和成本控制變得尤為重要。其中…

IT學習筆記--Kafka

Kafka概述: 定義: Kafka是一個分布式的基于發布/訂閱模式的消息隊列,主要應用于大數據實時處理領域。 消息隊列消息隊列的兩種模式: 點對點模式: 消息生產者生產消息發送到Queue中,然后消息消費者從Queue中取出并且消費消息。 消息被消費以后&#…

Linux中解決普通用戶使用不了sudo問題

目錄 sudo的使用場景sudo使用不了的原因解決方法 sudo的使用場景 之前我們介紹了文件的權限問題 如果一個普通用戶想去執行一個它命令之外的權限,只能使用sudo 比如普通用戶使用yum去安裝軟件,需要sudo yum xxxx sudo使用不了的原因 這里我們用普通用戶…

小恐龍跳一跳源碼

小恐龍跳一跳源碼是前兩年就火爆過一次的小游戲源碼,不知怎么了今年有火爆了,所以今天就吧這個源碼分享出來了!有喜歡的直接下載就行,可以本地單機直接點擊index.html進行運行,又或者放在虛擬機或者服務器上與朋友進行…

python 獲取視頻的時長

以下是幾種獲取視頻時長的實現方法: 方法一:使用moviepy庫 from moviepy.editor import VideoFileClipdef get_video_duration(file_path):video VideoFileClip(file_path)duration video.durationvideo.close()return duration 方法二:…

SAP-FICO-憑證編號控制

成本憑證編號KANK 如果自己的公司下沒有,直接復制系統原有的就可以。使用系統默認即可。 如果不維護 會報錯“CO-憑證編號分配對于成本控制范圍****中的商業事務COIN無效” 財務憑證編號FBN1 可以用OBH2批量復制編號范圍。 物料賬期MMPV 財務賬期OB52

python使用base加密解密

原理 base編碼是一種加密解密措施,目前常用的有base16、base32和base64。其大致原理比較簡單。 以base64為例,base64加密后共有64中字符。其加密過程是編碼后將每3個字節作為一組,這樣每組就有3*824位。將每6位作為一個單位進行編碼&#xf…

1個逗號,提升Python代碼質量

有些時候,我們會在Python代碼中看到列表或其他科迭代對象的結尾會存在一個逗號: 而且編輯器和解釋器都容許這種逗號的存在,它就叫作拖尾逗號。 通常是為了在頻繁地增減數組元素的時候同時保證語法的正確,且拖尾逗號不占用數組的長…

MySQL 主備環境搭建 docker

MySQL 主備環境搭建 docker 拉取docker鏡像 sudo docker pull mysql:8.0 啟動容器 docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0配置 M…

第四十二天 | 背包問題理論

二維: 1.dp[i][j] 表示從下標為[0-i]的物品里任意取,放進容量為j的背包,價值總和最大是多少。 2.遞歸公式: dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]); 3.初始化: 首先從dp[i][j]的定義出發…