【Stable Diffusion】MagicPromptによる呪文作成の効率化

【Stable Diffusion】MagicPromptによる呪文作成の効率化 ツール

「Stable Diffusionのプロンプト作成を効率化したい」
「 MagicPrompt Stable Diffusionをデモではなく、ローカル環境で動かしたい」

このような場合には、この記事の内容が参考になります。
この記事では、Stable Diffusionの呪文作成を効率化する方法を解説しています。

本記事の内容

  • MagicPrompt Stable Diffusionとは?
  • MagicPrompt Stable Diffusionのシステム要件
  • MagicPrompt Stable Diffusionのインストール
  • MagicPrompt Stable Diffusionの動作確認

それでは、上記に沿って解説していきます。

MagicPrompt Stable Diffusionとは?

MagicPrompt Stable Diffusion(以下MagicPromptと呼ぶ)とは、便利ツールです。
テキストを少し入力すると、それ以降のテキストを自動的に表示してくれます。

Googleのオートコンプリートと言えば、イメージしやすいでしょう。

オートコンプリートは、自動補完や入力補完とも呼ばれます。
Stable Diffusionのプロンプト生成において、MagicPromptは同じように機能します。

実際に次のページから、MagicPromptの動作を確認できます。

Stable Diffusion Prompt Generator
https://huggingface.co/spaces/Gustavosta/MagicPrompt-Stable-Diffusion

例えば、犬についての呪文を生成したいとします。
その場合、「dog」と入力して「送信」ボタンをクリック。
(※Stable Diffusionのプロンプトは英語入力がデフォルト)

そうすると、Stable Diffusionで使えるプロンプトが複数表示されます。
生成されるプロンプトは、毎回異なります。

MagicPromptは、GPT-2をベースにテキストを生成しています。
GPT-2については、次の記事で説明しています。

データセット(約8万件)は、以下のサイトから収集されているようです。

Lexica.art
https://lexica.art/

API(※)が用意されておらず、スクレイピングでデータを収集したようです。
MagicPromptの開発者はその点で苦労したと記載されています。

※2022年9月22日にAPIが公開されたようです。
https://lexica.art/docs

スクレイピングについては、次の記事で解説しています。

以上、MagicPrompt Stable Diffusionについて説明しました。
次は、MagicPrompt Stable Diffusionのシステム要件を説明します。

MagicPrompt Stable Diffusionのシステム要件

MagicPromptのシステム要件は、明記されていません。
そもそも、導入手順が公開されているわけでもありません。

MagicPromptのデモ画面のソースが、公開されているだけです。
https://huggingface.co/spaces/Gustavosta/MagicPrompt-Stable-Diffusion/tree/main

これを読み解いて、システム要件を導きだしています。
OSは、Pythonが動けばどこでもよいでしょう。

また、PythonのバージョンはPyton 3.7以降としておきます。
以下のPython公式開発サイクルを意識する必要がありますので。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

あと、PyTorchのインストールが前提となります。
これが唯一のシステム要件と言っても良いかもしれません。

PyTorchのバージョンは、最新版(安定版)を推奨しておきます。
PyTorchのインストールについては、次の記事で説明しています。

GPUが利用可能であれば、GPU版PyTorchのインストールをオススメします。

以上、MagicPrompt Stable Diffusionのシステム要件を説明しました。
次は、MagicPrompt Stable Diffusionのインストールを説明します。

MagicPrompt Stable Diffusionのインストール

MagicPromptのインストールを行います。
PyTorchがインストール済みであることを前提とします。

その前提で以下を進めていきます。

  • パッケージのインストール
  • 必要ファイルのダウンロード

パッケージのインストール

インストールするパッケージは、以下。

  • gradio
  • transformers 
  • transformers[sentencepiece]

gradioについては、デモ画面を動かすために必要です。
画面が不要である場合は、gradioをインストールする必要はありません。

でも、動作確認時に便利なのでインストールしておきましょう。
インストールには、次のコマンドを実行します。

pip install gradio 
pip install transformers   
pip install transformers[sentencepiece]

必要ファイルのダウンロード

プロンプトの自動生成には、次のファイルを利用しています。

ideas.txt(約12万行のデータが登録されています)

このファイルは、次のURLからダウンロードできます。
https://huggingface.co/spaces/Gustavosta/MagicPrompt-Stable-Diffusion/raw/main/ideas.txt

プログラムから読み込みができる場所に、ダウンロードしたファイルを保存しておきます。

以上、MagicPrompt Stable Diffusionのインストールを説明しました。
次は、MagicPrompt Stable Diffusionの動作確認を説明します。

MagicPrompt Stable Diffusionの動作確認

MagicPromptの動作確認を行います。
動作確認には、次のコードを利用します。

app.py

import gradio as grad 
import random 
import re 
from transformers import pipeline, set_seed 

gpt2_pipe = pipeline('text-generation', model='Gustavosta/MagicPrompt-Stable-Diffusion', tokenizer='gpt2') 
with open("ideas.txt", "r") as f: 
    line = f.readlines() 

def generate(starting_text): 
    for count in range(4): 
        seed = random.randint(100, 1000000) 
        set_seed(seed) 
        if starting_text == "": 
            starting_text: str = line[random.randrange(0, len(line))].replace("\n", "").lower().capitalize() 
            starting_text: str = re.sub(r"[,:\-–.!;?_]", '', starting_text) 
            print(starting_text) 
        response = gpt2_pipe(starting_text, max_length=random.randint(60, 90), num_return_sequences=4) 
        response_list = [] 
        for x in response: 
            resp = x['generated_text'].strip() 
            if resp != starting_text and len(resp) > (len(starting_text) + 4) and resp.endswith( 
                    (":", "-", "—")) is False: 
                response_list.append(resp + '\n') 
        response_end = "\n".join(response_list) 
        response_end = re.sub('[^ ]+\.[^ ]+', '', response_end) 
        response_end = response_end.replace("<", "").replace(">", "") 
        if response_end != "": 
            return response_end 
        if count == 4: 
            return response_end 

txt = grad.Textbox(lines=1, label="Initial Text", placeholder="English Text here") 
out = grad.Textbox(lines=4, label="Generated Prompts") 

examples = [] 
for x in range(8): 
    examples.append(line[random.randrange(0, len(line))].replace("\n", "").lower().capitalize()) 

title = "Stable Diffusion Prompt Generator" 
description = 'This is a demo of the model series: "MagicPrompt", in this case, aimed at: Stable Diffusion. To use it, simply submit your text or click on one of the examples.<b><br><br>To learn more about the model, go to the link: https://huggingface.co/Gustavosta/MagicPrompt-Stable-Diffusion<br>' 
article = "<div><center><img src='https://visitor-badge.glitch.me/badge?page_id=magicprompt_Stable Diffusion' alt='visitor badge'></center></div>" 

grad.Interface(fn=generate, 
               inputs=txt, 
               outputs=out, 
               examples=examples, 
               title=title, 
               description=description, 
               article=article, 
               allow_flagging='never', 
               cache_examples=False, 
               theme="default").launch(enable_queue=True, debug=True)

app.pyは、デモ画面のソースとして公開されているモノです。
「ideas.txt」のパスには、注意してください。

上記コードを実行すると、コンソールに以下が表示されます。

Running on local URL:  http://127.0.0.1:7860 
To create a public link, set `share=True` in `launch()`.

Chromeなどのブラウザで「http://127.0.0.1:7860」にアクセスします。
そうすると、デモ画面が確認できます。

見た目は、全く同じですね。
「dog」と入力して「送信」ボタンをクリックしたら、次のように表示されました。

ローカル環境にて、MagicPrompt Stable Diffusionを動かすことができました。

以上、MagicPrompt Stable Diffusionの動作確認を説明しました。

タイトルとURLをコピーしました