こんにちは。松茸の土瓶蒸しが食べたいですね。
本日は画像を生成する拡散モデルに関する記事を調べています。本当は論文を読みたいところですが、結構解説記事があるかどうかってのも気になります。
ちょっと調べてみたところ、かなり記事がありました。
次世代生成モデル、Diffusion Modelの紹介
https://recruit.gmo.jp/engineer/jisedai/blog/diffusion_model/
「Diffusion Modelとは一言いうと、まず少しずつもの壊して、その壊れた状態から復元するというコンセプトです。具体的に、オリジナルデータに対して、各ステップ tに対して、少しずつGaussian Noiseを入れて(Forward process)、T ステップまで行います。Tは大きいければ、最終的にXTは完全にgausian 分布になり、そこから、少しずつnoiseを取り除いて、もとの画像を戻すという学習を行います。」
現論文はこちらのようです。
DENOISING DIFFUSION IMPLICIT MODELS (J.Song, et.al 2020)
https://arxiv.org/pdf/2010.02502.pdf
記事は数式はほとんど出ませんが、コードをベースにきちんと説明していてとてもわかりやすかったです。概要を掴むには十分でしょう。
SSII2023 [SS1] 拡散モデルの基礎とその応用 ~Diffusion Models入門~
https://speakerdeck.com/ssii/ssii2023-ss1
こちらの資料は完璧でした。。。数式から理論や派生研究まで全部載っています。個人的にはこちらを読む感じになると思います。知識がないと概要の把握は厳しいと思います。
Diffusion modelを用いたfew-shot商品画像分類の検討
https://tech.preferred.jp/ja/blog/enhancing-product-classification/
優秀なインターンの方による解説です。成り立ち自体はシンプルに解説しています。潜在空間で計算をするLatent Diffusion Modelの解説から、AdapterとしてLoRAの解説へ。主にLoRAの検討をしていました。
次です。
What are Diffusion Models?
https://zenn.dev/nakky/articles/09fb1804001ff8
こちらもきちんと技術的に解説されていました。細かい高速化や派生技術もフォローされていて技術とその派生のバランスがよかったです。基礎だけ学びたい方にはちょっと難しいかもしれません。
画像生成AIで頻出の拡散モデルについて分かりやすく解説!
https://toukei-lab.com/diffusion-model
対話形式で詳しくいろんな角度から説明されていました。最初に概要が知りたい方はこの解説がいいかもしれませんね。
拡散モデルに入門してみる
https://qiita.com/momo10/items/e19aaf66cc7088ef3da3
めちゃくちゃ簡潔に技術周りをシンプルにまとめています。技術周りを概観したい時にはいいかもしれません。
【論文解説】Diffusion Modelを理解する
https://data-analytics.fun/2022/02/03/understanding-diffusion-model/#google_vignette
こちらもめちゃくちゃいいですね。U-Netなどにも触れていてわかりやすいです。どの記事もきちんと書かれていてさすがです。。。
DiffusionモデルをPyTorchで実装する① ~ Diffusionモデル実装編
https://data-analytics.fun/2022/08/24/diffusion-model-pytorch-1/
こちらは実装付きです。コードを通じて理解するにはとても良いと思います。解説を読んで概要がつかめてPyTorchで実装したい場合にはいい記事です。
Conditional Diffusion Model(条件付き拡散モデル)を最初からトレーニングする方法
https://wandb.ai/wandb_fc/japanese/reports/Conditional-Diffusion-Model---VmlldzozNTUxNDE4
こちらもコード中心ですね。今回はまだ概要を掴みたいだけなのでコードまでは見れませんが、今後使いたいと思います。
では、軽くこれらの記事を中心に拡散モデルを見てみます。とにかくたくさん解説がありますのであまり必要ないですが、今後気になるモデルもあるのでみてみたいと思います。
細かいテクニックは別として、拡散モデルは考え方はとてもシンプルそうです。
元の画像に少しずつノイズを加えていって、拡散過程と言ってノイズ画像にして、その逆にノイズを元の画像に戻すためにどのようにどのようにノイズ除去をするかを進めていくものです。
ニューラルネットワーク部分にはU-Netを使うのが一般的?のようですが、U-Netを知らなかったので、それも勉強しなくてはいけません。
仕組み自体はかなりシンプルでしたので、次は早速実装をしてみたいと思います。薄い記事ですみません!以上です。