我們在探討patches的方方面面。不過patches有一個核心bug:就是他的分片是簡單切割的,比如一張圖片切成9份,那么有可能,一個具象的語義信息,例如一個人臉,可能被切割在了四份里面,每一份都只是人臉的一部分,這樣的特征提取器表達力肯定是不完整的。
在NLP中,有一個專門的分詞器tokenizer。例如可以把滿腹經綸這樣的成語分為一個詞。如果圖像要套用NLP里面的tokens的概念。這樣的圖像語義分詞器就顯得非常重要。
業(yè)界對這塊也研究了很多。今天我們這條線盤一盤。目前我們整個系列還在盤圖像tokens這個概念,他只是整個知識樹的一個根,后面我們再整體全貌看如何構建一個視頻生成網絡模型的pipeline。
今天分享三塊:
1、VQVAE Neural Discrete Representation Learning。如何將圖片編碼為離散隱變量。
論文:
https://arxiv.org/abs/1711.00937。這個是(google deepmind 2017 NIPS)
代碼:https://github.com/karpathy/deep-vector-quantization
2、VQGAN Taming Transformers for High-Resolution Image Synthesis。他的核心思想是把VQVAE里面的CNN換成transformer。
論文:https://arxiv.org/pdf/2012.09841.pdf。這個是CVPR2021 oral。德國人的。
代碼:https://git.io/JnyvK.
3、MAGIT - Masked Generative Video Transformer。這個論文是在VQGAN的基礎上首次合成視頻。
論文: https://arxiv.org/abs/2212.05199
Project : https://MAGVIT.cs.cmu.edu/
代碼: https://github.com/google-research/magvit
一、VQVAE 圖像的離線隱空間編碼器這是一篇高被引奠基性的文章。后面很多論文都在這個論文基礎上展開。他的核心思想其實也很簡單。附上論文原圖。更加真實理解論文本意。
整個pipeline在上圖中。我們詳細講解一下整個過程。整個圖從左往右看,虛黑線隔開的右半角部分是講如何最近鄰搜索離散化的。一只小狗的原始圖片,通過一個CNN編碼器網絡,轉變?yōu)橐粋€隱變量綠色立方體空間Ze;由于是神經網絡非線性變化,Ze肯定是一個連續(xù)變量空間矩陣,這時候,通過一個特征空間查找表E,將Ze里面的連續(xù)值,通過最近鄰算法查找到最相近的點ei,從而將綠立方體變成了淺紫色立方體特征空間Zq。然后對這個淺紫色特征空間進行CNN的解碼器變換,變換出一個真實圖像出來。如果編碼器學的好,就說明這個特征表示Zq非常有效。我們就拿這個Zq來表示這個圖片了。由于Zq是離散值,因此就是一個圖像的離散特征表示。紅線表示的是梯度傳播的時候直接跳過離散化查找表。
整個loss共三項。
第一項很簡單,x是輸入的圖像,Zq(x)是解碼器輸出圖像,這個就是一個重建loss,看輸入的原始圖像和解碼器輸出的圖像之間的loss。后兩項看起來比較復雜。我通俗易懂的給大家解釋下原理:這兩個loss的目的是讓離散化查找表embedding space 中的節(jié)點更內聚的。所謂內聚,就是,以這張圖為例,你可以把狗的耳朵當成一個離散值節(jié)點,那么兩個狗耳朵就不需要兩個離散化節(jié)點了。這樣就提升了離散節(jié)點的表達力。他就是NL P里面詞表的概念。
二、VQGAN : VQVAE的改進版這篇論文有很多的博客在講。但很多人都講錯了。VQGAN他的編碼器和解碼器都是CNN,并沒有變化;他之所以命名為VQGAN,核心的區(qū)別是他的解碼這一塊,就是隱空間特征生成圖像這塊,他用的是GAN:有兩個CNN,一個生成式CNN生成圖像,一個判別式CNN對生成的真假打分。所以說他整個pipeline是沒有transformer的。并不是編碼器和解碼器變成了transformer。
整個pipeline如上圖所示。從左到右看,下面一層就是VQGAN的整個pipeline,img到編碼器CNN,然后通過圖像分詞器tokenizer轉成 Zq,然后再通過GAN生成img。整個pipeline有三個CNN。編碼器cnn encoder,解碼器CNN decoder,然后是判別器CNN。
Transformer干的是哪個活呢?是對分詞器的優(yōu)化,和對Z- Zq表示的優(yōu)化。在VQ VAE中,分詞器就是一個pixel CNN,當然這個也算是比較好的表達方式,如果你學過數(shù)字圖像處理這個課,最原始的圖像離散化表示是超像素分割。Transformer第一作用的生產出最具有表達力的圖像詞匯表;第二個作用是,當前的圖像,用了詞匯1-i-1共i個詞匯后,還需要哪個詞匯(圖像語義token),能更好的表達當前的圖像,從而生產出最具有表達力的Zq。
事實上,這個transformer表達的分詞器詞匯表對整個模型來說非常關鍵。
看完覺得寫得好的,不防打賞一元,以支持藍海情報網揭秘更多好的項目。