前置き

最近、イラストを生成してくれるAIがアツいらしい。
「そういう話、前からあんじゃん」と思われるかもしれない。
私も6年前にはChainer-goghという画風変換アルゴリズムを試した件をこのブログに書いた。

しかし、当時はちょっと試してそれっきりだった。たしかに凄いけど、なにかに実用できるというほどでは無いなと思った。
とは言え、あれから6年も経てば技術も進歩しているという事らしい。

去年(2021年)から今年にかけて、”言葉を入力するだけでその通りに絵を描いてくれる”系のすごいAIが続々と発表されている。

発端となったのは、2021年の頭にOpenAI(イーロンマスクらが設立した人工知能を研究する非営利団体)が発表した、”CLIP“と呼ばれる新しい画像分類モデルの論文だ。

OpenAIが開発した画像認識AI「CLIP」の思考の特徴とは?

要するに、CLIPによって、画像とその画像を説明する文章のセットからAIに学習させる事が可能になったようだ。という事は、文章から画像を生成するAIが実現できるという事でもある。

そして、OpenAIがこのCLIPを使って作ったAIが”DALL-E“だ。

「バイクに乗るピカチュウ」「アボカドの椅子」など言葉から自動でイラストや写真を生成するAI「DALL・E」

そして1年後、今年の4月にDALL-Eの高速化、高解像度化を実現した”DALL-E2“が発表された。

入力した文字情報から画像を生み出す「DALL・E」の高解像度・低レイテンシ版「DALL・E 2」登場

DALL-E2“はtwitterでチラホラ話題になっていた。というのも、アルファテストのような形で一般人でも触る事が可能になったからだ。メールアドレスを招待待ちリストに登録しておけば、順番が来れば触れるようになるらしい。
私はいまだに招待が来ていない。

また、DALL-E2は7月21日からベータ版に突入して、生成した画像を商用利用する事が可能になった。
有料プランも用意されていて、15ドルで115クレジット…つまり460枚生成できる。1枚当たり3~4円ほどだ。

言葉をもとに画像生成する話題のAIシステム「DALL・E2」ベータ版公開へ。ゲームのコンセプトアートなどに商用利用も可能

Googleもまた、今年の5月、文章から画像生成するAI、”Imagen“を発表した。
Googleが言うには競合のDALL-EやVQGANよりも高性能との事だ。

Google、文章から高精度画像を生成するAI「Imagen」。ポルノなどへの悪用考え一般公開せず

しかし、Imagenは一般ユーザーに公開されていない。というのも、例えばDALL・Eは一般ユーザーが触る事を考慮して、エロい画像などの不適切な画像が出力されないようにアレコレ工夫するハメになっている。また、一般ユーザーに自由に使わせると、絶対に悪用するヤツが出てくるし、炎上する事にもなりかねない。
そういうのが面倒だから、GoogleはImagenを公開しないで内輪で使おうというわけだ。

DALL-E2は多様性が足りない!と批判されたかどうかは知らないが、ある日突然、配慮した画像を出力するようになった。訝しんだユーザーが、運営が勝手にプロンプトに多様性っぽい文言を追加していた事を暴き出した事件もあった。

そういう状況が有る中で、今回の記事で取り上げるのは、Somnai氏が既存AI技術とCLIPを組み合わせて開発した”DiscoDiffusion“(以下DD)だ。

DDが最初にリリースされたのは去年の10月だった。それから今年の1月にはVer4.1が出たが、Somnai氏の開発はそこで途絶えて、以降は別の人達によって開発が続けられているようだ。

というのも、Somnai氏はデビッド・ホルツ氏(Leap Motionの創業者)によるMidjourneyというAIを開発するチームに参加してしまったからだ。
という事は、Midjourneyは基本的にDDよりも高性能だろうと予想される。
DDでは並みのグラボだと画像生成に15~20分かかってしまう。RTX3080なら4分ほどまで短縮できるらしいが。いずれにせよ、Midjourneyならば1分ほどで生成してくれる。この差は大きい。

