2022年10月20日木曜日

GoogleColaborateでStableDiffusionを使ってみた話

ちょっとトレンドから遅れつつですが、StableDiffusionを触ってみました。
最近は時間の合間にちょいちょい出力して、
よさげなものをTwitterにアップしたりしています。


実際に手を動かして絵を描くのではなく
prompt(文言)を入力してAIに画像を描いてもらうのですが…
「マジでこんな画像ができるのか~ッ」って感じになります。


というわけで、絶賛エンジョイ中です。
そんなこんなしているうちに
promptから動画とか3Dとか出力するAIも出始めてますが…
技術の進歩が速すぎて追いつけない><


少し遅れたけど、一応記事にしておこうと思います。





ことの始まり

StableDiffusionは以前少し触ったDreamJourneyと同じ
AIによる画像生成ですね。
DreamJourneyはDiscordによるWebサービスでしたが、
StableDiffusionはオープンソースで公開されています。
こんなの公開しちゃって大丈夫なの…?

んで、手順を踏めば、個人のPCでもStableDiffusionの環境を設定して
そこで各自画像を生成、とできるのですが、
やはりそこはAIの画像生成ということで、GPUのメモリが相応にある環境が求められます。
(10G以上?あると可能らしい)

あいにく、自分の環境は2Gもないプアプアな環境だったので、
いろいろ試してみたんですが、出来ませんでした。


(後で調べたところ、CPU駆動にすることもできるみたいですね、
 画像生成にかなり時間がかかるみたいですが。
 GPUの無いPCでStableDiffusionのインストールと実行時間の比較
 (AMDでもOpenvinoは動作しました)
 https://uura.site/stablediffusion-install-2/
 )

んで、他の人の発信を見たところ、GoogleColaborate内で
StableDiffusionを使えるとのことで、その内容を今回書こうと思います。
他の人の発信の、再発信みたいになってしまいますが、
GoogleColaborateを使った自身の記録にはなると思いますので…。


Huggingfaceでアクセストークンを作成する

Huggingfaceでアカウントを作成します。
https://huggingface.co/

アカウントを作成したら、
SettingsからRead属性のアクセストークンを作成しておきます。
このトークンはGoogleColaborateで学習用データを取得する際に使用します。

GoogleColaborate:設定でGPUを有効にする

ここからGoogleColaborate
とりあえず新規にノートブックを作成したら、
「編集>ノートブックの設定」から、
「ハードウェアアクセラレータ」を「GPU」にします。
初期設定では「None」になってるはず。


設定できているか、下記のコードを実行します。

!nvidia-smi

下記のような感じで出力されていれば、GPUに設定されています。


どのグラフィックボードが割り当てられるかは、使用状況によるらしく、
Pro(課金)で使用しているといいGPUが割り当てられやすくなるというのはよく聞きますね。


GoogleColaborate:Googleドライブと連携しておく

これは必須ではないですが、そのままですと
生成された画像はノートブック内のストレージに格納されたりして
再起動時にクリアされてしまうので、連携したGoogleドライブに
生成した画像を保存するようにするための方法ですね。

下記のコードを実行します。

from google.colab import drive
drive.mount('./gdrive')

実行するとGoogleドライブの認証許可とかが出てくるので「許可」すると
ノートブックでGoogleドライブにアクセスできるようになります。
(gdriveがそうです)



「/content/gdrive/MyDrive/~」という感じのパスで生成した画像を保存すれば
Googleドライブ内に保存できます。


GoogleColaborate:準備と学習データのダウンロード

あとは、コードを書いて実行していく感じですね。
必要なもののインストールや学習データのダウンロードといった部分です。
参考するところによって記述が若干違うけど、自分の場合は下記のような感じ。


    !pip install diffusers==0.3.0 transformers scipy ftfy
    !pip install "ipywidgets>=7,<8"
    
    from google.colab import output
    output.enable_custom_widget_manager()
    
    import torch
    from diffusers import StableDiffusionPipeline
    
    YOUR_TOKEN="xxxxxxxxxxxx" # huggingfaceで作成したアクセストークン
    
    pipe_txt2img = StableDiffusionPipeline.from_pretrained(
        "CompVis/stable-diffusion-v1-4",
        revision="fp16",
        torch_dtype=torch.float16, 
        use_auth_token=YOUR_TOKEN
        ).to("cuda")
    

