🍆

NightShadeとMist2で絵柄は模倣阻止できる?~絵柄模倣対策の検証その2~

2024/01/29に公開

はじめに

結論

NightShadeにもMist2にも絵柄模倣の阻止効果はなく、個人がする一定規模の学習(反転込み390枚)においてタグ阻止効果も見られなかった。
一切の効果がないとは言えないが、かけられるノイズに対して効果も微小なものとなっており、絵柄の模倣を妨害するという点においては実用レベルに達していない。

実験に至った経緯

前回、glazeとMistに対して検証をし、その結果だけでいえば効果がないと結論付けた。
その記事は以下にまとめてある。
https://zenn.dev/mobile_app_hub/articles/d638d2fcb268e9

その時、NightShadeが出たらまた検証したいと書いたが、2024年1月19日に一般公開されたことで改めてNightShadeに対して、そしてすでに出ているMist2について検証することにする。

実験方法

詳しい実験方法は前回の方法を継承する。生成プロンプト等も同一にしていくためぜひ前回と見比べてほしい。
https://zenn.dev/mobile_app_hub/articles/d638d2fcb268e9

画像処理

オリジナル画像 Nightshadeをかけた画像 Mist2をかけた画像
オリジナル画像 NightShadeをかけた画像 Mist2をかけた画像

NightShadeの画像のノイズは少なめだが、エプロンあたりにうっすらともやが入っているのが確認できるだろう。とはいえぱっと見でいえば問題がないものといえる。
一方Mist2は『ぱっと見』レベルでも大きなノイズが入る。こちらは設定によって変えられるが、初期設定そのままにした。

実行環境と設定

今回もcolabのこちらのノートを借りてモデルを作った。
再度感謝する。

ベースモデルはSDXL1.0を使い、ステップ数は5000。やはり、前回と同一にした。
その他の設定も同一。コピペで失礼する。

config

[sdxl_arguments]
cache_text_encoder_outputs = true
no_half_vae = true
min_timestep = 0
max_timestep = 1000
shuffle_caption = false
[dataset_arguments]
debug_dataset = false
in_json = "/content/fine_tune/meta_lat.json"
dataset_repeats = 1
keep_tokens = 0
resolution = "1024,1024"
caption_dropout_rate = 0
caption_tag_dropout_rate = 0
caption_dropout_every_n_epochs = 0
color_aug = false
token_warmup_min = 1
token_warmup_step = 0

[training_arguments]
save_precision = "fp16"
save_every_n_steps = 1000
train_batch_size = 4
max_token_length = 225
mem_eff_attn = false
xformers = true
max_train_steps = 5000
max_data_loader_n_workers = 8
persistent_data_loader_workers = true
gradient_checkpointing = true
gradient_accumulation_steps = 1
mixed_precision = "fp16"

[saving_arguments]
save_model_as = "safetensors"

[optimizer_arguments]
optimizer_type = "AdaFactor"
learning_rate = 4e-7
train_text_encoder = false
max_grad_norm = 0
optimizer_args = [ "scale_parameter=False", "relative_step=False", "warmup_init=False",]
lr_scheduler = "constant_with_warmup"
lr_warmup_steps = 100

検証

前回同様、上記のnoteにも記述されているプロンプトで試していこうと思う。

プロンプト及び設定詳細

1girl, aqua eyes, baseball cap, blonde hair, closed mouth, earrings, green background, hat, hoop earrings, jewelry, looking at viewer, shirt, short hair, simple background, solo, upper body, yellow shirt
Negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3436906699, Size: 512x512

ベースモデルはsd_xl_base_1.0

ベースモデル オリジナル画像で学習

上記は前回と同じものだ。以下がNightShadeとMist2

NS画像で学習 Mist2画像で学習

残念ながら、どちらも絵柄は模倣できてしまっているとみていいだろう。

次に、先ほどの比較画像に使った紫髪の女の子のタグをプロンプトにする。これも前回と同じseed値で行う。

プロンプト及び設定詳細

