本記事ではFuseDreamと呼ばれる機械学習手法を用いて、AIにテキストを入力し、テキストに応じた絵を描いてもらう方法を紹介します。
FuseDreamとは
FuseDreamは、TextToImageタスクを実現する手法です。
TextToImageタスクとは、与えられたテキストから、テキストに沿った画像を生成するタスクを指します。
例えば"A photo of a
dog."というテキストを与えた場合、FuseDreamはテキストの意味を理解し、テキストに沿った"犬の写真"を生成します。
この技術はCLIPとGANと呼ばれる既存技術を適切に組み合わせたことによって実現されています。
CLIPとは、ImageToTextタスクを実現する手法で、画像を認識し適切なキャプション(画像の説明)を生成します。
またGAN(Genera tive Adversarial Networks)は、敵対的生成ネットワークと呼ばれ画像生成技術として用いられることの多い技術です。 FuseDreamは、GANを用いて画像を生成し、CLIPのスコアが最大化される画像を見つけることによって、TextToImageタスクを実現しています。 FuseDreamの特徴は、このGANとCLIPをFuseDreamパイプラインでつなぎ合わせ、適切に最適化している点にあります。
なお、以下の記事では有料にはなりますが、詳細な技術解説、Google Colaboratoryに対応した学習済みモデルを用いた画像・動画生成方法をご紹介しています。
CLIP+GANでテキストから画像を生成するレシピ
本レシピでは、CLIP+GANで構成されるFuseDreamの技術概要を解説し、実際にテキストから画像を生成する方法をご紹介します。
CLIP+GANでテキストから動画を生成するレシピ
本レシピでは、CLIP+GANで構成されるFuseDreamの技術概要を解説し、テキストから以下のような動画を生成する方法をご紹介します。
FuseDreamの導入手順
セットアップ1: conda環境構築
それでは早速、開発環境にFuseDreamをセットアップしていきます。
動作確認は下記の環境で行っています。
OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
それでは、FuseDreamをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。
conda環境構築手順を下記に記載します。FuseDreamの動作要件は下記の通りです。
なお筆者の環境ではPyTorch==1.10でも動作したためPytorchは1.7.1以上であれば問題無く動作すると思われます。
- PyTorch==1.7.1
- torchvision==0.8.2
- lpips==0.1.4
以上で、FuseDreamの環境構築は完了です。
セットアップ2: 学習済みモデルのダウンロード
続いて、学習済みモデルのダウンロードを行います。
以上でモデルのダウンロードは完了です。 モデルサイズもbiggan-512.pthで314MBほどと軽量のため比較的直ぐにダウンロードは完了します。
TextToImage(テキストから画像生成)
最後に本題のテキストから画像を生成する方法です。 ここまで準備ができていればコマンド一つで実行が可能です。なお入力するテキストは日本語・英語ともに可能となっています。
各オプションは以下の通りです。
--text
オプションで入力するテキストを設定
--seed
オプションで乱数を生成する元となる数字を設定
このため、同一テキストでもseedが異なれば、別の画像が生成されます。
また筆者の環境では画像生成までに約5分を要しました。
出力結果左:text->"beautiful woman" seed->1234 出力結果右:text->"beautiful woman" seed->999 |
生成結果ですが、女性であることは分かりますが、beautifulであるかどうかは厳しいところですね。。。
若干恐怖すら感じます。 他の出力結果をいくつか見てみます。
text->"車に乗る男性の写真" seed->1234 |
男性を視認することは難しいですが、車らしき画像は生成されています。 CLIPScoreも0.35と英語で入力した場合と大差ないため日本語にも対応しているようです。
また固有名詞も認識可能なようです。
文節の多いやや複雑な文章の出力結果は以下の通りです。
最後に抽象的な言葉を入力した結果です。
パラメータ設定
調整可能なパラメータを紹介します。
以下のパラメータはfusedream_generator.py
にて変更可能です。
-
INIT_ITERS
GANによる画像生成の試行回数 -
OPT_ITERS
最適化試行回数 -
get_G
256でbiggan-256.pthを使用、512でbiggan-512.pthを使用 -
latent_noise
Falseに設定することでエッジを鋭く出力
まとめ
本記事では、FuseDreamでテキストから画像を生成する方法を紹介しました。
近年様々なタスクを実現するモデルが開発されていますが、
今回の手法のように既存モデルの組み合わせによって新たなタスクを実現できると実現できるタスクの幅が広がりますね。
組み合わせの妙によって新規性を持つ技術を生み出せる点は非常に興味深いです。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1. 論文 - FuseDream: Training-Free Text-to-Image Generation with Improved CLIP+GAN Space Optimization
0 件のコメント :
コメントを投稿