メインコンテンツに移動
日常で楽しむクラウドテクノロジー

Nyantech 画像生成選手権 - 画像生成 AI を使ってお題に近い猫の画像を生成しよう ! の巻

2023-02-20 | Author : 大渕 麻莉, 秋田 仁雅, 石橋 直樹

はじめに

こんにちは、機械学習ソリューションアーキテクトの大渕です。

いままで、Amazon Rekognition Custom LabelsAmazon SageMaker の画像分類モデルを使って、写真に写っているのがミケなのかタマなのかを見分けてきました。また、こちらの記事 では類似画像検索の手法を使ってたくさんある猫写真の中から自分の猫に似ている猫の写真を見つける方法をご紹介しました。今回は、呪文を唱えて画像を生成してみようと思います。

Stable Diffusion という画像生成AIをご存知でしょうか ? 2022 年に登場し、テキスト (プロンプト) を入力するとそのテキストにあった画像を生成してくれる AI です。期待する画像を生成するためには、プロンプトをいかにうまく作れるかが重要で、プロンプトを作る工程はプロンプトエンジニアリングと呼ばれたりします。また、画像生成に使われる、長くて複雑なプロンプトは呪文と呼ばれたりします。今回は、この Stable Diffusion を使ってとある選手権大会を開催したいと思います。

その名も、猫召喚士選手権 !


X ポスト » | Facebook シェア » | はてブ »

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
今すぐ特典を受け取る »

1. 一番上手にお題の猫を召喚できるのは誰だ !

なにやら突然始まりましたが、どうやらお題の画像に写っている猫を一番うまく再現して生成できた人が優勝する大会のようです。そして、大会のコミッショナーと解説員が招集されたようです。

こんにちは、大会コミッショナーのタマにゃ。

こんにちは、解説員のミケです。語尾に「にゃ」をつけるとかあざとくないですか ?

そのほうがニンゲン受けがいいにゃ。大人の都合にゃ。

そうですか、私はこのままで失礼します。

さて、早速ですが大会の参加者の紹介に移ろうと思います。参加いただくのは、こちらの 3 名です〜 パチパチ。

エントリーNo. 1 イシバシ

エントリーNo. 2 アキタ

エントリーNo. 3 オオブチ

それぞれ、この大会への意気込みを述べるにゃ。

イシバシ「今まで溜めてきた機械学習力を全力で叩き込みます !」

アキタ「機械学習と仲良くなるために全力を尽くします !」

オオブチ「猫大好き !」

ここで参加者から猫好き宣言出ましたね。

良い心意気にゃ。オオブチに 1 ポイントやるにゃ。


オオブチ「ありがたき幸せ。」

暫定ランキング

  1. オオブチ :  1 pt

  2. イシバシ : 0 pt

  3. アキタ : 0 pt

えっ、そんなポイントがあるんですか。まだ始まってもいないのに !

おれがルールブックにゃ。そしてもう戦いは始まっているにゃ。

(まあいいか。) はい、ではお題を発表しますね。お題は 2 つで、合計点で競っていただきます。

ではまず 1 つ目はこちら !

お題 1 : 毛繕いをしているときに不意に台所からカサカサ音が聞こえた白猫

白くて綺麗な毛並みとポーズがポイントですね。

では、各参加者の演技を見てみましょう。まずはイシバシ選手どうぞ !

A white cat wearing a patterned bow tie is sitting on a newspaper on a wooden floor.

イシバシ選手の挑戦

イシバシ「新聞紙の上に猫がいるところを評価してください !」

新聞紙に座る猫
A tabby cat is lying comfortably on a spread of newspapers, looking towards the camera.

イシバシ選手の評価

いきなり白くない猫が出てきましたね。

かわいいけど、召喚する猫が間違っているにゃ。残念だけど 0 ポイントにゃ。

イシバシ「ぐぬぬ・・・。」

続いて、アキタ選手どうぞ。

アキタ選手の挑戦

アキタ「おしゃれスカーフと、新聞紙の上で前足をちょろりと前に出しているところをみてください !」

a chubby white cat wears neck scarf and shows her tangled arms and legs on the gray newspaper on the hardwood floor
A white cat wearing a patterned bandana is lying on the floor with its paw on an open magazine, appearing to be reading it.

アキタ選手の評価

