乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

GoogleColaboratory

今回はGoogle Colabで
stable diffusionを便利に使うテクニック
についてです。

解説動画はこちら



前回は
Google Colabでstable diffusionを使う方法を
紹介しました。
stable diffusionをGoogleColabで使ってみる


今回は
もう少し使い勝手を良くするための
テクニックを紹介していきます。


まず最初は
モデルのロードの高速化です

GoogleColabで
stable-diffusionを使うには
最初にセットアップとして
色々読み込みをしないといけません。


初回のセットアップ部分のコード
(要アクセストークン)
#@title 事前セットアップ
 
# 必要なライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy
 
# アクセス・トークンを設定
token = ""#@param {type:"string"}

# パイプラインを構築
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=token)
pipe.to("cuda")

初回はモデルのダウンロードなどが行われるため
この読み込みがかなり時間が掛かります。

この部分を高速化するために
モデルをpickleで保存してみましょう。



Googleドライブのマウント

モデルを保存するには
Googleドライブのマウントをしておく
必要があります

フォルダマークから「ドライブのマウント」
をクリックしてマウントしておきましょう。


モデルの保存

import pickle
import shutil
import os

model_name = 'sd_model.pkl'
with open(model_name , mode='wb') as f:
    pickle.dump(pipe, f)

save_dir = 'drive/MyDrive/stable-diffusion-v1-4/'
os.makedirs(save_dir, exist_ok=True)
save_path = save_dir + model_name
shutil.copyfile(model_name, save_path)

これでGoogleドライブに保存されます。

次回以降はこのドライブに保存された
モデルをロードすることで高速化できます。



モデルのロード
# 必要なライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy

# パイプラインを構築
from diffusers import StableDiffusionPipeline

model_name = 'sd_model.pkl'
save_dir = 'drive/MyDrive/stable-diffusion-v1-4/'
save_path = save_dir + model_name
with open(save_path, mode='rb') as f:
    pipe = pickle.load(f)
2回目以降はこのコードで
Googleドライブからモデルを
読み込み出来ると思います。

stable-diffusionを使えるようになるまでが
少し高速化されます。



画像作成(1枚)
#@title 画像を生成する
 
# 画像生成
prompt = "" #@param {type:"string"}
img = pipe(prompt)["sample"][0]

# 画像の保存
img_name = prompt.replace(' ','_')
img_path = img_name + '.png'
img.save(img_path)

# 画像の表示
from IPython.display import Image,display
display(Image(img_path))

テキストを入力すると
1枚だけ画像が生成されます。

同じテキストの画像は1回ごとに
上書きされて消えてしまうので
何枚も作成する場合は
少し使い勝手が悪いです。



画像作成(フォルダ内に複数枚数)
#@title 画像を生成する
import os

# 画像生成
prompt = "" #@param {type:"string"}
times = 3 #@param {type:"integer"}
save_dir = 'drive/MyDrive/stable-diffusion-v1-4/sd_img/'

for i in range(times):
  img = pipe(prompt)["sample"][0]

  # 画像の保存
  txts = prompt.split(' ')
  img_name = prompt.replace(' ','_')
  if len(txts)>=4:
    dir_path = '_'.join(txts[0:2]) + '_-_' +  '_'.join(txts[-2:])
  else:
    dir_path = prompt.replace(' ','_')

  # 保存ディレクトリの作成
  img_save_dir = save_dir + dir_path
  os.makedirs(img_save_dir, exist_ok=True)
  
  img_path = img_save_dir + '/' + img_name + '_{0:02}.png'.format(i)
  img.save(img_path)

ということで
複数枚を一気に作成するようにしてみましょう。

こちらのコードでGoogleドライブ内に
画像が保存されるようになります。

timesの部分で回数指定ができるので
変えることで複数枚を一気に作成できます。

作成した画像を全部見るのは次のコードです。

# 画像の表示(保存ディレクトリ内の画像全部)
from IPython.display import Image,display
import glob
for path in glob.glob(img_save_dir + "/*.png"):
  print(path.split('/')[-1])
  display(Image(path,retina=True))

これでまとめてフォルダ内の画像を表示できます。


画風に加える文字列(プロンプト)の生成補助

stable-diffusionでは様々な画風を
指定することができますが
指定するには、コマンドが必要です。

コマンドを覚えるのは大変なので
指定するプロンプトに
画風を加える補助をしてくれる
サイトがあります。

promptoMANIA

こちらでプロンプトを英文で打ち込みます。
スクリーンショット 2022-09-10 17.38.12

