NovelAI Journal
Back to NovelAI

ジャーナル記事

NovelAI アスペクト比バケッティングのソースコード公開(MIT ライセンス)

アスペクト比バケッティングを用いた学習は画像生成の品質を大きく向上させます。そこで NovelAI のバケッティング用コードを MIT ライセンスで公開することにしました。

公開日

アスペクト比バケッティングを用いた学習は、画像生成の出力品質を大きく向上させます(そして正直なところ、センタークロップで学習されたベースモデルがこれ以上増えてほしくないという思いもあります)。そこで NovelAI のバケッティング用コードを、寛容な MIT ライセンスのもとで公開することにしました。

https://github.com/NovelAI/novelai-aspect-ratio-bucketing

このリポジトリでは、以前の記事で説明した、画像生成モデルの学習向けアスペクト比バケッティングの実装を提供しています。

アスペクト比バケッティング

既存の画像生成モデルによくある問題として、不自然に切り取られた画像を生成しやすいという点があります。これは、これらのモデルが正方形の画像を出力するように学習されているためです。しかし、写真や作品の多くは正方形ではありません。一方でモデルは同時に同じサイズの画像しか扱えず、学習時には GPU の効率を高めるために複数のサンプルをまとめて処理するのが一般的です。その妥協案として正方形が選ばれ、学習時には各画像の中央だけを切り出して、学習例としてモデルに与えていました。

たとえば、人物が足や頭のない状態で生成されたり、剣が刀身だけになって柄と切っ先が画面の外に出てしまったりします。
私たちは物語体験に寄り添う画像生成モデルを作っているので、切れていないきちんとしたキャラクターを生成できることが重要です。生成された騎士が、無限に伸びる金属質な直線を握っているようでは困るのです。

切り取られた画像で学習することのもう一つの問題は、テキストと画像の内容がずれてしまう点です。

たとえば `crown` タグの付いた画像は、センタークロップを適用すると王冠が写らなくなっていることがよくあります。君主の首が落とされてしまうわけです。

センタークロップの代わりにランダムクロップを使っても、これらの問題はわずかにしか改善しないことが分かりました。

Stable Diffusion を可変サイズの画像で使うことは可能ですが、本来の解像度である 512x512 から大きく離れると同じ要素が繰り返し現れやすくなり、逆に解像度が低すぎると判別できない画像になってしまいます。

とはいえ、このことは可変サイズの画像でモデルを学習できる可能性を示していました。可変サイズのサンプルを1枚ずつ学習すること自体は簡単ですが、非常に時間がかかるうえ、ミニバッチによる正則化が効かないぶん学習が不安定になりやすくなります。

これから、切り取られていない画像がたくさん生まれることを楽しみにしています!