Amazon SageMaker Studioを使ってお猫様の画像を生成してみた

気づいたら最後に記事を投稿してから一年以上経過しており、一年あっという間だったなぁと思いつつ、そろそろ投稿しないとそのまま投稿しなくなってしまいそうなので一念発起して書いてみました。

## 今回の内容
タイトル通り、[こちら](https://aws.amazon.com/jp/builders-flash/202302/create-similar-cat-image/?sc_channel=sm&sc_campaign=WEB_Magagine&sc_publisher=TWITTER&sc_country=japan&sc_geo=JAPAN&sc_outcome=awareness&trkCampaign=builders_flash&trk=sm_builders_flash_create-similar-cat-image&linkId=202252309&awsf.filter-name=*all)の記事をもとにAmazon SageMaker StudioでStable Diffusion2を使ってお猫様の画像を生成してみました。

## 背景
私は絵心が無いので、絵を描ける方々に憧れを持っているのですが、昨年あたりからAIを使って画像生成したものがTwitterに上がっていたりしているのを度々見かけました。
驚くほど精巧な絵が多く、これで絵心が無い私でも描きたい絵が描けるなぁとうれしく思っていました。
早速やってみたい気持ちはあったのですが、環境を作るの大変そうだし画像生成するまでが面倒くさそうだなと調べる段階で止まってしまっていました。
そんなときにAWSのNyantech 画像生成選手権の記事を見つけ、比較的楽にできそうだったので実際にやってみました。

## 目的
SageMaker StudioでStable Diffusion2でお猫様の画像を生成すること

## SageMaker Studioとは
Amazon SageMaker の一機能です。
>Amazon SageMaker Studio は、データの準備から構築、トレーニング、デプロイまで、すべての機械学習 (ML) 開発ステップを実行するための専用ツールにアクセスできる単一のウェブベースの視覚的インターフェイスを提供する統合開発環境 (IDE) です。
データのアップロード、新規ノートブックの作成、モデルのトレーニングと調整、ステップ間の移動による実験の調整、組織内でのシームレスなコラボレーション、および SageMaker Studio を離れることなく本番環境にモデルをデプロイするといった処理を実行できます。

とのことで
詳しくは[こちら](https://aws.amazon.com/jp/sagemaker/studio/)の公式ドキュメントを見ていただけると良いと思います。

## 手順
Nyantechの[Stable Diffution2をデプロイして使う](https://aws.amazon.com/jp/builders-flash/202302/create-similar-cat-image/?sc_channel=sm&sc_campaign=WEB_Magagine&sc_publisher=TWITTER&sc_country=japan&sc_geo=JAPAN&sc_outcome=awareness&trkCampaign=builders_flash&trk=sm_builders_flash_create-similar-cat-image&linkId=202252309&awsf.filter-name=*all#02)のページだとSageMaker Studioのセットアップの手順は省かれているため、[こちら](https://catalog.us-east-1.prod.workshops.aws/workshops/63069e26-921c-4ce1-9cc7-dd882ff62575/ja-JP/prerequisites/option2)のサイトをもとにしました。
基本的にはサイトの1～12までの手順を参考にしているのですが、
コンソール画面が少し変わっていたため以下のような流れでセットアップからJupyter NoteBookの表示まで行っています。

1. AWS マネジメントコンソールから「SageMaker」を検索して開く
2. SageMakerのページの左側にあるメニューから「SageMaker Studio」をクリック
3. 「今すぐ始める」の箇所にある「SageMakerドメインの作成」タブをクリック
![スクリーンショット 2023-05-03 175451.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/f8bee430-5767-443d-918d-377487750e7a.png)

4. 参考サイトと同様の設定内容でドメインを作成する
5. 作成したドメインの詳細画面からドメインの設定タブを開き、Appsに表示されているStudioから「詳細はこちら」をクリック
![スクリーンショット 2023-05-03 154816.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/f1ef9409-4bf2-145a-8c4e-5a1e4a04d825.png)

6. 2の手順で表示したSageMaker Studioのページに遷移すると、今すぐ始めるの箇所にユーザープロファイルを選択と表示され、その下に「Studioを開く」と表示される
![スクリーンショット 2023-05-03 155030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/489c1287-2aca-008a-c674-49f8a4e3148c.png)

7. SageMaker Studioのページの読み込み画面が表示され、しばらく待つと「Home」と記載されたページが表示される
8. 「Home」のページに表示されている「Prebuilt and automated solutions」の「JumpStart」をクリックする
![スクリーンショット 2023-05-03 155324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/8b8757da-df48-dc88-51e9-2393356236dc.png)

9. SageMaker JumpStartが開くのでそこで「stable diffution2」を検索する
10. 検索結果に表示される「Stable Diffution 2」をクリックする
![スクリーンショット 2023-05-03 160211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/b60d5edd-5d42-d853-f338-343ecf593004.png)

11. Stable Diffution 2のMODELのページが開くのでその中の「Deploy Model」の「Deploy」をクリックする
![スクリーンショット 2023-05-03 160251.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/8c5e8eca-510f-b3f3-ce6c-0a882f292b4d.png)


12. デプロイが完了して「In Service」と表示されたらその下に表示されている「Use Endpoint from Studio」の「Open Notebook」をクリックしてノートブックを開く
13. すぐに実行できるノートブックが開くのでプロンプトの文字列や横幅、縦幅等を好きなように変えて画像を生成する

## 画像生成してみた！
早速画像を出力しました。
画像を生成する際に設定したプロンプトの文言と画像がセットで出力されています。
また、私は英語があまり得意ではないのでDeepLを使って日本語から英語で翻訳して使いました。

### Nyantechの画像生成選手権のお題
#### ①毛づくろいをしているときに不意に台所からカサカサ音が聞こえた白猫
![スクリーンショット 2023-05-03 163013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/18bf62e7-cbe5-4380-9e17-d7959d3c2a39.png)
かわいいけれど毛繕いしていませんね。

![スクリーンショット 2023-05-03 163211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/c9689df9-9018-28e0-a6f5-b4cb8f90d379.png)
この子も毛繕いしていないですが、物音がする方向を見ている様子です。


#### ②空からおやつが落ちてくるのを期待する猫たち
![スクリーンショット 2023-05-03 164032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/25cf8285-5621-44d0-3b87-43c17cd4e70e.png)
後ろのピントの合っていない猫はおやつ食べたそうな感じが出ていますね。


![スクリーンショット 2023-05-03 164545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/63af24c0-a8fd-5c09-ae42-cb6c26f6d043.png)
しっぽが取れてしまいました。これは失敗です。

## 出力してみた感想
同じ文言でも結構違う出力がされるので同じ文言で複数回出力したりしていたのですが、定期的にクリーチャーが出力されてしまいました。
また、猫二匹と指定しても二匹になっていなかったり、あまり詳細に文言を設定すると意図しない崩れた画像が出力される頻度が高くなったり、ほぼすべての文言無視されていたりしました。かといって少なすぎても思ったように出力されなかったりするので、単語や文章量を思考錯誤しながら出力していたのですがそこにやりこみ要素があって面白かったです。


## お片付け
1. エンドポイントの削除
2. カーネルの停止
3. 念のためドメイン削除
Nyantechの記事に記載されていたエンドポイントの削除とカーネルの停止を行いました。
その後、今回動かすために作成したドメインも使わないので削除しました。
一日経過しましたが、作業を行っていた時間以降は課金されていないので上記の対応だけで問題無さそうです。


## 余談
「大きい猫（A big cat）」で生成すると大型の猫（ノルウェージャンとかメインクーン）が生成されるかなと思って出力したところ、画像のような虎っぽい肉食獣が生成されました。
![スクリーンショット 2023-05-03 163304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/f5858f5d-cb70-c9d8-61e8-a7d8dc8bdbc1.png)

何回やっても似たような画像が生成されるので大きい猫＝虎っぽい肉食獣で確立されているのかもなと面白いなぁと思いました。

もっと色々な言い回しでお猫様の画像を生成したくなりました。

## Amazon SageMaker Studioを使った感想
無事Amazon SageMaker Studioを使って画像を生成することができて良かったです。
SageMakerを数回程度しか触ったことない私でも特に知識も必要無く動かせるほど楽でした。
ドメイン作成もそんなに時間かかりませんでしたし、その後StudioからJupyter Notebookを起動したらすぐに画像が生成できるので簡単です。
参考までに、一連の作業(SageMaker Studioのセットアップからお片付け&画像を十数枚程度出力)で一時間程度でした。
これを機にSageMaker Studioで他のモデルを使ってみたり、Stable Diffutio2についても興味が出たので調べてみたいです。


## 参考
https://aws.amazon.com/jp/sagemaker/studio/

https://aws.amazon.com/jp/builders-flash/202302/create-similar-cat-image/?sc_channel=sm&sc_campaign=WEB_Magagine&sc_publisher=TWITTER&sc_country=japan&sc_geo=JAPAN&sc_outcome=awareness&trkCampaign=builders_flash&trk=sm_builders_flash_create-similar-cat-image&linkId=202252309&awsf.filter-name=*all

https://aws.amazon.com/jp/builders-flash/202202/ml-first-step-sagemaker-studio/?awsf.filter-name=*all

https://catalog.us-east-1.prod.workshops.aws/workshops/63069e26-921c-4ce1-9cc7-dd882ff62575/ja-JP/prerequisites/option2