次に下の方にスクロールすると
画風を選ぶことができます。
スクリーンショット 2022-09-10 17.38.40


画風のサンプルが画像で表示されるので
これを参考にしながら作成したい画風をクリックします。

サイトの上部にプロンプトが作成されるので
コピーできるようになります。

スクリーンショット 2022-09-10 17.38.47

これをstable-diffusionに貼り付ければ
その画風で作成することができます。



作成した画像のダウンロード
# ダウンロードしたいフォルダを zip 圧縮する
!zip -r /content/download.zip drive/MyDrive/stable-diffusion-v1-4/sd_img/

# 圧縮した zip ファイルをダウンロードする
from google.colab import files
files.download("/content/download.zip")

こちらのコードで画像をまとめてダウンロードできます。
Googleドライブに保存されてはいるので
そちらからもまとめてダウンロードは出来るので
あまり使う機会は少ないかもしれませんが
Google Colab上から画像のダウンロードをするのは
このコードを使えば出来ます。


今回は少しだけstable-diffusionを使うのが
便利になるテクニックを紹介しました。

他にも紹介しきれないほどの
機能を有しているので
また機会があれば
色々紹介していきたいと思います。

それでは。

各所からの意見をいただいたので
GoogleColaboratoryの使い方講座を
作ってみました。


解説動画はこちら




Google Colabの利用ガイド動画案内

# 01.ノートブックの新規作成
画面上の「ファイル」から
「ノートブックを新規作成」を選択

# 02.ファイル名のリネーム
画面上部のファイル名部分をクリックして変更か
「ファイル」からノートブック名を変更

# 03.ノートブックの保存
Windows : 「Ctrl」+「Sキー」
Mac : 「Command」+「Sキー」

# 04.ノートブックのコピーを作成
画面上部の「ファイル」から
「ドライブにコピーを保存」を選択

# 05.ノートブックのダウンロード
画面上部の「ファイル」から
「.ipynbをダウンロード」を選択

# 06.コードセルの作成
画面上部の「+コード」をクリックするか
セルの下部付近から「+コード」をクリック

# 07.テキストセルの作成
画面上部の「+テキスト」をクリックするか
セルの下部付近から「+テキスト」をクリック

# 08.セルの選択
画面上のセルをクリックするか、上下キーで選択する

# 09.セルの入力
画面上のセルを選択してコードを入力する

# 10.セルの実行
セルを選択して
「シフトボタン」を押しながら「エンターキー」

# 11.セルの削除
セルを選択してから
右クリックして「セルの削除」を選択

# 12.セルの移動
セルを選択してから
セル上部の「矢印マーク」をクリック

# 13.結果の削除
画面上部の「編集」から
「出力をすべて消去」を選択

# 14.ファイルの確認
画面左側にある「フォルダマーク」を
クリックするとフォルダを確認できる

# 15.フォルダの作成
画面左側にある「フォルダマーク」を
クリック後、右クリックから
「新しいフォルダ」を選択

# 16.ファイルのアップロード
画面左側にある「フォルダマーク」を
クリック後

右クリックから「アップロード」を選択

デフォルトのフォルダの位置は/content


# ファイルのアップロードを行うスクリプト
from google.colab import files

files = files.upload()

for file in files.keys():
  print('{0} をアップロードしました。'.format(file))


# 17.Googleドライブのマウント
画面左側にある
「フォルダマーク」をクリックして

「ドライブをマウント」を選択


# Google Driveを使うためのスクリプト
from google.colab import drive
drive.mount('/content/drive')
実行後 認証を行ってコードをコピーして貼り付ける

# 18.コマンドの実行
! もしくは % を最初につけて
Linuxコマンドを実行できる

!コマンド名
%コマンド名


# ディレクトリの確認コマンド
# !ls -ls /content/ディレクトリ名
!ls -ls /content/drive/My\ Drive/
空白が入る場合は \ をつける


# 19.githubからプロジェクトをクローン
コマンドなどでディレクトリを作成
作成したディレクトリに移動して
「git clone」コマンドを実行する


# ディレクトリの作成
# !mkdir /content/ディレクトリ名
!mkdir /content/git/


# クローン実行
# %cd /content/ディレクトリ名
# !git clone リポジトリのURL
%cd /content/git/
!git clone https://github.com/otupy/michelin.git

「cd」コマンドを実行する場合は % をつける


これから利用を考えている方は
参考にしてみてください。

それでは
 

このページのトップヘ