PR

【Stable Diffusion】Google Colabでimg2imgを使う方法を解説

【Stable Diffusion】Google Colabでimg2imgを使う
この記事は約8分で読めます。
らん
らん

Diffusersでimg2imgってできるかな?

るん
るん

StableDiffusionImg2ImgPipelineを使うことで簡単にできます♪

上の記事ではGoogle ColabでWebUIを使わずにStable Diffusionを使う方法を解説しました。
その中では、どのような絵を描きたいかを指示する「テキストから画像を生成」する「text to image(txt2img)」の使い方を紹介しましたが、それだけでなく「画像から画像を生成」する「image to image(img2img)」もGoogle Colabで行うことができます。

この「img2img」は、「画像+テキスト」で絵を生成することができるので、プロンプト(テキスト)だけで指示するよりも、思い描いたイメージに近づけやすいメリットがあります。

img2imgという機能を詳しく知りたい人は、下記の記事も合わせてご覧ください。

>> 【Stable Diffusion】img2imgで写真・ラフ画からイラストを生成するコツを解説

本記事では、WebUIを使わずにStable Diffusionを使うことができる「Diffusers」という仕組みの中でimg2imgを行う方法を解説します。

左のような「ラフ画」から、右のようなきれいな絵を生成できるようになります🎨

ラフ画からimg2imgで絵を生成
ラフ画からimg2imgでイラストを生成
この記事はこんな人におすすめ
  • Google Colabでimg2imgを使いたい
  • 「Diffusers」でimg2imgを行う方法を知りたい
  • 完全無料でStable Diffusionのimg2imgをやってみたい

Google Colabでimg2img

それでは最初から順を追って解説していきます。
なお本記事では、下記の記事で解説したプログラムを前提として説明していきます。

「Diffusersって何…?」という人は、まずこちらの記事を一読していただくことをおすすめします。

それではいってみましょう!

元画像の準備

img2imgは、ある画像を参考にして、その画像に近い絵を生成するという機能です。

ですので、まずは元になる画像を準備する必要があります。この元画像には、大きく分けると「写真」と「ラフ画」があります。
ここでは次のような「ラフ画」を下絵として準備しました。

img2imgの下絵とするラフ画
img2imgの下絵とするラフ画

画像のアップロード

準備した画像をGoogle Colabから読み込むために、Googleドライブにアップロードします。

img2imgの元画像をGoogle Driveにアップロード

プログラムを動かす

ここからはGoogle Colabでプログラムを書いていきます。

img2imgの実行

まず、必要なライブラリをインストールします。

!pip install --upgrade diffusers accelerate transformers

必要なライブラリをインポートして、Diffusersのパイプラインを作ります。

前回の「txt2img」との違いとして、次のポイントに着目です👀

  • 「Image」と「StableDiffusionImg2ImgPipeline」をインポート
  • StableDiffusionImg2ImgPipelineでパイプラインを作成

ここではモデルとして「MeinaMix V10」を使いますが、model_idを変更すれば好きなモデルで作れます。

るん
るん

モデル選びについては下記の記事も参考にしてみてくださいね

>> 【Stable Diffusion】Diffusersで使えるおすすめモデルを紹介!

from diffusers import StableDiffusionImg2ImgPipeline, DPMSolverMultistepScheduler
import torch
from PIL import Image

# 利用したいAIモデル
model_id = "Meina/MeinaMix_V10"

# パイプラインの作成
pipeline  = StableDiffusionImg2ImgPipeline.from_pretrained(model_id, torch_dtype=torch.float16, safety_checker=None)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)

# GPUを使うように変更
pipeline  = pipeline .to("cuda")

では、いよいよimg2imgを行っていきます。

まずは、Googleドライブにアップロードした元画像をGoogle Colabからアクセスできるか確認してみます。
画像のパスを調べましょう。

Googleドライブを「マウント」します。
Google Colabの左側メニューの「ファイル」をクリックします。

Google Colabの左側の「ファイル」メニュー

「ドライブをマウント」をクリックします。

Google Driveをマウント

Googleドライブへのアクセスを許可するか聞いてくるので、「Googleドライブに接続」をクリックします。

Googleドライブへのアクセスを許可

