colabで使うstablediffusionの小ネタ

2022/8/29 [15:43:21] (月) 天気

google colabでstablediffusionを試していて気になったところの小ネタ。

…というか python は初めて。


・画像サイズがデフォルトだと512x512のスクエア

 大昔ハッセルとかがスクエアフォーマットだった記憶もあり、これはこれで、好きなんだけど、たとえば、stablediffusionで電書の表紙なんかを作りたいとなった場合、スクエアだとよろしくない。縦長の画像が欲しい。


image = pipe(prompt, height=768, width=512)["sample"][0]

当てずっぽうでやってみたら、たまたま意図通りだった。イメージを作る呪文をパイプで渡すところに高さと横幅を指定してやればOK。ただ、512x1024でやってみたら OUT OF MEMORY でエラーになる。大きなサイズを扱いたければ有料のコースがあるよ、とお知らせ。無料で使わせてもらってるからしょうがない。


・画像ファイルを複数作りたい

 一発で期待通りの画像が取り出せることはなく、ひとつのプロンプトで何回も取り出して、その中から選択、となる。一回ずつコマンドを叩くのは効率が悪いので、一回叩いて2つ画像を取り出すようにした。


import time
for i in range(2):
  ut=int(time.time())
  fname = str(ut) + ’.png’
  image = pipe(prompt, height=768, width=512)["sample"][0]
  image.save(fname)

書き出すファイルは、ファイル名をタイムスタンプにして上書きしないように、ちょっと工夫。

range(2)、2回と言わずもっと回数を増やしてもいいんだけど、とりあえず様子見で。


縦長画像

beautiful concept art of KAWAII,
a girl walks on the street.she is seventeen,
steampunk city,AKIHABARA,
rim light,wide angle,sharp focus,
pixiv rankin,highly detailed,arknights,4K

KAWAIIやpixiv、arknightというキーワードはキャラがそれっぽくイマドキになる呪文。

image
image

ポートレイトの呪文も試してみた。

beautiful concept art of KAWAII,
portrait of a girl,full body,glossy eyes, blonde,
high contrast,rim light,sharp focus,
pixiv rankin,arknights,highly detailed,4K
image
image
image

blondeではなくblack hairも試したんだけど、噂通り、金髪の方が安定する。なんでや。


[2022/09/19 23:07:40] 追記。

今日時点、colabで使ってるコードをメモしておこう。

from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt
import time
import random
import torch
from google.colab import drive
drive.mount(’GoogleDriveのパス’)

最初の2行はお約束。

import time

→ファイル名にタイムスタンプを使うのに必要

import random

→ランダムseed生成に必要

import touch

→seedをpipeに渡すために必要

import drive

→生成した画像をgoogle driveに保存するために必要

google driveのパスは「/content/gdrive」とか適当に。


上記、いろいろ必要なものをインポートしたら以下のコードが使える。


pmt_fname = str(int(time.time()))
with open(’GoogleDriveのパス’ + pmt_fname + ’.txt’, ’w’) as f:
  f.write(prompt)
for i in range(4):
  seed=random.randrange(0,2147483647,1)
  #seed=1349413827
  gen=torch.Generator("cuda").manual_seed(seed)
  #ut=int(time.time())
  #fname = str(ut) + ’-’ + str(seed) + ’.png’
  fname = pmt_fname + ’-’ + str(seed) + ’.png’
  image = pipe(prompt, height=768, width=512, generator=gen,num_inference_steps=200)["sample"][0]
  image.save(’GoogleDriveのパス’ + fname)

とりあえず、ひとつのプロンプトでタテ768pxヨコ512pxの画像を4枚作る。

ステップ数はデフォルトは50。多くするとそれだけ時間がかかるけど、細部まで作り込まれるということで200にしてみた。


ファイルはgoogle driveに保存される。

タイムスタンプ.txtという名前でプロンプトのテキストファイルを保存

ex.)1663466109.txt

プロンプトのタイムスタンプ+ランダムseed.pngという画像ファイルを生成保存

ex.)

1663466109-1096018807.png

1663466109-1253973203.png


出来上がった絵をみて、惜しいなあ、ここもうちょっと色味が地味なのがよかった、とか思った時に元になったプロンプトが残るので修正変更試行錯誤も簡単になる。そして何より、


StableDiffusionは、同じプロンプト、同じseedを渡すと、同じ画像が生成される。


これがキモというミソだろう。

構図はいいのに、なんでこんな格好してるんだ、とか、ここは空に月が欲しかった、てな時はseedを同じにしてプロンプトを少しいじると同じような構図で違う絵が出てくる。欲しい絵に近づけることが可能になる、かな。


検索するとAIがらみ、技術的な話にたどり着いてしまうんだけど、わたしのような素人はこんぐらいの理解で蛮勇するのでちょうどいい。


以下3枚は同じseedで生成

image
High quality concept art,
landscape of steampunk city with a monk,
riverside street,river babbling,
sunlight pouring down,
forest of skyscrapers,
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4
image
High quality concept art,
landscape of cyberpunk city with a monk,
TOKYO AKIHABARA,
riverside street,river babbling,
sunlight pouring down,
forest of skyscrapers,
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4
image
High quality concept art,
landscape of deep forest with a monk,
riverside and golden pond,
river babbling,
sunlight pouring down,
sunlight filtering through trees
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4


1枚めを最初に生成。

2枚め。スチームパンクじゃなくてサイバーパンクの街に、TOKYO、AKIHABARAも追加。

3枚め。街ではなくて森の中にしようと思ってプロンプト文字列の変更が大きかったようで、Seedの魔力もあまり効かなかった。


もうひとつ。

ネットだと画像の解像度は72dpiでも足りるんだけど、紙印刷だとカラーは最低300dpi、モノクロは600dpi必要となる。google colabで使うStableDiffusionの解像度は72dpi。設定で可能になるかもしれないけど、わからないんで、あれこれ検索。

同じくAIの技術を使って画像をリファクタリングする?アップコンバージョンするReal-ESRGANというのがあった。


これのおかげで512x768 72dpi程度で出力される画像を高精細化して300dpi、紙印刷にも耐える画像として使えるようなった。


変換前

image

変換後

image

なんか違いのわかりにくいビミョーな例になってるけど、輪郭あたりをみてもらえると一目瞭然。StableDiffusionとReal-ESRGANの組み合わせでまた可能性が広がる。


StableDiffusionでステップ数をあえて低くして作った画像を、Real-ESRGANで高精細化して細部を作り込むというやり方もできる、かも。


Real-ESRGANの公式ページ

https://github.com/xinntao/Real-ESRGAN

これもオススメ、ていうか必需品。

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】