1girl, solo, looking at viewer, medium hair, open mouth, blue eyes, purple hair, side ponytail, blue apron, own hands together, star hair ornament, long sleeves, black shirt, red skart, cowboy shot, outdoors, starry sky, standing, hands up, red skirt
Negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Steps: 35, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3775323182, Size: 1024x1024

ベースモデルはsd_xl_base_1.0

ベースモデル オリジナル画像で学習
NS画像で学習 Mist2画像で学習

指六本なのが気になるものの、模倣ができてしまっている。

前回同様、男性も比較する。

プロンプト及び設定詳細

1boy,black hair, blue eyes, school uniform, cowboy shot,
Negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Steps: 35, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 2279256047, Size: 1024x1024

ベースモデルはsd_xl_base_1.0

ベースモデル オリジナル画像で学習
NS画像で学習 Mist2画像で学習

Mistについては、Mist特有のノイズが走っているが、絵柄は模倣されてしまった。

NightShadeのタグ妨害効果について

一方、NightShadeの妨害効果は絵柄模倣ではなく、対象の誤認であるとされている。

Nightshadeは、画像のピクセルを微妙に変化させ、他の画像の特徴に合わせることで動作します。このような変化は人間の目には気づかないが、AIを欺き、画像の被写体を実際の内容とは異なるものとして認識させているの です。例えば、研究者は犬の画像を使い、基準となる猫の「基準」画像を用いて、猫の視覚的特徴に似せるために微妙な調整を加えました。この処理によって画像が損なわれ、その画像をトレーニングに使用するAIが犬を猫と誤認し、その後のAIが生成する画像に影響を与えます。

https://garagefarm.net/jp-blog/how-nightshade-is-poisoning-ai-to-protect-artists
(引用元。詳しい説明もここから読める。)

筆者のデータセットは私があらかじめ手動で付けたタグが付いているものだった。そのため、対象の誤認は起こっていない。

そのため、NightShadeの検証としてもう一つ、機械的にタグが付いていた場合どうなるかを検証していこうと思う。

以下方法

今回も使ったデータセットの画像部分だけを用いて、その画像部分にタグを機械的につける。
タグ付けモデルはwd-v1-4-swinv2-tagger-v2、タグスコアのしきい値は0.35で行った。

また例の女の子をもって説明する。
ちなみに交流系一次創作の宇宙星羅という名前のキャラクターである。

この女の子についていたタグは以下の通りだ。

1girl, solo, looking at viewer, medium hair, open mouth, blue eyes, purple hair, side ponytail, blue apron, own hands together, star hair ornament, long sleeves, black shirt, red skart, cowboy shot, outdoors, starry sky, standing, hands up, red skirt

オリジナル画像に機械的にタグをつけた場合は、こうなった。

1girl, solo, short hair, bangs, simple background, black hair, red eyes, dress, bare shoulders, closed mouth, blue hair, collarbone, upper body, grey background, off shoulder, single hair bun, androgynous, 1other, green dress, single bare shoulder

そして以下がNightShadeをかけた後の画像でタグを付けた場合。

1girl, solo, looking at viewer, short hair, blue eyes, skirt, hair ornament, purple hair, star (symbol), apron, own hands together, star hair ornament, own hands clasped

タグが少々減った気がするが、もしかしたらオリジナル画像に機械的にタグをつけた場合よりも適切なタグが付いている気がしないでもない。少なくとも、女の子であることは誤認されておらず、ほかの不適切なタグが付いているようにも見えない。

その状態で(他は同一の設定で)モデルを作ったが、其の結果を簡潔に以下に記す。

プロンプト及び設定詳細

1girl, aqua eyes, baseball cap, blonde hair, closed mouth, earrings, green background, hat, hoop earrings, jewelry, looking at viewer, shirt, short hair, simple background, solo, upper body, yellow shirt
Negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3436906699, Size: 512x512

ベースモデル オリジナル画像で学習 NS画像で学習

誤認されていなかった。

終わりに

現状では効果が実用的ではないことがわかった。これからも継続して絵柄模倣に対する対策技術を注視していきたい。

Mobile App Hub

Discussion