そして、このMidjourneyこそが、今twitterで大バズリしている画像生成AIだ。
MidjourneyはDiscordを用いて、誰でも今すぐ触る事が可能だ。DALL-E2のような招待待ちもいらない。だからみんなで触ってみんなが話題にしてるわけだ。

てなわけで、ここ数週間バズッてる、文章から画像生成してくれる系AIの概観はこんなところでは無いだろうか。

私も早速Midjourneyを試したが、たしかにそれっぽい絵を出してくれるが、やはり細部はちょっと変だったりするので、そこに加筆してやればちゃんと絵になるだろうという話になる。

しかし、これだとAI様が気ままに描いた絵を人間が仕上げるわけで、それはAIが主人で人間は下僕みたいな関係になってしまってて、何となくシャクである。

そんな中、深津氏はMidjourneyでは無くDDを使って、自分が描いた下絵をAIに加筆させるという実験をやってみせている。

まあ、これなら人間が主人でAIが奴隷という、あるべき立場関係の納得感がある。

そういう流れで自分でもDDを触ってみておくかと考えるに至った。

DiscoDiffusionについて

MidjourneyはDiscordから簡単に触れるのに対して、DDはやや面倒だ。

DDはjupyter notebookという形で提供される。これが何ぞや?というと、pythonをブラウザ上から実行できるというシロモノだ。画像生成の実行、パラメータの変更、生成結果の表示などが全部ブラウザ上からサクサクできて便利という事だ。

そして、DDはGoogleColabから使用する方法がサポートされており、推奨されている。

GoogleColabとは何ぞや?というと、Googleから無料でクラウドのPython実行環境を貸してもらえるサービスである。これのすごい所は、必ずVRAMが12GB以上~16GB積んであるGPUが付いてるという点であり、DDのようなAIの実行にはうってつけというわけだ。

ただし制約も色々あって、まず一度に最大12時間までしか借りられず、それを超えたら強制シャットダウンされてしまい、また借り直してセットアップし直すハメになる。
そして、ブラウザを開いてなければやっぱりシャットダウンしてしまうので、作業中はPCの電源を落とせない。
さらに、90分毎に「まだそこにおるか?」みたいな検証が入り、それに応答しなかったらやっぱりシャットダウンされる。つまりPC付けっぱなしにしてお出かけするわけにはいかない。

GoogleColabには有料プランもあって、月千円ほどのProプランだと、借りれる時間が最大24時間に増える。90分毎のチェックも無くなるらしい。
月5千円ほどのProプラスプランなら、バックグラウンド実行も可能になる。PCの電源を落としていても作業を続行してくれる。

また、GoogleColabには”GPUガチャ”の側面がある。借りたマシンにどんなGPUが付いてるかはランダムだ。
無料プランだとTesla K80またはT4が割り当てられるらしい。T4なら15~20分で画像生成が終わるが、K80だと1時間以上かかってしまうらしい。K80を引いたらハズレだ。
Proプランなら大体T4またはP100がもらえるらしい。ProプラスプランだとV100やA100がもらえたりする。

それぞれの性能は以下のような感じだ。

名称単精度演算性能(TFlops)VRAM(GB)
Tesla K802.6512
T48.116
P1009.316
V1001416
A10019.540

K80はT4やP100の1/3以下の性能しかない。性能差がそのまま画像生成時間の差になってしまっている。
ちなみに私がローカルのGTX1080で800×600画像を生成するのに18分ほどかかった。一般的なグラボの性能を記しておくと、

名称単精度演算性能(TFlops)VRAM(GB)MSRP(ドル)
GTX10706.468380
RTX20707.468500
GTX10808.878600
RTX208010.068800
RTX307020.318660
RTX308029.7610850
RTX3080Ti34.71121200
RTX309035.58241500
RTX3090Ti40242000

