のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

AIで作った画像をAIは見分けられるのか!?

Sponsored Links

皆さんこんにちは
tereka114です。最近はNLP関係の技術調査も兼ねて、FB3をやってます。
最近の社会の流れを見ていて、少し時間の片隅でやってみたい事ができ、やったので、実験とその結果を書いておきます。

導入

今年はStable Diffusionが発表され、また、mimic、NovelAIなど画像の生成に関して
社会に劇的なインパクトを与えるモデル/サービスが発表されてきました。
今までの生成モデルもそれなりにおおっと言われてましたが、ここまでインパクトが世間的に出てくることはほとんどなかったのではないかと思っています。
私もお仕事であまり関係をしない都合上、GAN以降のモデルはノーマークだったので、非常に驚きました。(記憶だとBigGANが最後・・・)

私がGANを使っていた頃は32px, 64pxを生成するのが限度で、かつ、きれいではありませんでした。
それが、わずか数年(5年ほどだと思いますが・・・)こんなに綺麗な画像が生成できるとは思っていませんでした。
もちろん、機械学習エンジニアとして、AIすげぇ、大歓迎といった本人主観の一面だけで見た至極単純な感想もありますが、
デザイナー/イラストレーターさんからすると、やはり驚異の一つであり、既存の絵と近しいものが出てきた といったことになれば、
AIによる絵のパクリなど、新しい問題が生まれるのは当然のことです。

そのためなのか、サービスの規約でAIの画像をアップロードを阻止しているといった情報もちらほらTwitterで見られています。

それらのAIが生成した画像の権利・倫理関係の良し悪しや実態の正誤はともかくとして、
人類が作った画像AIが作ったデータを見分けるのは将来的に価値があるものだと思っています。
段々と難しくなっていくと思いますが、今の段階だとどうなのかを見てみることは意味がありそうです。

準備

画像側のデータセットはほぼダウンロードするだけです。

Stable Diffusionのセットアップ

私はこのリンクのdocker/docker-composeを利用して、環境を構築しました。
注意しなければならないのはgit-lfsを入れておかないと、hugging faceからのモデルダウンロード時に実体が落ちてこないため、ハマります。
zenn.dev

次のコマンドを実行すれば、git-lfsをダウンロードできます。

sudo apt install git-lfs

実験

実験目的

本記事ではAIが作ったのか否かを見分けることを目的です。
利用用途を鑑みて次の2つを調査する必要があります。

  • 同じドメインで見分けられるのか。例えば、ランドマークを学習させて、新しいランドマークが見つかったときに、そのランドマークを正しく判定できるのか。
  • 違うドメインでも見分けられるのか。例えば、ランドマークを学習させて、車を判定する場合、その車は正しく判定できるのか。

データ作成

Stable Diffusionと人工のデータを準備し、単純に人類/AIで2値分類します。
一つのカテゴリだと難しいものもあるかもしれないので、いくつかのプロンプト(呪文)で試しました。

Category Real Dataset SD Prompt
Landmark GLDv1 landmark
Car myautage car outside

リアル画像と生成された画像です。どうでしょう?わかりますでしょうか?

Landmark Original

Stable Diffusion Landmark

Car Original

Stable Diffusion Car

モデル作成

モデルはEfficientNetV2m(Pretrained ImageNet)で前処理を次の2つのパタンを試しました。
Resize/RandomCrop(学習)+Resize/CenterCrop(推論)を用いました。Resizeだと画像に加工が入るので、特徴的なノイズが含まれる場合、そのノイズが変な方向に修正、もしくは、消える可能性があります。
そのため、Crop系のであれば、そのノイズを加工せず取り込めることを期待します。

評価方法

AUC、F1、Recall、Precisionを計算します。

実験結果

条件 前処理 AUC F1 Recall Precision
Landmark Resize 0.998 0.982 0.996 0.969
Car Resize 0.975 0.582 0.412 0.994
Landmark Crop 0.999 0.999 1.0 0.999
Car Crop 0.999 0.998 0.999 0.997

実装の詳細は次のKaggle Notebookを見てください。
Crop
https://www.kaggle.com/code/tereka/detectstablediffusionimages?scriptVersionId=109399786

Resize
https://www.kaggle.com/code/tereka/detectstablediffusionimages?scriptVersionId=109300787

Cropのほうが精度が高かったです。
リサイズは元画像の解像度によっても縮小のされ方が異なるので、判定が難しかったのではないかと推測できます。

Future Work

やり残したこととして、次があります。

  • 様々なモデルを使っての検出、Stable Diffusionのみならず、他のモデルも使って試みてどのモデルかを当てる。
  • より異なるドメインの違いによる差分はあるが、例えば、アニメ画像(Waifu diffusionなど)であれば、どのようになるのか。
  • 解像度の比較、Stable Diffusionの解像度が固定だったが、様々な解像度の画像が含まれる場合にどうなるのか。

最後に

今回のデータセットではAIを見分けることができたので、生成された画像に何らかの特徴があったのではと思っています。
AIでAIで作った画像がわかるか?といったことだけでAIによる諸問題が全て解決するとはもちろん言えませんが、問題の解決に一役買ってくれるとありがたいと考えています。