プロンプトの chubby にオリジナリティを感じますね。スカーフと新聞という小道具もバッチリ再現されています。

なんか眉毛やお髭がもさもさっとしていて威厳を感じるにゃ。おじいちゃんを思い出してしんみりしちゃったにゃ。猫の柄も合っているし、小道具が揃っていて良い出来なアキタ選手には 3 ポイントあげるにゃ。

アキタ「恐縮です。ポイントになりそうな要素をいかに呪文に入れるかが腕の見せ所でした (やった ! 暫定トップだ !)」

アキタ選手いいコメントしますね。では最後にオオブチ選手どうぞ。

オオブチ選手の挑戦

オオブチ「白猫が新聞紙の上に乗っているところと、後ろ足ではないですが前足を上げているのがアピールポイントです。」

white cat, licking back legs, short legs, on newspaper
A white cat sitting on a pile of open newspapers.

オオブチ選手の評価

前足を上げているところは好印象にゃ。でも敷いてある新聞のマスクマンみたいな画像が雰囲気を台無しにしているにゃ。ポイントはプラマイゼロにゃ。

オオブチ「なんと無慈悲な !」

プロンプトの white cat と on newspaper しか役にたっていないようですね。Licking back legs なんてシチュエーションは我々猫族でしかありえないような気がするので無視されても仕方ないですね。

このポーズの猫を再現できる猫召喚士がいたら、ぜひ Twitter で #AWSNyantech をつけて発表してほしいにゃ。

さて、現在の順位を見てみましょう。アキタ選手、オオブチ選手、イシバシ選手の順になっています。

暫定ランキング

  1. アキタ : 3 pt

  2. オオブチ : 1 pt

  3. イシバシ : 0 pt

では、続いてのお題はこちら !

お題 2 : 空からおやつが落ちてくるのを期待する猫たち

あら、かわいい猫たちですね。2 匹で何かを見上げている様子がポイントですね。では、各選手の演技を見てみましょう。まずは暫定トップのアキタ選手どうぞ !

Two Maine Coon cats sitting on a tiled floor, looking up at the camera.

アキタ選手の挑戦

アキタ「2 匹の猫がタイル床にいて上を見ているところをうまく再現できていると思います !」

two fluffy beige cats are looking up from the beige tiled floor
Two cats sitting on a tiled floor, looking up toward the camera.

アキタ選手の評価

アキタ選手は床とか環境部分の再現が得意な感じにゃ。

肝心の 2 匹の猫が同じ柄になってますが、これをどう見るかがポイントですね。

猫召喚士選手権を争っているからには、猫の柄の方が配点は高いのにゃ。アキタ選手には 1 ポイントあげるにゃ。

アキタ「意外と点数が伸びませんでしたね・・・。床の再現に夢中になるあまり、うっかり猫の召喚の時まで緊張感を保つことができなかったのが敗因かと・・・。」

アキタ選手はコメントがいちいちプロっぽくて良いですね。では、オオブチ選手どうぞ。

オオブチ選手の挑戦

オオブチ「茶色い猫とグレーっぽいねこが見上げている様子を再現できました !」

two fluffy beige cats are looking up from the beige tiled floor
A blurry image of two cats outdoors, one with orange fur and the other with black and white fur.

オオブチ選手の評価

おおっと、これは認められないにゃ。左側の茶色いクリーチャーが見た者の心を不安定にさせるので、みなさまにお見せできないにゃ。特別にノーペニャルティでリトライを許すにゃ。

コミッショナーが初めてコミッショナーらしい仕事をしましたね。

オオブチ選手の再挑戦

オオブチ「そうですか、自信作だったのに残念です。ではこちらで。茶色い猫と三毛っぽい猫がこちらを見上げているのがポイントです。」

Two cats, looking up, bird’s-eye view, brown cat and calico cat
Two cats outdoors near a bright green bowl. The background appears to be a gravel or textured surface.

オオブチ選手への再評価

2 匹の猫の柄の再現性が高くてよさそうな雰囲気はありますが、カメラはもっと離れて欲しかったですね。

おれのそっくりさんの顔がぶつ切りにゃ。コミッショナーへの挑発行為とみなして減点 5 にゃ。

オオブチ「えぇ !? なんかさっきから私に厳しくないですか ?」

気のせいにゃ。