少し待つと、Googleドライブに接続され、左側メニューのファイルに「drive」というのが表示されます。これがGoogleドライブを表しています。

Googleドライブを認識

「drive」の左端の▶を押すと、下の階層を開けます。画像を保存したいフォルダを開きましょう。そのフォルダの右端の「3つの点」ボタンを押して、「パスをコピー」をクリックします。すると、そのフォルダのパスがクリップボードにコピーされます。

Googleドライブのファイルのパスを確認

画像のパスがわかったら、Google Colabで画像を読み込みます。

新しいセルに下記のコードを入力して実行しましょう。画像のパスを入力 の部分は、先ほど確認したパスに置き換えてください。

るん
るん

コードを実行して、画像が表示されればOK!

init_image = Image.open('/content/drive/MyDrive/StableDiffusion/img2img/i2i_original_sketch.jpg')

# 画像を表示
init_image

では、この元画像からimg2imgで画像を生成します。新しいセルを追加して、下記のコードを実行しましょう。

どのような画像を生成したいのかをプロンプトで指定するところはtxt2imgと同じです。
赤字のところがimg2imgで重要なパラメータです。

prompt = "girl, light smile, dark green hair,  green eyes, ponytail,  pointing, index finger raised, beige jacket, blue sky, tree, park "

image = pipeline (prompt=prompt, image=init_image, strength=0.6, num_inference_steps=30).images[0]

# 生成画像を表示
image

私の場合は、こんな画像が生成されました。

diffusersのimg2imgで生成した画像
pipelineでのパラメータ
  • image:元画像を指定
  • strength:元絵からどれだけ離れた絵を生成するかの度合い
らん
らん

strengthがイマイチわかんないんですけど…

るん
るん

strengthは出来栄えを左右する重要なパラメータです

strengthの調整

img2imgで一番重要なパラメータがstrengthです。これは、元絵からどれくらい離れた絵を生成するかの度合いだと考えてください。

0~1の間で指定することができ、値が小さいほど元絵に近く、値が大きいほど下絵から離れた絵になります。

strengthを小さな値からだんだん大きくしていったのが下の画像です。値が大きくなるにつれて絵がだんだん洗練されていきます。ただし、値を大きくしすぎると、元絵と関係ない絵になってしまいます。

img2imgのstrengthの大小による絵の違い

適切なstrengthの値は元絵やプロンプトなどにもよりますので、まず最初にちょうどいいstrengthの値を探ってみましょう。
それから、そのstrengthの値でいい絵が生成されるまで何度かimg2imgを繰り返す、という流れです。

画像の保存

画像の保存についてはtxt2imgと同じです。

import datetime

# 保存したいフォルダのパス
path = "ここに保存したいフォルダのパスを貼り付ける"

# 現在時刻を取得(日本時間)
time = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
time_str = time.strftime("%Y%m%d%H%M%S")

# 保存
image.save(f"{path}/{time_str}.png")

以上がGoogle Colabでimg2imgを行う流れです。

らん
らん

意外と簡単♪

まとめ

Google ColabでもDiffusersで「img2img」を簡単に使うことができます。
img2imgでのポイントは「モデル選び」と「strengthの値」です。

また、元絵となる「ラフ画」を描くにはペンタブレットがとても役立ちます。マウスでお絵描きするのは難しいですし、あまり楽しくはないですよね😓
いまは5000円くらいでも品質のいいペンタブレットが手に入ります。よろしければ下記の記事も参考にしてみてくださいね✨

るん
るん

ちなみに私のオススメの1台はこちら!

¥4,299 (2023/10/10 23:27時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
プロフィール
この記事を書いた人
千鳥 るん | Chidori Run

画像生成AIで思い通りのイラストを描くためのノウハウを試行錯誤で模索しています。IT企業でAI戦略に関わっていたこともあるAIエンジニアです。大学生の頃から趣味でイラストを描いていましたが、仕事が忙しくなり一旦筆を置きました。最近、NovelAIと出会ってまたお絵描きへの情熱を取り戻しています。

千鳥るんをフォローする
Stable Diffusion
スポンサーリンク
シェアする
千鳥るんをフォローする
るんるんスケッチ

コメント