画像生成AI「Stable Diffusion」がデモ用サイト、LINE、Google Colaboratoryで使えて、しかも無料なので感動したお話

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

**2022/8/22に、与えられた英文から画像を生成する「Stable Diffusion」なるものが
オープンソースとして公開されました。**

https://news.yahoo.co.jp/articles/f25aea634b4b1c57620f1be58023b6d6695e3dee

Stable Diffuisionをローカルに入れようとすると、
そこそこPCのスペックが必要なためどうしようか悩んだのですが、
LINEやクラウドを利用して、簡単に使うことができる様でした！
 
そこで**今回は様々な方法でStable Diffusionを動かす方法**についてまとめたいと思います♪
Stable Diffusionについて勉強中の方や画像生成AIに興味のある方の参考になれば幸いです。
(*^^)v

:::note info
例として、「カレーライス」をStable Diffusionに描いてもらうと以下の様になります。
毎回出力される結果が異なるので、世界に1枚だけの画像です。
（・・・AIが描いたのが分からないくらいリアルで、とてもとても感動しました♪）

|![000_カレーライス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/a36f2814-c673-0980-c360-42964708a388.png)|
|:--|

:::

# 2.用語の説明
## 2.1.Stable Diffusionとは

>Stable Diffusionは、2022年8月22日（現地時間）に英Stability AI社によって
>全世界に公開された高性能画像生成AIであり、
>任意のテキストを入力するだけで、その内容に沿ったオリジナル画像を
>自動で生成することができるという特徴を有しています。

https://prtimes.jp/main/html/rd/p/000000009.000043492.html

## 2.2.Google Colaboratoryとは

>Google Colaboratory（グーグル・コラボレイトリーもしくはコラボラトリー）とは、
>Googleが機械学習の教育及び研究用に提供しているインストール不要かつ、
>すぐにPythonや機械学習・深層学習の環境を整えることが出来る無料のサービスです。

https://aiacademy.jp/media/?p=1037

# 3.デモ用サイトを使う

まずは、デモ用サイトを使う方法です。

3.1.以下のサイトにアクセスします。

https://huggingface.co/spaces/stabilityai/stable-diffusion

3.2.描いて欲しい絵の内容を英語で入力し、「Generate image」を選択します。

:::note info
以下では例として、「ハンバーガー」の画像を出力しようとしています。
:::

|![110_デモサイト_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/81f72d4d-af0b-11c7-8194-4c9f7ac8a7a5.png)|
|:--|

3.3.<font color="Red">**約5分ほど待つと、Stable Diffusionが生成した4枚の画像が出力される**</font>ので、必要に応じて保存します。

|![120_デモサイト_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/f637725c-7c06-f78c-2900-e2dbb30fa6f7.png)|
|:--|

# 4.LINEを使う

続きまして、LINEを使う方法です。
「**お絵描きばりぐっどくん**」というアカウントが裏でStable Diffusionを使用して画像生成してくれます。

:::note info
前提条件は以下となります。

* LINEをインストールしていること。
:::

4.1.LINEのホームタブを選択し、友達追加のアイコンを選択します。

|![210_友達追加を選択.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/bd8e6b98-7e6c-59c5-37f2-789617dc8295.jpeg)|
|:--|

4.2.「QRコード」を選択します。

|![220_QRコードを選択.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/0bca1424-ef60-2a8d-0229-b13b11aa3fbe.jpeg)|
|:--|

4.3.以下のQRコードを読み込みます。

|![230_QRコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b77a4a4f-7291-82f3-40e5-bb0981855b4f.png)|
|:--|

4.4.「お絵描きばりぐっどくん」を友達追加します。

|![240_お絵描きばりぐっどくん.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c5e32b9b-a190-26f8-7f8e-e5f394c20257.jpeg)|
|:--|

4.5.トークにて、描いて欲しい絵の内容を入力すると、<font color="Red">**約1分後にStable Diffusionが生成した1枚の画像が出力される**</font>ので、必要に応じて保存します。

:::note info
以下の画像では例として「ピザ」の画像を出力しようとしています。
また、「お絵描きばりぐっどくん」は日本語でも返信してくれます。
:::

:::note warn
「お絵描きばりぐっどくん」の仕様上、1日2画像くらいしか出力できないようです。
:::

|![250_動作確認.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c3d9978e-0f16-c3ef-3ba0-70e21a45a1eb.jpeg)|
|:--|

# 5.Google Colaboratoryを使う

最後にGoogle Colaboratoryを使う方法を記載します。

:::note info
前提条件は以下となります。

* Googleのアカウントを作成していること
* Hugging Faceのアカウントを作成していること

:::

## 5.1.Hugging Faceでの作業
5.1.1.以下のサイトにアクセスし、Hugging Faceアカウントでサインインします。

https://huggingface.co/

5.1.2.画面右上のアイコンを選択し、「Settings」を選択します。

|![310_画面右上のアイコンを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/01b8bb11-a831-38ce-fca1-2cb119abeb5d.png)|
|:--|

5.1.3.「Access Tokens」を選択し、「New token」を選択します。

|![320_New_tokenを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c2377d55-6617-054a-0f61-5245d836812d.png)|
|:--|

5.1.4.Nameにアクセストークン名を入力し、Roleは「read」とし、「Generate a token」を選択します。