コミッショナーの判定は絶対なので仕方ないですね。では最後にイシバシ選手どうぞ。

イシバシ「上級召喚技、Image2Image を使って、召喚する猫の精度を上げました。」

なんと、選ばれしものにしか使えないという上級召喚技の使い手が参加していたとは ! これは期待できますね。

イシバシ選手の挑戦

イシバシ「まず、呪文の詠唱に使った画像はこれです ! がんばって描きました !」

・・・続けるにゃ。

A digital illustration featuring two cats, one grey and one light orange, depicted on a brown background.

イシバシ選手の挑戦

イシバシ「そして、召喚した猫はこちらです !」

猫 2匹
Two cats, one white with dark markings and the other a tabby, sitting indoors on a wooden floor.

イシバシ選手の評価

あれっ・・・?

猫の数しかあってないにゃ。そもそもプロンプトが「猫 2 匹」って、画像の効果に期待しすぎにゃ。っていうかよくあの画像にそこまで期待できたにゃ。

イシバシ「違うんです ! いろいろな呪文を試しましたが、言葉を増やすほど不気味なものしか召喚できなかったんです !」

ここにもクリーチャー召喚士がいたにゃ。

コミッショナー、暴言はひかえて ! 

ところで手前の猫の目尻の模様かわいいですね。和テイストを感じます。

ミケが気に入ったようなので、おまけで 1 ポイントにゃ。

イシバシ「がんばったのに 1 ポイント !!」

それでは、最終的な順位を見てみましょう ! 

アキタ選手が 4 ポイントで優勝です ! ぱちぱち。

最終結果

  1. アキタ : 4 pt

  2. イシバシ : 1 pt

  3. オオブチ : - 4 pt

優勝したアキタ選手には、猫召喚士 1 級の称号を与えるにゃ。

副賞として、猫を見かけたら撫でてもいい権利を差し上げます。なお実際に撫でられるかどうかは猫の気分次第なので、猫の気持ちを確かめてから撫でるようにしてください。

アキタ「ありがとうございます、光栄です。」

第一回猫召喚士選手権はそろそろおしまいにゃ。

参加者ごとの工夫が光りましたね。私は猫の画像をたくさん見ることができて満足です。

ではまた、第二回猫召喚士選手権で会いましょ〜。

2. アキタの舞台裏 : なるべく簡単に Stable Diffusion 2 をデプロイして使う

それではここから、各参加者がどのように画像を生成したかの舞台裏をお見せしようと思います。アキタは Amazon SageMaker JumpStart という、さまざまなアルゴリズムと学習済みモデルを数クリックでデプロイできる機能を使いました。画像、テキスト、テーブルデータなどを扱うアルゴリズムに対応しており、学習済みモデルをそのままデプロイしたり、自分のデータを使ってモデルをファインチューニングすることもできます。

ここでは、SageMaker JumpStart で Stable Diffusion 2 の学習済みモデルを使って猫の画像を生成する手順を紹介します。Amazon SageMaker Studio のセットアップ は完了している想定です。

2-1. Amazon SageMaker Studio を起動

Amazon SageMaker のマネジメントコンソールから、Amazon SageMaker Studio を起動します。

Screenshot of the Amazon SageMaker Studio web interface, showing the first fully integrated development environment (IDE) for machine learning with a highlighted 'Open Studio' button and various navigation options.

2-2. Amazon SageMaker JumpStart で Stable Diffusion 2 を検索

Amazon SageMaker Studio が起動したら、画面左側のナビゲーションメニューで「Quick start solutions」→「Solutions, models, example notebooks」の順にクリックし、「SageMaker JumpStart – Quick Start Solutions」 を開きます。

その後、画面右上のテキストボックスで「stable diffusion 2」を検索します。

Screenshot of the SageMaker JumpStart Quick Start Solutions interface, highlighting the Stable Diffusion 2 model search and selection, as well as options for solutions, models, and example notebooks on the AWS SageMaker platform.

2-3. Stable Diffusion 2 の 学習済みモデルをデプロイ

Deploy」ボタンをクリックします。デプロイに数分程度かかります。

Screenshot of the SageMaker JumpStart interface showing the Stable Diffusion 2 model deployment page. The 'Deploy Model' section is highlighted with the 'Deploy' button marked in red. Tabs for Deploy, Train, Notebook, and Model details are visible, as well as options for Deployment Configuration and Security Settings.