こうして見ると、K80はGTX1050程度の性能しかない。T4はRTX2070より上。P100はGTX1080より上。V100はRTX2080とRTX3070の中間くらい。A100はRTX3070と同等という感じだ。
ただし、GoogleColabが使ってるような機械学習向けGPUは一般GPUよりとにかくVRAMが潤沢な傾向がある。私のVRAM8GBのGTX1080では800×600の画像サイズでVRAMがギリギリまで埋まってしまうが、16GBのT4なら2倍程度のサイズも狙えそうだ。

RTX3090ならDDの画像生成が4分ほどで終わるというのも、演算性能の差を見れば納得だ。

話を戻すが、そんな風にGoogleColab上でDDを動かすだけならまあ簡単なので、この辺のチュートリアルを見ていただければいいだろう。

Get started quickly with Disco Diffusion v5 ~ Generative AI Art

Get Started With Disco Diffusion to Create AI Generated Art

私はGoogleColabではなくローカルPC上でDDを実行させたかった。Colabはなんか色々面倒くさそうだったからだ。

↓こちらのページでローカルPC上でDDを実行する方法が詳しく説明されている。

https://github.com/MohamadZeina/Disco_Diffusion_Local

この方法に従ってみたが、やたら四苦八苦して手間取ったので、実際にローカルでDDを実行するまでの手順をメモっておこうというのが本記事の本題だ。

本題

まず大前提として、パソコンのOSはWindows10であるとする。Windows11でもOKらしい。
また、WSL(Windows Subsystem for Linux)を使うので、実質Linuxでも同じ手順で実行できるはずだ。

そして、パソコンにはVRAM8GB以上のNVidia GPUを積んである必要がある。できれば12GB以上あるとよいらしい。

ちなみに、以下では解説サイトからコマンドをコピペしてきているが、ライブラリのバージョンが上がったりしてコマンドが変わる可能性などあるので、食い違いがあれば解説サイトの方を確認して欲しい。以下は、あくまで2022年8月5日段階で上手く行った方法に過ぎない。

1.Windowsのバージョンを確認

Windows10のバージョンが21H2以上でないとダメらしい。何故なら、これ以前のバージョンではWSLからGPUにアクセスできないからだ。

パワーシェルを開いて

と打てば、バージョンを確認できる。

私は最初上手く行かなかったが、確認したらバージョンが21H1で足りてなかった。
てっきり自動更新されてると思っていたが、自分から更新しに行かないとアップデートされてなかったりするらしい。

2.WSL2をインストール

WSL2をインストールして、WSL2上でUbuntuを動かす必要がある。

私はここでも上手く行ってなかったのは、数年前にインストールしたUbuntuだったので、古いWSL1上で動いてしまっていた。
新しくUbuntuを入れる人は問題無いだろうが、すでに入れてしまっていた人は確認が必要だ。

パワーシェルで

と打てば、UbuntuがどのWSLバージョンで動作してるか確認できる。
バージョンが1になってしまってたら、

このコマンドでWSL2をデフォルトに設定してから、一旦Ubuntuをアンインストールして再インストールしたら、WSL2になっていた。

また、この入れ直したUbuntuを実行したらエラーが出てしまった。「BIOSでCPUの仮想化機能を有効化してください」というような文言だった。

この場合、こちらなどを参考に、仮想化機能を有効化したら正常に動作した。↓

3.UbuntuにAnacondaを入れる

Anacondaとはなんじゃ?というと、Pythonの開発用の環境だ。

これについては解説通り、Ubuntuを開いて指定されたコマンドを打っていけばOKだった。

4.Anaconda仮想環境を作成

Anacondaの仮想環境ってなんじゃ?というと、通常の環境で好き勝手にライブラリをインスコしまくると、環境がグチャグチャに汚染されてしまうが、仮想環境を建ててその中にライブラリインスコすれば通常の環境には影響を与えなくて済むから便利だ。

というわけでpytorch_110という名前で仮想環境を建てて有効化する。↓

次にpytorchをインスコするが、Cudatoolkitのバージョンが上がってしまっているので、もはや解説サイトのコマンドは使えなかった。こちらのイシューを参考にこっちのコマンドを打つ。↓

解説サイトの通りに他の依存関係もインストールしておく。↓