YOUR_TOKENの部分には、一番初めの手順で作成した
Huggingfaceのアクセストークンの文字列を記載します。
上手くいけば実行できるはず。
なんかすごい量のデータをダウンロードしてきます。
これは学習データみたいですね。

これでようやく、AIの画像生成ができるようになりました。


GoogleColaborate:promptを与えて画像を生成してみる!

StableDiffusionで画像を生成してみます!
promptという所に「こんな感じの画像を生成してくださいね~」という感じの
文言を設定して、生成してもらいます。

    from torch import autocast
    prompt ="a illustlation of an astronaut riding a horse, style Dalí"
    
    with autocast("cuda"):
      image = pipe_txt2img(prompt)["sample"][0]
    
    image

実行すると、生成する処理が走って、最後に画像が表示されます。
この文言はAI画像生成のHelloWorldみたいなものみたいなのですが、
「a illustlation of an astronaut riding a horse」なので、
「馬に乗った宇宙飛行士の絵」を、
「style Dali」(ダリの絵調)で生成してもらうpromptになっています。

自分の場合はこんな感じ。


う~ん、今回は近いような、遠いような。
そもそも、ダリの絵をあまりよく知らない(笑)
まあ、とりあえず生成できましたね!

この後、下記のような感じにすると、
Googleドライブとの連携ができていれば、ドライブ上に画像を保存できます。


   image.save("/content/gdrive/MyDrive/image.png")


GoogleColaborate:使用制限がかかったら待つ


最後に~ですね。 ある程度画像の出力を繰り返していたりするとGPU使用上限にかかって、 しばらく使えない状態になっちゃいます。

こんなん。


ある程度時間が経過すると制限解除されて、また使えるようになります。 正確な時間は分からないのですが、12~24時間くらいですかね? おそらくこれも、全体の使用状況によるのだと思います。

大量に画像を生成したいときはColabProで課金を検討しましょう。 完全に無制限になるわけではないようなんですが、 良い性能のGPUが割り当てられるようになるらしいことと、 使用量自体の引き上げにより快適にはなると思います。

まあ、10枚そこそこでは使用量上限にかかったりはしないと思うので、 ちょっと試すくらいだったら大丈夫じゃないかな~(適当)

おわりに

twitterなどで見ると、StableDiffusionやその派生で どれだけpromptで美少女イラストを作成できるかを試みている方達や ゲームの背景素材に使おうとか、 アドベンチャーゲームの背景やTRPGの際の素材に使おうとか キャラ作成時のポートレート写真を作ろうとか、 そういった試みがいろいろ見れて面白いです。 使いこなしている人はすごい絵を作っていますしね…。

この8月~9月というのは、 8月の終わりころにMidjourney出てから 9月にStableDiffusionがオープンソースで公開され、 日本でmimicが話題になり、 WaifuDiffusionやらNovelDiffusion等のStableDiffusionからの派生の誕生 txt2imgだけでなく、txt2movieやらtxt23Dやらという 2次元を越えたものまでこの一か月で出てくるというとんでもない時期でした。

学習データにpixivの画像が用いられている(?)という話もあり、 権利関係がどうなるのかとか、これからのイラストレーターの在り方とか、 純粋な技術だけでなく、これまでの常識すら大きく変わりかねない流れを感じました。

今後どうなっていくかはちょっと自分には分かりかねますが、 気軽にAI画像生成ができる環境が作れる時代であるということ、 何となくでも絵を生成するのは面白いなーと感じること、 そして、今後どういう流れになっていくのかということは、 自分なりに追っていきたい気持ちはありますね。

それではでは。


0 件のコメント:

コメントを投稿