2-4. Jupyter Notebookの作成

デプロイが完了したら、画面を少し下にスクロールし、「Open Notebook」をクリックしてノートブックを開きます。

Screenshot of the SageMaker JumpStart dashboard showing the endpoint status for the Stable Diffusion 2 txt2img model, including endpoint details, status, and option to open a demo notebook.

2-5. 画像の生成

ノートブックが開いたらセルを順番に実行します。プロンプトの文字列に応じて画像を生成することができます。

A screenshot showing a Python code example using Amazon SageMaker to generate images based on a text prompt ('a black cat'), along with an illustrated image of a black cat with yellow eyes, produced by the model. The notebook demonstrates prompt-based image generation with parameters shown in code.

2-6. <重要> エンドポイントの削除

エンドポイントの稼働中は課金が続くので、使い終わったら推論エンドポイントは必ず削除してください。

エンドポイントを起動した画面の「Delete Endpoint」をクリックするか (図参照)、SageMaker のコンソール画面の左側のメニューから「Inference」→「Endpoints」を選択し、不要なエンドポイントをラジオボタンで選択してから、右上にある「Actions」→「Delete」をクリックしてください。

Screenshot showing the interface for deleting an endpoint in Studio, highlighting the 'Delete' button to permanently remove a deployed endpoint.

3. オオブチの舞台裏 : 楽にデプロイしたいけどプロンプトは日本語がいい !

オオブチもアキタ同様に Amazon SageMaker JumpStart を使ったようです。アキタとの違いとしては、JumpStart でモデルのデプロイはサクッとやりたいけれど、プロンプトを英語で書くのが嫌だという心があることです。オオブチはどのように画像を生成したのでしょうか。

  1. Amazon SageMaker Studio を起動

  2. Amazon SageMaker JumpStart で Stable Diffusion 2 を検索

ここまではアキタの手順と同じです。次からの手順が異なります。

3-1. 右上にある「Open notebook」ボタンをクリック

Open notebook」をクリックすると、モデルをデプロして推論 (今回は画像生成) を実行するまでのソースコードが含まれたノートブックを開くことができます。GUI からデプロイする際は 4 種類のインスタンスタイプから選択できますが、ノートブックからデプロイする場合はソースコードを変更することで、任意のインスタンスタイプでエンドポイントを起動することができます。

Screenshot of the Amazon SageMaker interface for deploying the Stable Diffusion 2 model using JumpStart, showing options for S3 model artifact configuration and notebook management.

3-2. ノートブックに記述を追加

あくまでもプロンプトは日本語で作りたいオオブチは、AWS の AI サービス Amazon Translate の力を借りることにしました。日本語で作ったプロンプトを機械翻訳で英語にしてしまおうという魂胆です。

コードを貼り付け

ノートブックの、「4. Query endpoint and parse response」の 2 つ目のセル (画像生成を実行しているセル) の手前に一つセルを追加し、以下のコードを貼り付けます。jp_text の部分を書き換えてセルを実行することで、英語のプロンプトを生成します。

python
import boto3
jp_text = '二匹の猫,上を見上げる,俯瞰,茶色い猫と三毛猫'
translate = boto3.client(service_name='translate', region_name=aws_region, use_ssl=True)
result = translate.translate_text(Text=jp_text,
            SourceLanguageCode="ja", TargetLanguageCode="en")
text = result.get('TranslatedText')
print('TranslatedText: ' + result.get('TranslatedText'))

セルを上から順に実行

1. Set Up」からセルを実行していきます。

途中の「2. Select a model」では、[Optional] と書かれた部分以降のセルは実行せずにスキップし、次の「3. Retrieve Artifacts & Deploy an Endpoint」に進んでください。

4. Query endpoint and parse response」を最後まで実行すれば、画像が生成されているはずです。

5. Advanced features」の実行は不要です。プロンプトを書き換えて再度画像を生成したい場合は、上記手順 4 で追加したセルとその次のセルを再度実行すれば OK です。

3-3. <重要> エンドポイントの削除

エンドポイントの稼働中は課金が続くので、使い終わったら推論エンドポイントは必ず削除してください。

