RainAlgizの日記帳

#Unity #AI #C# #Python #ライフアフター

画像生成AIから絵を守るツール「Mist」をGoogle Colaboratoryで動かす

Google Colaboratory(以下 Google Colab)の使い方は省略します。

1.初回セットアップ

1-1.Mistのダウンロード

自分のGoogle DriveにMistを持ってきます。

このコードは1回実行すればOKです。

%cd /content/drive/MyDrive
!git clone https://github.com/mist-project/mist.git

 

1-2.Diffusion Modelのダウンロード

このコードも1回でOK。

!wget -c https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt
!mkdir -p  models/ldm/stable-diffusion-v1
!mv sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

 

2.Mist実行コード

以下のコードはGPUに繋ぐたびに実行する必要があります。

2-1.ディレクトリ移動

%cd /content/drive/MyDrive/mist2

2-2.必要なパッケージとライブラリのインポート

!pip install -q numpy
!pip install -q OmegaConf
!pip install -q Image
!pip install -q einops
!pip install -q tqdm

!pip install -q torch
!pip install -q torchvision
!pip install -q pytorch_lightning

!pip install -q advertorch

!pip install -q pytorch-lightning==1.7.7
!pip install -q torchmetrics==0.11.4
!pip install -q taming-transformers
!pip install -q clip
!pip install -q transformers
!pip install -q kornia
!pip install -q matplotlib
!pip install -q ipykernel

 

2-3.ライブラリの調整

text="\ndef zero_gradients(i):\n\tfor t in iter_gradients(i):\n\t\tt.zero_()"
with open("/usr/local/lib/python3.10/dist-packages/torch/autograd/gradcheck.py",mode='a') as f:
  f.write(text)

with open("/usr/local/lib/python3.10/dist-packages/taming/modules/vqvae/quantize.py") as f:
  datalines=f.read()
if datalines.find("VectorQuantizer2") == -1 :
  datalines=datalines.replace("VectorQuantizer","VectorQuantizer2")
  with open("/usr/local/lib/python3.10/dist-packages/taming/modules/vqvae/quantize.py",mode="w") as f:
    f.write(datalines)

私の環境ではこのコードを実行しないとエラーがでます。

ざっくり説明すると、

gradcheck.pyにzero_gradients関数がないよ!→zero_gradients関数を追加

quantize.pyにVectorQuantizer2クラスが見つからないよ!→VectorQuantizerをVectorQuantizer2に書き換え

ただこれだけです。

もしかしたらもっと良い方法があるかもしれません。

コメントで教えていただけると嬉しいです。

2-4.Mistの実行

!python mist_v3.py -img "画像ファイルパス" -e 4 -s 100 -in_size 512 -b 2

引数について簡単に説明します。

-img : 画像ファイルへのパスを入力 例:"/content/test.png"

-e : ノイズの強さ デフォルトは16だが結構目立つ。4か8くらいかいいかも

-in_size : 画像のサイズ 自動で調節されるので、元画像のサイズをいじる必要はない。512を指定すると出力画像も512×512になる。

-b : 処理分割数 1だと一気に処理して時間短縮になるが、多くのメモリを消費する。メモリが足りないとエラーが出て強制終了。T4やV100なら2がおすすめ

-m : モード 上記コードにはありませんが3種類のコードがあり、0,1,2で指定。

  0:semantic mode

  1:textual mode

  2:fused mode

色々相性があるみたい。詳しいことは公式ページにのってます。

mist-documentation.readthedocs.iohttps://mist-documentation.readthedocs.io/en/latest/content/mode.html#mode

その他の引数は!python mist_v3.py -h を実行することで見れます。

 

 

3.めんどくさい人へ

公式がGoogle Colabプロジェクトを出しやがりました。

私の苦労はなんだったのか。この記事の意味は...いや...あるはず...だよね?

ありがたく使わせて頂きましょう。天才には敵わない。

私は自分で作ったコードを使うけどね!!!(´;ω;`)ウッ…

github.com

 

4.Mistの問題点

最新の画像生成AI (SDXL LoRA)に対しては効果がない。Scenario.ggのSDXL LoRAを使って自作モデルを作ってみましたが、きれいに学習されましたとさ。(ちなみに、Scenario.ggで自作モデルを作るには課金が必要です。月々4000円くらい。高い!)

 

卒業研究のネタが決まってない人はMistの改良や敵対的サンプルなんてどうでしょう。

おもしろいよ!