-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[2204.06125] Hierarchical Text-Conditional Image Generation with CLIP Latents #65
Comments
DALL·E が最初出たときにかなりびっくりしたが、その後 GLIDE #63 などが出てきてテキストからの画像生成がさらに発展し、その後も勢いは留まることを知らずにこの DALL·E 2 や Imagen などが出てきた。 このトピックは興味深くて論文をフォローしていたので、DALL·E 2 についても読んでみる。 |
主たる道具立てである CLIP や diffusion model に関してはこの前身とも言える GLIDE と変わりはない。 論文を眺めと細かいところはあまり書いてない感じがしてやや気になるが、とりあえず読んでいく。 |
道具立ては先行研究で出揃ってるので、以下のアーキテクチャ図を理解するのが目的となる。 詳細に入る前にまずはざっくりでの理解。 点線の上の部分は CLIP の学習を表現している。 点線の下の部分は text-to-image の生成過程を表現している。 画像生成部分は CLIP の画像特徴量ベクトルをから生成するので、このアーキテクチャ自体は unCLIP と名付けられている。 |
上記の prior と decoder がどういうものかを詳しくみる前に、モデルとして conditional diffusion model を知っておく必要がある。 まずは記号の定義として、$x_{0} ... x_{T}$ が元画像からノイズ画像を timestep 毎に表現したもので、$y$ をラベル(例えば犬とか)とする。ここで やりたいことはこの conditional バージョンの場合で遷移確率を(利用可能な形で)定式化することである。 最初に以下のように仮定する。 ここまでは自然であり、ここから出発して reverse process の遷移確率がどのように書けるかを明らかにしていく。 まずは これを使って timestep t での確率分布も同様であることが示せる。 これらを使うことで、 $\hat{q} (x_{t} | x_{t+1}) = \frac{ \hat{q} (x_{t+1} | x_{t}) \hat{q} (x_t) }{\hat{q} (x_{t+1})} = \frac{ q (x_{t+1} | x_{t}) q (x_t) }{q (x_{t+1})} = q (x_{t} | x_{t+1}) $ と unconditional な reverse process では いよいよ conditional な reverse process で、これは straightforward な計算により以下のようになる。 分母は これはノイズあり画像からラベルを予測する classifier を別に準備すればよい(ノイズあり画像をインプットとするため典型的な pre-trained モデルが使えないという問題はある)。 |
conditional diffusion model が理解できていれば話は早い。 何はともあれアーキテクチャの中身をもう少し詳しく見ていく。 記号の定義として、画像
|
prior には AutoRegreesive (AR) model と diffusion model の 2 パターンを検討している。 AR model priorAR model の方は学習の効率性のために PCA して次元削減して、オリジナルの画像の特徴量ベクトル 1024 次元のうち 319 次元の情報を扱っている。この 319 次元の量を特異値の絶対値の大きい順に並べてからそれぞれ 1024 次元のバケットに離散化して、これを予測するという問題設定にしている。モデルは causal attention mask を使った decoder Transformer である。 つまりこれは離散量である sequence を予測するという問題になっており、その意味では文章生成と同様である。 テキスト情報は、caption と CLIP のテキスト特徴量ベクトルを入力の prefix に encode して使っている。さらに このテキスト情報は、例えば GPT モデルでいう場合の prompt に相当している。 これは diffusion priorこちらも画像特徴量ベクトル AR model の方でやっていた denoising diffusion probabilistic model では gaussian の平均において この ただ、この損失関数の書き方だと任意の timestep に対して denoise した結果をもともとの $ z_i $ との差分を取ってるので意味が分からない。これ $ || f_\theta (z^{(t)}_i, t, y) - z^{(t-1)}_i || $ がやりたいことと思うので typo かな。 この論文はさらっとした記述しかないし公式実装もないので理解しきれないところがあるので疑問系ばかりのメモになってしまった... |
decoder は GLIDE で提案された方法を改良したものになっている。 prior と同様に classifier-free guidance を使っており、10% でランダムに CLIP embedding これでできる画像は 64x64 であり、これを upsample する 2 つの diffusion model を準備し、64x64 → 256x256 → 1024x1024 と高解像度の画像を生成する。このように多段で upsample して高解像度の画像を作るというのは GAN とかでもよく使われているのでそれを踏襲しているということだろう。 |
ということで、これでもかというほど diffusion model を盛り込んだモデルになっていることがわかる。 なぜ diffusion model が良い性能を発揮するのか、という点については自分はまだ理解が及んでないけど、とにかくよく使われている。 |
学習では、データ量として、encoder では 650M の画像(とテキストのペア)、decoder, upsampler, prior では 250M の画像(とテキストのペア)を使っている。 各種モデルの hyperparameter は以下。 |
あとは embedding space で画像特徴量ベクトルを一方からもう一方へ連続的に変化して生成される画像がどう変わるかとか、テキストでも同じことをやったりしている。
結果が以下。 |
その他にも CLIP の embedding space を調べるものとして、typographic attacks についても言及している。 この論文ではそのようにラベルが誤認識される画像を embed してそれを元に画像生成をする(diffusion model のランダム性によって元の特徴量のコンテキストは維持しつつ色々な画像が生成できる)と、異なるラベルと予測されている画像でも元の画像を再現できることを示している。 |
その他には prior を入れた方が結果がよいこと(GLIDE がそうであったように、テキストから画像を生成するということを考えると prior はなくても可能なのでその比較をしている)を示したり、AR prior と diffusion prior を比べると人間の評価で Photorealism, Caption Similarity, Diversity いずれでも diffusion prior の方がよいことを示したり、MS COCO のデータで Zero-shot FID を測定して先行研究よりよいことを示したりしている。 unCLIP が GLIDE よりも常によいかというとそういうわけでもなくて、苦手なケースが存在する。 それ以外にも看板に deep learning と書いてある、みたいなケースも文字がうまく書かれない問題が知られている。 |
ということで一通り読んでみた。 論文の記述があっさりしていて公式実装もないので具体的にどうなっているか分からないところがちょこちょこあるのは辛いところだった。 |
論文リンク
https://arxiv.org/abs/2204.06125
公開日(yyyy/mm/dd)
2022/04/13
概要
DALL·E 2 の論文。
論文ではこのモデルは CLIP の画像特徴量ベクトルから画像を生成するものなので unCLIP と命名されているが、その後の展開を見るに DALL·E 2 と呼ばれていることがほとんどであると思う。
CLIP のテキスト特徴量から prior モデルで CLIP の画像特徴量ベクトルを作り、その画像特徴量ベクトルから decoder モデルで画像を生成するというモデルになっている。
diffusion モデルがふんだんに使われており、prior, decoder の画像特徴量ベクトルから 64x64 の画像を作るところ, decoder で 64x64 → 256x256 と upsample するところ、decoder で 256x256 → 1024x1024 と upsample するところ、と合計 4 つの diffusion model が使われている。
その性能は高く、テキストから生成した画像はかなりの質の高さである。
ただ論文の記述があまり詳しくなく、公式実装もないので具体的な理解が難しいところが多い。
公式実装はないけど生成した画像は公開されてる: https://github.com/openai/dalle-2-preview
プロジェクトページ: https://openai.com/dall-e-2/
非公式実装: https://github.com/lucidrains/DALLE2-pytorch
The text was updated successfully, but these errors were encountered: