[Stable Artist] AIでテキストから画像生成、画像編集

2022年12月18日日曜日

Artificial Intelligence

本記事では、Stable Artistと呼ばれる機械学習手法を用いて、テキストから画像を生成し、その後編集用テキストで画像に微調整を加える方法をご紹介します。

アイキャッチ
出典: The Stable Artist: Steering Semantics in Diffusion Latent Space

Stable Artist

概要

Stable Artistは、テキストから画像を生成するText to Imageタスクにおいて、画像生成プロセスのきめ細やかな制御を可能にする画像編集アプローチを手法です。

従来の画像生成手法では、大規模な拡散モデルの公開により忠実度の高い画像を生成することが可能となっています。しかし、ワンショットで高品質な想定の画像を得ることは困難でした。

ユーザーが想定する画像を生成する場合に、入力プロンプトにわずかな修正を加えながら複数回画像を生成しますが、入力プロンプトのわずかな修正によって、全く異なる画像が生成され柔軟性は十分ではありませんでした。

Stable Artistでは、きめ細やかな制御を可能にするため、Semantic Guidance(SEGA)を用いて、拡散プロセスを誘導します。これにより、画像の微妙な編集や構成やスタイルの変更などを実現しています。

以下の画像では"a castle next to a river"で生成した左の画像に、"bridge", "boat", "oil painting"を付加して右の画像を生成しています。

サンプル画像
出典: The Stable Artist: Steering Semantics in Diffusion Latent Space

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、テキストからの画像生成及び、生成画像の編集を行う方法をご紹介します。

デモ(Colaboratory)

それでは、実際に動かしながら画像生成、画像編集を行います。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

はじめににライブラリをインストールします。

%cd /content

!pip install git+https://github.com/ml-research/semantic-image-editing@79d32e1ae8672edca64dca3da0b03b141245bdba
!pip install ftfy

最後にライブラリをインポートします。

なおこの際、HuggingFaceからStable Diffusionの学習済みモデルをダウンロードするために、Hugging Faceのアクセストークンを設定する必要があります。
取得方法は以下の記事をご参照下さい。

アクセストークン設定後ライブラリをインポートします。

from semdiffusers import SemanticEditPipeline
import torch

device = 'cuda' if torch.cuda.is_available() else "cpu"
print("using device is", device)

access_tokens="ここにアクセストークンを設定"

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

続いて、Hugging Faceから学習済みモデルをダウンロードします。

model_id = 'runwayml/stable-diffusion-v1-5'

pipe = SemanticEditPipeline.from_pretrained(
    model_id, use_auth_token=access_tokens
).to(device)

gen = torch.Generator(device=device)

Text to Image

それではまず、画像編集を行う元となる画像をテキストから生成します。

以下ではプロンプトにphoto of cherry blossom tree along a river, cinematic, beautiful, high detail, instagram,を設定して桜の画像を生成しています。

prompt = "photo of cherry blossom tree along a river, cinematic, beautiful, high detail, instagram," #@param {type:"string"}

SEED = 12
gen.manual_seed(SEED)

# 画像生成
out = pipe(
    prompt = prompt, 
    generator = gen, 
    num_images_per_prompt = 1,
    guidance_scale = 7,
    width = 512,
    height = 512
    )

out.images[0]

出力結果は以下の通りです。

画像生成結果1

画像編集

続いて、先ほど生成した画像に少しだけ編集を加えていきます。
以下では、編集用プロンプトにswan on a riverを設定し、先ほど生成した画像の川に白鳥を描かせていきます。

editing_prompts = ['swan on a river']

gen.manual_seed(SEED)

out = pipe(
    prompt = prompt,
    generator = gen, 
    num_images_per_prompt = 1,
    guidance_scale = 7, 
    width = 512,
    height = 512,
    editing_prompt = editing_prompts,
    reverse_editing_direction=[False, False, False],   # Direction of guidance
    edit_warmup_steps=[20, 10, 11],                    # Warmup period for each concept
    edit_guidance_scale=[2000, 2000, 2000],            # Guidance scale for each concept
    edit_threshold=[-0.2, -0.1, -0.1],                 # Threshold for each concept. Note that positive guidance needs negative thresholds and vice versa
    edit_weights=[1.2,1,1],                            # Weights of the individual concepts against each other
    edit_momentum_scale=0.25,                          # Momentum scale that will be added to the latent guidance
    edit_mom_beta=0.6,                                 # Momentum beta
    )

out.images[0]

出力結果は以下の通りです。

画像編集結果

まとめ

本記事では、Stable Artinstを用いた画像生成・画像編集方法をご紹介しました。
細かな修正により、ユーザーが望む画像がますます便利に生成できるようになっていきそうです。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - The Stable Artist: Steering Semantics in Diffusion Latent Space

2. GitHub - ml-research/semantic-image-editing

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology