🐱<突然ですが、問題です。
こちらの画像、実際に撮影されたものか、AIで生成したものか、どちらだと思いますか? 自信を持って答えるのは難しいのではないでしょうか。
今回はこれをAIで見分けてやろうという内容です。
ちなみに正解は本記事の最後で発表します。
AIで画像を生成する
最近すごく流行っていますよね。特に2次元の絵が大量に生成されている印象があります。その一方で、実際の風景のような画像を生成する例というのは(私の環境だけかもしれませんが)あまり見かけません。
文章から画像を生成できるStableDiffusionを用いて風景の画像を生成してみましょう。 モデルの使い方などの解説はたくさんあるのでそちらに譲ります。
早速生成した画像をいくつか見てみましょう。
きれいな風景の写真を出してくださいと注文をかけました。
🐱<なかなかよくないですか?
よく見ると若干のちぐはぐ感がありつつも、それなりの質で出力されているように見えます。もちろん、形が崩れてしまったり、どう見ても不自然なものもあります。人間や構造物が入ってくるとその傾向が大きかったので、そういうものが入らないようにプロンプトで指定して生成をさせています。
実際に撮影された画像を準備する
さて、次にAI生成ではなく実際に撮影された写真が欲しいわけですが、実際に撮影されたものはネット上に転がっているものを適当に使うわけにもいきません。
そこで今回こちらのサイトから画像をあつめました。 https://find47.jp/find47.jp こちらのサイト、日本の観光促進を目的として運営が行われています。撮影した画像を投稿することができます。そして投稿された画像はクリエイティブコモンズ*1に従う範囲で自由に利用ができます。素敵な写真がたくさんあるので、国内で新しい旅行先を見つけるのにも良いかもしれません。
こちらに投稿されている画像とAIで生成した画像をそれぞれ1500枚程度ずつ集めました。 これから生成、収集した画像を用いて分類を行っていきます。
AI vs AI
この揃えたデータたちをAIを使って分類します。今回は少し試してみる程度なのでモデルはPyTorchで用意されているResNetを使います。生成されたものか、実際に撮影されたものかの2クラス分類タスクです。
生成するAI、識別するAI、どちらが強いでしょうか。
特にお見せするものもないので学習の結果ですが、正解率はおよそ89%になりました。
7割くらいあれば良いかな?と思っていたので高めな印象です。詳細な考察を行っていませんが、生成された画像かどうかで何かしらの差はありそうですね。 勝ち負けの基準を決めていませんでしたが、識別側の優勢と言って良い結果ではないでしょうか。
今回の内容はここまでです。実際に正解した画像、間違えた画像を比較するなどして傾向を見るのが続きの作業でしょうか。
正解発表
最後に、冒頭で出した問題の正解発表です。
正解は... 実際に撮影された画像です。
こちらの画像ですね。
元の写真が載っているページはこちらです。福島県で撮影されたものでした。
ちなみに・・・この画像は学習に利用していません。そのため、ResNetくんは初めて見る画像ですが、ちゃんと実際に撮影されたものであると答えることができていました。
🐱<さすがですね!
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp
*1:クリエイティブコモンズ:著作者が使用範囲のルールを決めて、それに従う範囲であれば著作物を自由に使用して良いという意思表示をするための表示。(クリエイティブコモンズライセンスとは)
今回紹介したサイトではクリエイティブコモンズ国際4.0の「表示」と「継承」を示しているので、適切なクレジット表示を行い、かつ使用条件を追加しない限り改変を含めて自由に使用することが出来ます。