ただし、私の環境では他にも入れておかないとエラーが出たものがある。
まず、regexだ。↓

また、jupyter_http_over_wsというのもインスコして有効化する必要があった。↓

5.jupyter notebookを起動

解説ページによると、”jupyter notebook”と打ち込めばOKと書かれているが、私の環境ではこれだと404が出て接続できなかった。

こちらを参考に、こっちのコマンドを打ったら上手く行った。

実行するとnotebookサーバが立ち上がって、以下の画像のような感じになるが、画像中でハイライトしているアドレス部分をコピーする。

そしたら次にDDのNotebookページを開く。↓

https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb

このページからローカルのNotebookサーバに接続するので、画面右上の”接続”→”ローカルランタイムに接続”を選択。↓

バックエンドURLの欄に、先ほどコピーしたアドレスを貼り付けて”接続”を押すと接続される。

“接続済み(ローカル)”と表示されていれば接続に成功している。

あとは上からページをスクロールしていって、黒い再生マークが付いてる箇所を一つずつクリックして実行していけばOK。間を抜かすとエラーが出たりする。

実行に成功すれば、左側にチェックマークが付く。!マークが出てたらエラーが起きてるので、エラーメッセージを見ながら何とかするしかない。

AIモデルをダウンロードしてくる所など、初回の実行ではかなり待たされるところもある。

とにかく無事に”4.Diffuse!”まで辿り着けば画像生成が実行される。

ちなみにDiffuseの実行開始時に”CUDA out of memory.“エラーが出たりする。

これはVRAM不足という事だから、生成する画像サイズを小さくして再トライするしかない。私の8GBのVRAMでは800×600でギリギリ…下手するとout of memoryになってしまう。600×450くらいが無難なサイズか。サイズを小さくするほど処理時間も短くなる。
悲しい事に一旦out of memoryエラーが出てしまうともうVRAMは解放されないので、一度Ubuntu側に戻ってnotebookサーバを停止(Ctrl+Cを押してから、yでシャットダウン)→再起動(アドレスが変わる)→notebookページから再接続という流れが必要だ。

何はともあれ、実行に成功したら画像生成が始まる。↓

生成された画像は”/home/ユーザ名/images_out”フォルダ以下に保存されている。

6.設定の変更

細かい設定については私もまだ分かってないが、とりあえず真っ先に知っておきたい設定について。

まず、肝心のお題(文章)の入力については、この部分を書き換えればOK。↓

また、デフォルト設定だと一つのお題から連続して50枚の画像を生成しようとしてしまうが、そんなに要らないと思うので、これは”n_batches”の値を書き換えれば変更できる。

生成する画像サイズを変更するには、”width_height_for_512x512_models”の項目を書き換えればOK。
また、stepsの値を変えればイテレーション数…つまり描き込みの回数を変更できる。

ところで、深津氏がやってたみたいに、自分が描いた下絵をAIに加筆してもらうにはどうすんの?と言うと、init_imageという機能で実現できる。
この”init_image”の項目で下絵の画像を指定する。パスはUbuntu上でのパスを入力する。↓
“init_scale”は、これが大きいほど下絵を尊重してくれるらしい。
“skip_steps”は、stepsの回数をどれだけ減らすか。stepsの半分の値くらいにしとくのが目安らしい。stepsが250ならskip_stepsは125にするなど。

まとめ

まず、DDを使うなら、ローカルとColabどっちがいいのという話があると思う。
MacOSしか無い人なんかだと、Colab一択になってしまうだろう。
WindowsやLinuxの人でも、相当貧弱なグラボだと、Colabを利用した方が良さそうだ。

私のGTX1080はColabのT4やP100と同程度の性能だが、そうなると判断が難しい。
Colabの無料版は制約が多くて面倒くさそうな印象なので、Colab無料版よりはローカルPC実行の方が良い気がする。
とは言え、家でGPUをぶん回してると電気代がバカにならないし、部屋もクソ暑くなるので、ColabのPro版に月額千円払った方がマシのような気がする。

