前回GanモデルによるAI画像生成を記事にしましたが、今回はDiffusion Modelによる画像生成をしてみました。
DiffusionModelとは最近話題の画像生成系のAIモデルです。
下記が実際にDiffusionModelで生成した画像です。
128x128の画像を学習させ、128x128の画像を生成しています。
Colab環境で1.5日ほど学習させています。
Ganとの違いはDiffusionModelはGANよりも大きなサイズの画像生成を安定して行うことができます。
GANでは生成ターゲットの画像が大きくなっていくと、生成した画像に対して評価する部分が多くなり大きな画像を安定して生成できませんでした。
生成画像にブロックノイズのような模様が出たり、画像が乱れたりします。
※GANでも大きな画像を生成できるように生成画像を徐々に大きくしていくGANモデルも考案されていますが、学習に多くのリソースが必要なので今回は試しませんでした。
また、GANでは画像生成部分と画像の質を判断する部分が独立しているため学習時にどちらもバランスよく学習をしていく必要があり、画像生成部分を安定して学習させていくのが不安定になりがちという問題がありました。
DiffusionModelでは画像をノイズから画像に変換する方法を学習するため安定して画像生成部分を学習させることができます。
DiffusionModelは物理現象の予測モデルを画像生成に当てはめたモデルとなっています。
お湯に水を加えるさと最初は冷たい部分と熱い部分が混ざり合っていない状態になりますが、しばらくすると全体が均一の温度に落ち着きます。
この物理現象のある時間時点でお湯はどうなっているか予測するモデルがあり、それを画像に当てはめたのがDiffusionModelです。
画像に当てはめた場合、イメージ的には画像の最終系はお湯と水が混ざり合っていない状態で、画像生成前の状態はお湯と水が混ざり合った状態だと考えます。
そして、学習中は学習データとして入力する画像データに少しずつノイズを加え、最終的にランダムなノイズ画像になる過程を学習していきます。
画像からランダムなノイズに変化していく過程を学習し、画像生成時にはその逆の処理を行いランダムなノイズから画像を生成していきます。
ノイズから画像への変換は確率的な変換なので毎回ランダムなノイズを入力として与えて生成した画像は学習したデータとは若干ちがう画像が生成されるようになります。
大きな画像の学習には大容量メモリのGPUが必要なので個人で大きな画像を生成するモデルを学習させるのは大変ですが、すごく面白いモデルですね。
現在は128x128の画像しか学習させられていませんがもう少し大きな画像も学習させてみたいなと思います。
0コメント