デバイス上でテキストから画像を生成できる MediaPipe ソリューションがデベロッパー向け Android で利用可能に

10月 09, 2023
Paul Ruiz Senior Developer Relations Engineer
Kris Tonthat Technical Writer

今年、Google は Android 向けに、拡散モデルを使用したテキストからのオンデバイス画像生成を、MediaPipe Solutions 経由でプレビュー公開しました。このたび、デベロッパーが Android デバイス向けにテストを実施できるよう、この機能が早期テスト ソリューション「Image Generator」として利用できるようになったことをお知らせします。このソリューションを実装すると、ハイエンド デバイスでは 15 秒以内という高速で画像を簡単に、デバイス上のみの処理で生成できるようになります。ぜひご活用ください。

新しい MediaPipe Image Generator のタスクを使用するには、主に 3 つの方法があります。

  1. 標準的な拡散モデルを使用したテキスト プロンプトに基づく、テキストから画像への生成。
  2. テキスト プロンプト、および拡散プラグインによる画像調整に基づく制御可能な画像生成。
  3. 低ランク適応(LoRA)の重み付けを使用したテキスト プロンプトに基づくカスタマイズされた画像生成。固有のユースケースに合わせて事前定義した具体的な概念の画像を作成できます。

モデル

この新しい MediaPipe タスクのメリットを詳しく見ていく前に、Image Generation API がサポートしているのは Stable Diffusion v1.5 アーキテクチャに正確に一致するモデルであることを認識しておくことが重要です。デベロッパーは変換スクリプトを使用し、MediaPipe Image Generator がサポートする形式にモデルを変換することで、事前トレーニングまたはファイン チューニングされたモデルを使用できます。

また、Vertex AI で MediaPipe Diffusion LoRA によるファイン チューニングを行って基盤モデルをカスタマイズすることもできます。そうすれば、モデル全体のファイン チューニングを行うことなく、新しい概念を基盤モデルに注入できます。このプロセスについて詳しくは、公式ドキュメントをご覧ください。

カスタマイズなしで今すぐこのタスクを試してみたいという方のために、同じドキュメント内に検証済みのワーキング モデルへのリンクもいくつかご用意しています。

拡散モデルを利用した画像生成

Image Generator のタスクを試す最も簡単な方法は、テキスト プロンプトを入力し、拡散モデルを使用して生成された画像を受け取ることです。

MediaPipe の他のタスクと同様に、options オブジェクトを作成することから始めます。この場合、必要なのはデバイス上の基盤モデルファイルへのパスを定義することのみです。options オブジェクトができたら、ImageGenerator を作成できます。

val options = ImageGeneratorOptions.builder().setImageGeneratorModelDirectory(MODEL_PATH).build() imageGenerator = ImageGenerator.createFromOptions(context, options)

新しい ImageGenerator を作成したら、プロンプト、ジェネレーターが生成するために必要な反復回数、シード値を渡すことによって、新しい画像を作成できます。これによって新しい画像を作成するためのブロック オペレーションが実行されるため、ビットマップの新しい result オブジェクトを返す前に、バックグラウンド スレッドで実行することをおすすめします。

val result = imageGenerator.generate(prompt_string, iterations, seed) val bitmap = BitmapExtractor.extract(result?.generatedImage())

このシンプルな入力 / 結果出力フォーマットに加え、execute() 関数を介して各反復処理を手動で順を追って確認できる方法もサポートされています。中間結果画像を複数の段階で受け取り、生成の進行状況を把握することが可能です。パフォーマンスに影響し、処理が複雑になるため、大半のアプリでは中間結果を受け取ることは推奨されませんが、内部の動作を検証するには良い方法です。やや高度なプロセスを伴いますが、このデモとこの投稿で紹介した他の例は、GitHub の公式サンプルアプリで確認できます。

プラグインを使用した画像生成

デバイス上でプロンプトのみから新しい画像を作成できること自体がすでに大きな前進ですが、さらに Google は新しいプラグイン システムを実装し、テキスト プロンプトと一緒に条件画像も拡散モデルへの入力として使用できるようにしました。

現行の世代に基盤を提供できる 3 つの異なる方法(顔の構造、エッジ検出、奥行き認識)が現在サポートされています。プラグインを使用すると、画像を提供してその画像から特定の構造を抽出し、その構造を使用して新しい画像を作成できます。

LoRA の重み付け

本日リリースする 3 つ目の主要な機能は、LoRA を使用して Image Generator のタスクをカスタマイズし、トレーニング中に提示される特定のオブジェクト、人、スタイルなどの新しい概念に関する基盤モデルを教える機能です。Image Generator は新しい LoRA の重み付けにより、生成された画像に特定の概念を注入できる専用ジェネレータになります。

LoRA の重み付けは、すべての画像を油絵のスタイルにしたい場合や、作成した設定で特定のティーポットを表示したい場合に便利です。Vertex AI での LoRA の重み付けについて詳しくは、MediaPipe Stable Diffusion LoRA モデルカードで確認できます。作成にはこちらのノートブックをお役立てください。生成された LoRA の重み付けは、MediaPipe Tasks Image Generator API を使用してデバイスにデプロイすることも、Vertex AI のワンクリック デプロイを使用して最適化されたサーバー推論にデプロイすることもできます。

以下の例では、Dreambooth ティーポット トレーニング画像セットに含まれる複数のティーポット画像を使用して LoRA の重み付けを作成しました。次に、その重み付けを使用して、さまざまな設定でティーポットの新しい画像を生成します。

次のステップ

これは、デバイス上の画像生成でサポートを予定していることのほんの始まりに過ぎません。デベロッパーの皆様が構築する素晴らしい作品を拝見できることを楽しみにしています。ハッシュタグ #MediaPipeImageGen とタグ @GoogleDevs を付けて作品を X(旧 Twitter)に投稿してください。ここで取り上げたことの実装例として、GitHub の公式サンプルを参考にできます。Google の公式ドキュメントや、MediaPipe チームがアップデートやチュートリアルを随時公開している「Google for Developers」YouTube チャンネルもご活用ください。

謝辞

この記事の執筆にご協力くださったすべてのチームメンバー、Lu Wang、Yi-Chun Kuo、Sebastian Schmidt、Kris Tonthat、Jiuqiang Tang、Khanh LeViet、Paul Ruiz、Qifei Wang、Yang Zhao、Yuqi Li、Lawrence Chan、Tingbo Hou、Joe Zou、Raman Sarokin、Juhyun Lee、Geng Yan、Ekaterina Ignasheva、Shanthal Vasanth、Glenn Cameron、Mark Sherwood、Andrei Kulik、Chuo-Ling Chang、Matthias Grundmann、および Google Cloud の Changyu Zhu、Genquan Duan、Bo Wu、Ting Yu、Shengyang Dai に心より感謝します。