|![330_アクセストークンを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/0068a988-6b28-407e-2c14-af7f6c492eb0.png)|
|:--|

5.1.5.認証情報が表示されるので、コピーマークを選択し、メモ帳などにコピーします。

|![340_認証情報をコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/736b53ea-9176-1714-de78-65441278767e.png)|
|:--|

5.1.6.以下のサイトにアクセスします。

https://huggingface.co/CompVis/stable-diffusion-v1-4

5.1.7.チェックボックスにチェックをし、「Access repository」を選択します。

|![350_規約に同意.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/0aad7e65-7d6d-0d11-1d93-db86ff6b876d.png)|
|:--|

## 5.2.Google Colaboratoryでの作業

5.2.1.以下のサイトにアクセスし、Googleアカウントでサインインします。

https://colab.research.google.com/?hl=ja

5.2.2.「ノートブックを新規作成」を選択します。

|![350_ノートブックを新規作成を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/d0fdf91b-d4b7-555e-94f8-9d17446af7c8.png)|
|:--|

5.2.3.「編集」を選択し、「ノートブックの設定」を選択します。

|![420_ノートブックの設定を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/d3ac91d6-bac0-19c2-33cd-1be0c4da8c43.png)|
|:--|

5.2.4.ハードウェアアクセラレータは「GPU」を選択し、「保存」を選択します。

|![430_GPUを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/dfa2bcfc-591a-6da6-c11d-913c37964d1c.png)|
|:--|

5.2.5.以下のコマンドを入力し、再生ボタンを選択します。

```
pip install diffusers==0.8.0 transformers scipy ftfy
```
:::note info
2023/1/12時点では「0.8.0」で動作しましたが、別のモデルを使用したい場合は変更してください。
:::

|![440_コマンド入力_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b55350ab-13b1-d325-ccbb-6bd05f5f558f.png)|
|:--|

5.2.6.再生ボタンの左にチェックマークが表示されることを確認します。

|![450_チェックマークを確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/a4747ed2-2ca0-305e-cbb4-7eb695b62bd7.png)|
|:--|

5.2.7.画面左上の「コード」を選択します。

|![460_コードを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/9e23cc2a-49fe-6315-777c-b531264bc90f.png)|
|:--|

:::note info
以下の手順では省略していますが、
コマンド実行後は都度都度チェックマークを確認した後で、
「コード」を選択して次のコマンド欄を追加してください。
:::

5.2.8.以下のコマンドを入力し、再生ボタンを選択します。

```
TOKEN="★手順5.1.5でコピーしたTokenの情報★"
```

5.2.9.以下のコマンドを入力し、再生ボタンを選択します。

```
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=TOKEN)
```

5.2.10.以下のコマンドを入力し、再生ボタンを選択します。

```
pipe.to("cuda")
```

5.2.11.以下のコマンドを入力し、再生ボタンを選択します。

```
keyword = "★描いて欲しい絵の内容★"
image = pipe(keyword)["images"][0]
image.save(f"★ファイル名★.png")
```

:::note info
例：目玉焼きの絵を1枚出力するコマンド
```
keyword = "fried egg"
image = pipe(keyword)["images"][0]
image.save(f"目玉焼き.png")
```
:::

5.2.12.<font color="Red">**約1分後にStable Diffusionが画像を生成する**</font>ので、画面左のファイルマークを選択し、必要に応じて画像を保存します。

:::note alert
Google Colaboratoryの仕様で90分経過すると初期化され、
手順5.2.5のコマンドを打つところからやり直しになります。

コマンドは履歴が残っているため再度実行できますが、
Stable Diffusionが生成する画像は毎回異なるため、
保存を忘れると復元できなくなります。
:::

|![470_ファイルを確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b9657a49-14ab-4f36-db6e-c24e98e69f7a.png)|
|:--|

|![480_目玉焼き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/beaa1f24-2691-04ed-36c1-d2af7345a9c7.png)|
|:--|
（参考：生成された「目玉焼き.png」の内容）

5.2.13.複数の絵を出力したいときは以下のコマンドを使用します。

```
keyword = "★描いて欲しい絵の内容★"
num = ★出力したい枚数★
for i in range(num):
  image = pipe(keyword)["sample"][0]
  image.save("{}_{}.png".format(keyword,i+1))
```

:::note info
例：美しい湖の画像を3枚出力するコマンド

```
keyword = "beautiful lake"
num = 3
for i in range(num):
  image = pipe(keyword)["images"][0]
  image.save("{}_{}.png".format(keyword,i+1))
```

|![481_beautiful lake_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/067a0274-31c0-8357-f466-c83e51ae4d59.png)|
|:--|

|![482_beautiful lake_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/149b1b07-572d-1357-ffb0-bd9033382dfe.png)|
|:--|

|![483_beautiful lake_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/41acfc7c-d606-737a-08d4-9fd16b23894a.png)|
|:--|
（参考：実際に生成された3枚の画像）
:::

# 6.おわりに
ここまで読んで下さり、ありがとうございます！！！
(^^)

今回はStable Diffusionを使う方法を複数まとめてみました。

**描いて欲しい絵の内容を伝えるだけで、AIが無料で絵を描いてくれる**とは、
すごい時代になったなぁ・・・としみじみ感じたのと同時に、感動もしました！

また何か気になることがあれば記事にします♪
(:3_ヽ)_