RTX3090などの強力なグラボを積んでる人ならローカル実行が圧倒的に有利な気がする。

私のPCで18分くらいかかる画像生成が、RTX3080Tiなら4分で出来てしまう。考え方によっては15万ほどだしてグラボをアップグレードすれば、絵を描く速度が4倍になるよ!みたいな取引だと捉えると、グラボを新調したくなってくるというものだ。

まあ、いずれにせよDD使うよりもMidjourney使う方がいいんじゃないの?という気がしてる。
生成する絵のクオリティの比較は両方使いこんでみないと分からないが、とにかく生成スピードが段違いだ。Midjourneyなら1分ほどで画像生成できてしまう。Somnai氏は相当バキバキに最適化してしまったようだ。

Midjourneyに課金すれば月額千円ほどで月200枚の画像生成ができるらしいので、わざわざGoogleColabのPro版に課金してDD使うくらいならMidjourneyに課金して使う方がメリットは大きそうだ。

ただし、DDなら自分が描いた下書きに加筆させる事ができるというのが大きいかもしれない。

しかし、これについてもMidjourneyもイメージプロンプトという機能で画像をヒントとして与えることができるらしいので、調べれば同じような事ができるのかもしれない。

結論としては、私はさしあたってはMidjouneyとローカルでのDDを併用して可能性を探っていく感じになりそうだ。

画像生成AIについて思う事

私がこんな記事を書いているからとって、嬉々としてAIに飛びついているというような風には受け取って欲しくない。

本心では「なんちゅうもんを作ってくれたんや!」と思っている。
これは下手すると、イラストそのものに対するメタデッキとして働いてしまうかもしれない。

まず、モノの価値というものは、それが与えてくれる快と、希少性の組み合わせと言えるかもしれない。

例えば、ダイヤの指輪はキラキラして綺麗という快を与えてくれる。しかし、ガラス玉だってダイヤと同じようにカッティングすれば、ダイヤと同じくらいキラキラして綺麗なハズだ。
それにも拘らず、ガラス玉の指輪なんて誰も見向きもしない
ガラス玉は希少性がないからだ。希少性が無ければ価値が無くなる。ありふれている物は、ありふれているというだけでウンザリさせられる。

この前、ダヴィンチ恐山氏が”頻出ツイート100選”というNote記事を書いてバズッていた(そして記事は消えた)。
アレを見れば分かるが、どれだけいい事を書いたとしても、それが流行ってテンプレと化してしまえばかなりイヤになるという事だ。

それを踏まえると、みんながこぞってMidjourneyなどが生成したイラストを投稿しまくったらどうなるかは明白だ。
Midjourneyは何かいい感じの流行りのイラストみたいな画像を生成してくれるが、そういうなんかいい感じのイラストがTLを埋め尽くしたらどうなる?

早晩、みんな流行りのイラストに対して拒否反応を示すようになるだろう。
すると、流行りのイラストはもう要らん!これからは逆にディックブルーナみたいな見やすくてシンプルなイラストがアツい!という風潮になるかもしれない。

それで問題が解決するかと言うと、そうでもないだろう。
MidjourneyのようなAIは明らかにArtstationなどから人気画像を集めてきてAIに食わせて学習させている。
つまり、ディックブルーナ風が世界で流行れば今度はそういうイラストを生成するAIが生まれるだけの話である。

だから、画像生成AIは常に流行りのイラストを潰すメタデッキと化してしまう恐れがある。

最終的には、人類はイラストそのものに嫌気が差す事になるかもしれない。つまりそれはイラストという表現形式全体が価値を失うという事だ。

このような未来を想像すると、本当にロクでも無いなと感じてしまうが、かと言って生まれてしまったAIを無視する事ももはやできない。
例えば電卓が発明された時、ソロバンが得意な人が「電卓なんて人のぬくもりがないよ!」とか言って電卓をディスッてソロバン使い続けたところで、無意味である。

我々はAIを憎んだとしても、それを拒否する選択肢は持っていない。
だから私もイヤだな~と思っていつつも、一通り調べ倒しておかなければならないという事だ。