ノートブックの「6. Clean up the endpoint」のセルを実行するか、SageMaker のコンソール画面の左側のメニューから「Inference」→「Endpoints」を選択し、不要なエンドポイントをラジオボタンで選択してから、右上にある「Actions」→「Delete」をクリックしてください。

4. イシバシの舞台裏 : Amazon SageMaker Studio で Image2Image を使う

イシバシは、rinna 社が公開した日本語版 Stable Diffusion を使って、日本語のプロンプトを使いつつ画像も加えることで、より精度の良い猫召喚を試みました。実行環境として使用したのは Amazon SageMaker Studio のノートブックです。こちら から、イシバシが使用したサンプルノートブックをダウンロード可能です。

サンプルノートブックのダウンロード »

5. <重要> 後片付け

カーネルの停止

A white power button symbol icon displayed on a black background.

ノートブックを動かすインスタンスは、稼働している間課金が続きます。ノートブックの実行が終わって使わなくなったら、SageMaker Studio の上部にあるメニューから「Kernel」→「Shut Down Kernel」をクリックし、カーネルを停止してください。

SageMaker Studio の左側にあるアイコン列のこちらのアイコンをクリックすると、起動中のインスタンスを確認することができます。

不要なインスタンスがあれば、インスタンス名の右側にあるこちらのアイコンをクリックすると、インスタンスを停止することができます。

エンドポイントの削除

SageMaker のコンソール画面の左側のメニューから「Inference」→「Endpoints」を選択し、不要なエンドポイントをラジオボタンで選択してから、右上にある「Actions」→「Delete」をクリックしてください。

Amazon S3 バケットの削除

今回ご紹介した SageMaker JumpStart を使用して Stable Diffusion を実行すると、sagemaker-[リージョン名]-[アカウントID] という名前の S3 バケットが作成されます。保存されているデータが不要であれば、このバケットの中身を削除してください。

特に、Stable Diffusion のモデルファイルが s3://sagemaker-[リージョン名]-[アカウントID]/jumpstart-example-infer-model-txt2img-s-[timestamp]/model.tar.gz もしくは、s3://sagemaker-[リージョン名]-[アカウントID]/model-txt2img-stabilityai-stable-diffusion-v2-[timestamp]/model.tar.gz に保存されており、サイズが 4.5GB 程度あり大きいので気になる場合は削除してください。

6. さいごに

Stable Diffusion を使って猫の画像を生成して遊びました。猫のかわいさのみならず、Amazon SageMaker JumpStart を使うと、簡単に Stable Diffusion をデプロイして使えることもお伝えできたのではないかと思います。ほかにも、さまざまなアルゴリズムや学習済みモデルを使うことができるので、ぜひ試してみてください。

本記事が、みなさまの機械学習ライフの一助になれば幸いです。

注) 本記事に登場する人物は、実在の人物に似ているかもしれませんが架空の人物です。

筆者プロフィール

A woman with short dark hair is speaking while holding a microphone. She is wearing a light blue shirt and has orange glasses resting on her head.

大渕 麻莉

アマゾン ウェブ サービス ジャパン合同会社
機械学習ソリューションアーキテクト

組込みソフトウェア開発から画像処理アルゴリズム開発を経てクラウドに到達し、2019 年にアマゾン ウェブ サービス ジャパン合同会社に入社。主に製造業のお客様の機械学習導入・運用の技術サポートを担当。
脳内 CPU の半分が猫のことで占められており、視界に入るすべての生き物がうちの猫に見えるという日々を過ごしている。

Portrait of a man with short black hair, wearing glasses and a light gray zip-up jacket, against a dark background.

秋田 仁雅

アマゾンウェブサービスジャパン合同会社
プロトタイピングエンジニア

普段は AWS を用いてプロトタイプを開発することでお客様の課題を解決するプロトタイピングエンジニアという業務を担当。犬派のスパイ。世界唯一の猫召喚士一級ホルダー

A portrait of Ishibashi Naoki wearing a black shirt, set against a black background.

石橋 直樹

アマゾンウェブサービスジャパン合同会社
プロトタイピングエンジニア

モバイル通信事業、EC、河川など幅広い分野での機械学習開発に携わり、その中でクラウドの利便性を実感し、2022 年にアマゾン ウェブ サービス ジャパン合同会社に入社。様々なお客様の機械学習導入・MLOps 提案などを担当。
猫派でも犬派でもないペンギン派という新勢力。