[FABRIC] AIでフィードバックを反映しながらテキストから画像を生成する [Stable Diffusion]

2023年8月15日火曜日

Artificial Intelligence

本記事では、FABRICと呼ばれる機械学習手法を用いて、テキストから画像を生成する際に、適宜フィードバックを反映し生成画像を制御する方法をご紹介します。

Eye catch
出典: FABRIC: Personalizing Diffusion Models with Iterative Feedback

FABLIC

概要

FABLICは、DiffusionベースText to Imageモデルにより生成された画像に対して、反復的に人間によるフィードバックをモデルに組み込むことにより、Diffusionモデルを条件付けし出力品質を向上させるText to Image技術です。

FABLICでは、生成プロセス中のself attention layerに、ユーザーのフィードバックを組み込みDiffusionプロセスを条件付けし、出力品質を改善させています。
このアーキテクチャにより、ユーザーの暗黙的な好みに最適化し、パーソナライズしたコンテンツの作成やカスタマイズなどの分野に応用できる可能性を秘めています。

Architecture
出典: FABRIC: Personalizing Diffusion Models with Iterative Feedback

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

本記事では上記手法を用いて、フィードバックを反映しながら画像を生成していきます。

デモ(Colaboratory)

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

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

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

環境セットアップ

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

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

初めにGithubからソースコードを取得します。

%cd /content

!git clone https://github.com/sd-fabric/fabric.git

%cd /content/fabric
# Commits on Jul 22, 2023
!git checkout 46787ad03716e310c7680174cdad9b0efbc393b5

次にライブラリをインストールします。

%cd /content/fabric

!pip install -r requirements.txt
!pip install -e .

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

%cd /content/fabric

import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import clear_output
import functools

import torch

from fabric.generator import AttentionBasedGenerator
from fabric.iterative import IterativeFeedbackGenerator

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

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

ここでは、Stable DiffusionベースのモデルをHuggingFaceからダウンロードし、メモリにロードしていきます。

model nameにはHuggingFaceのmodel nameを設定します。

model_name = "runwayml/stable-diffusion-v1-5"

# download and load model
base_generator = AttentionBasedGenerator(
  model_name=model_name,
  model_ckpt=None,
  torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
)

# placed on GPU
if torch.cuda.is_available():
  base_generator.to("cuda")

# initialize generator
generator = IterativeFeedbackGenerator(base_generator)

コンフィグ設定

ここでは、テキストから画像を生成する際のテキストプロンプトなどを設定します。

prompt = "japan beautiful scenarios" #@param {type: "string"}
negative_prompt = "lower, low" #@param {type: "string"}

#`denoising_steps`: Number of steps in the denoising schedule
#`guidance_scale`: Strength of the classifier-free guidance (same as for any diffusion model)
#`feedback_start`: From which point in the diffusion process feedback should be added (0.0 -> from the beginning, 0.5 -> from the halfway point)
#`feedback_end`: Until which point feedback should be added (0.5 -> until the halfway point, 1.0 -> until the end)

denoising_steps = 20
guidance_scale = 6.0
feedback_start = 0.0
feedback_end = 0.5
seed = 12

Text to Image

それでは、テキストプロンプトから画像を生成します。
画像表示用関数群など一部省略しています。詳細は上記リンクのGoogle Colabからご確認ください。

next_round_button = widgets.Button(description="Next Round", button_style="info")
next_round_button.on_click(next_round)
reset_button = widgets.Button(description="Reset Feedback", tooltip="Clear all feedback images")
reset_button.on_click(reset)
control_buttons = widgets.HBox([next_round_button, reset_button])

generator.reset()
next_round(None)

1st roundの生成結果は以下の通りです。

1st round result

1枚目と4枚目のlikeし、Next Roundを実行します。
2nd roundの生成結果は以下の通りです。

先ほどlikeした1枚目と4枚目にテイストが近い画像が4枚生成されています。
このようにフィードバックを反映しながら任意の出力品質に近づけていくことができます。

2nd round result

まとめ

本記事では、FABRICを用いて、フィードバックを反映しながら画像の出力品質を改善していく方法をご紹介しました。

フィードバックを反映することによりStable Diffusionモデルの出力品質を制御することが可能になります。

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


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

参考文献

1.  論文 - FABRIC: Personalizing Diffusion Models with Iterative Feedback

2. GitHub - sd-fabric/fabric

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology