本記事では、機械学習手法Stable Diffusionを用いてテキストから画像を生成(text2img)する方法をご紹介します。
Stable Diffusion
概要
Stable Diffusionは、拡散モデルによる画像合成モデルです。
自然言語で入力されたテキスト(prompt)から画像を生成するText to Imageタスクなどを実現します。
Latent Diffusionをベースとした本モデルは、非常に大規模なデータセットであるLAION-5Bを用いてトレーニングされています。
GoogleのImagenやOpenAIのGLIDE,
DALLE-2など最新の画像生成モデルは社会に与える影響が大きいことなどを理由に学習済みモデルの公開を控えるケースが目立っていましたが、
Stable
Diffusionでは、AIの平等な使用機会を与えることを目的に学習済みモデルの公開に踏み切っています。
なお、以下の記事では有償にはなりますが、Lattent
DiffusionやGLIDEの技術解説やデモを紹介しています。よろしければご参照ください。
技術解説までは、無料で参照可能です。
Latent Diffusion Modelsを用いてテキストから画像を生成するレシピ
GLIDEで様々な条件を指定したテキストから画像を生成するレシピ
本記事では上記手法を用いて、Text to ImageタスクをGoogle Colaboratoryで実行していきます。
なお、画像とテキストから新たな画像を生成するImage to Imageタスク、特定の範囲の画像を修復するInpaintingタスクは以下をご参照ください。
[Stable Diffusion] AIでテキストと画像から新たな画像を生成する [img2img]
本記事では、機械学習手法Stable Diffusionを用いてテキストと画像から新たな画像を生成するimg2imgを実行する方法をご紹介しています。
[Stable Diffusion] AIでテキストに応じた画像修復 [inpainting]
本記事では、機械学習手法Stable Diffusionを用いて画像の特定の範囲をテキストに応じた画像に変更する画像修復を実行する方法をご紹介しています。
デモ(Colaboratory)
それでは、実際に動かしながらText to Imageタスクを実行していきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo
また、下記から直接Google Colaboratoryで開くこともできます。
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
環境セットアップ
初めにHuggingFaceのアカウントを作成します。
HuggingFaceにアクセスし画面右上のSignUpよりアカウントを作成します。
登録したメールアドレスに認証メールが届くのでメールに記載されたリンクにアクセスしてアカウント登録は完了です。
続いて、こちらのCompVis/stable-diffusion-v1-4にアクセスし記載の内容を確認の上承認します。
承認後、画面右上のアカウントのアイコンから[Settings]->[Access Tokens]に移動しNewTokenを発行し、メモしておきます。
以降の作業はGoogle Colaboratoryで行います。
それではGoogle Colaboratoryでセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。
まずライブラリをインストールします。
最後にライブラリをインポートします。
以上で環境セットアップは完了です。
学習済みモデルのセットアップ
続いて、先ほど発行したアクセストークンを使用して、モデルをダウンロードします。
TextToImage
それでは、promptを設定し画像を生成していきます。
出力結果は以下の通りです。
葛飾北斎風の3頭の犬を生成してもらいましたが、promptに忠実な画像が生成されています。
いくつか画像を生成させてみた結果は以下の通りです。
「サングラスをかけたハムスターの写真」
「葛飾北斎風のバイクに乗るダースベイダー」
写真、油絵など様々なタイプの画像が生成できました。
まとめ
本記事では、Stable Diffusionを用いてText to
Imageを行う方法をご紹介しました。
かなり高精度なモデルのため悪用厳禁であることは言うまでもありません。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1. 論文 - High-Resolution Image Synthesis with Latent Diffusion Models
記事非常に助かっております。
返信削除記事の通りに試しているのですがこのようなエラーが出ております。
何か解決策はございますでしょうか。
KeyError Traceback (most recent call last)
in ()
6 for i in range(num):
7 # モデルにpromptを入力し画像生成
----> 8 image = model(prompt)["sample"][0]
9 # 保存
10 image.save(f"outputs/test_{i:04}.png")
/usr/local/lib/python3.10/dist-packages/diffusers/utils/outputs.py in __getitem__(self, k)
86 if isinstance(k, str):
87 inner_dict = {k: v for (k, v) in self.items()}
---> 88 return inner_dict[k]
89 else:
90 return self.to_tuple()[k]
KeyError: 'sample'
ご覧いただきありがとうございます。
返信削除transformersライブラリのアップデートに伴いモデルの出力形式が変更されたことによりエラーが発生しておりました。
ブログ中のソースコード、Google Colaboratory共にソースコードを修正しました。