見出し画像

CLIP Text Deprojectorを使って画像生成してみる ~増量した訓練データの使い方~

前回の記事では10万件の訓練データを用いてモデルを学習する方法を提案しました。今回は、その方法を改良してみます。

前回の記事

他のStable Diffusionの関連記事

Layered Diffusion Pipelineを使うためのリンク集

学習手順の改良

前回提案した学習手順は次の通りです。

  1. 10万件のデータを1万件ごとに10分割し、ローカルディスクにコピーする

  2. 10分割された部分データから、ランダムに5つをメモリに読み込む

  3. メモリ上のデータをランダムな順序で1巡してモデルを学習させる

  4. メモリ上のデータを破棄する

  5. 条件を満たしていれば終了。そうでなければ2に戻る

このうち、2番目のステップで5つメモリに読み込むとき、前回は毎回10個からランダムに選びましたが、今回は次のように変更しました。

  • 前回のループまでで使われた部分データにはマークを付けておき、読み込むデータを選ぶ時に除外する。(非復元抽出)

  • 全ての部分データにマークが付けられていれば、全てのマークを消して、全ての部分データからランダムに選ぶ。

この方式では、ループ2回分で10個の部分データを全て使い切ることになるため、前回とはエポックの数え方を変えて、ループ2回で1エポックと数えることとしました。

モデルアーキテクチャ

今回の実験では、前回使用した2種類のモデルアーキテクチャを比較しています。

  • 従来型:入力の最初のスロットに、空文字列のembeddingを使用する。

  • 新方式:入力の最初のスロットに、入力文字列のembeddingに2層のパーセプトロン(MLP)を適用した結果を使用する。

新方式アーキテクチャ

アンサンブルモデルのアンサンブル方式は、前回提案した新しい方式は使用せず、従来型のアンサンブル方式を用いています。

固定エポック数でモデル学習

最初に、アンサンブルモデルの内部モデルとなる4つのモデルを、全て同じエポック数まで学習したモデルで画像を生成して比較しました。従来型と新方式で使用したエポック数は、それぞれ次の通りです。

  • 従来型:8エポック

  • 新方式:10エポック

生成画像は、最上段がdeprojector不使用で、2段目が前々回に生成した5万件の訓練データを使用したモデル、3段目と4段目が今回10万件の訓練データを使用したモデルで、3段目が従来型アーキテクチャ、4段目が新方式アーキテクチャです。

  • 1段目:deprojector不使用

  • 2段目:従来型アーキテクチャ、5万件の訓練データ

  • 3段目:従来型アーキテクチャ、10万件の訓練データ

  • 4段目:新方式アーキテクチャ、10万件の訓練データ

単一embedding
複数embeddingの合成

単一embeddingの生成画像では、2段目と比べて、3段目4段目は少し1段目の画像へと近づいたようです。

複数embeddingを合成した生成画像では、3段目4段目に比べて、2段目の方がやや入力文字列の意味をよく反映しているようです。

内部モデルごとにエポック数を選択

アンサンブルモデルの各内部モデルの生成画像を詳しく比較すると、内部モデルごとに学習を止めるエポック数を決める方が良い結果になりそうでした。以下が、内部モデルごとに決めたエポック数です。

  • 従来型:6,8,6,8

  • 新方式:8,9,11,10

生成画像の並び順は、上の節と同じになっています。

  • 1段目:deprojector不使用

  • 2段目:従来型アーキテクチャ、5万件の訓練データ

  • 3段目:従来型アーキテクチャ、10万件の訓練データ

  • 4段目:新方式アーキテクチャ、10万件の訓練データ

単一embedding
複数embeddingの合成

単一embeddingを見ると、3段目4段目がはっきりと2段目よりも改善していて、1段目とも比肩する結果となっています。また、3段目よりも4段目の方がわずかによい結果となっているようです。

複数embeddingを合成した画像でも、4段目が2段目3段目よりもよい結果となっており、また、1段目にも比肩する結果となっていると言えると思います。

全体として、4段目(新方式アーキテクチャ)の結果が2段目3段目(従来型アーキテクチャ)よりもよく、1段目(deprojectorなし)に接近しているようです。

まとめ

物理メモリを超える訓練データを使って学習する場合は、非復元抽出を用いる方がモデルの性能が高くなることが分かりました。

また、10万件の訓練データを使う場合は、新方式アーキテクチャを使う方が、特に複数embeddingの合成において、良い性能を出すことが分かりました。

ただし、新方式アーキテクチャの方が従来型アーキテクチャよりも学習に必要なエポック数が多くなるようです。

エポック数の決定では、アンサンブルモデルの内部モデルで一律のエポック数を用いるよりも、内部モデルごとに最適なエポック数を求める方が、全体としてアンサンブルモデルの性能も向上するようです。

追記

最新版のモデルデータは、Hugging Faceリポジトリに登録済みです。新方式アーキテクチャを約10万件のデータを用いて、モデル別のエポック数でトレーニングした4つモデルのアンサンブルモデルです。

この記事が気に入ったらサポートをしてみませんか?