盗作画像チェックサイトはどういう技術をつかっているのか?について、社内のAIエンジニアにきいてみました。
これから書くことは、あくまでも私が理解した内容であり、間違っていたり誤解しているところがあるかもしれませんが、自分の頭の中を文字として記録しておきます。
* 間違ってたらTwitterかフォームからおしえてもらえるとうれしいです。
目次
盗作画像チェックサイトの流れ
① 盗作画像チェックサイトに登録したユーザーサイトの画像データを収集する。
② ①の画像データをアルゴリズム(アルゴリズムA)を使って、行列データに変換し自社のサーバーに格納する
③ クローラーがいろんなウェブサイトを巡回し、そこにある画像データを独自のアルゴリズムを使って行列データに変換する。
④ ③の行列データと②の行列データの類似性をアルゴリズム(アルゴリズムB)を使って計算する。
⑤ ④の結果(類似性)が高ければ、画像が盗作されている可能性が高いと判断し、ユーザーサイトと盗作している可能性のあるサイトのURLをレポートする
ざっくりとこんなイメージ
技術のキモ
流れの②にある、画像データを独自のアルゴリズムを使って行列データに変換するところのアルゴリズムAと、④の2つの行列データの類似性を計算するアルゴリズムBがキモです。
なぜならば、ユーザーのサイトの画像があるサイトにある画像と同じなのかどうかを判断するためには、アルゴリズムAとアルゴリズムBの組み合わせで答えを出すからです。
つまり、このアルゴリズムの出来が悪いと、盗用された画像ファイルがあったとしても見つけられる可能性が低くなるのと、2つのアルゴリズムの出来がよければ、盗用を検出できる可能性が上がる以外にも検索の効率を上げることができるからです。
2つのアルゴリズムについて
上にあげた2つのアルゴリズムについて、アルゴリズムAは画像データを行列データに変換するアルゴリズムですが、このアルゴリズム の精度を上げる方法として、Deep Metric Learningというものがあります。
Deep Metric Learningで遊ぶ PyTorch – Qiita
2つの行列データの類似性を計算するアルゴリズムBは、2つの行列の距離を測るともいわれ、メジャーなものにユークリッド距離(Euclidean distance)、またはユークリッド計量(Euclidean metric)や、コサイン類似度(Cosine similarity)があります。
画像検索の効率をあげる方法
2つの画像データを行列データに変換し、その2つの行列データの類似性を検証するには、先に上げた方法などを用いて2つの行列の距離を測ります。
この時、例えば人の顔の画像データとして、自分の顔が写った写真が10枚、友人の写った写真が10枚あったとしたら、任意の2枚の自分の写真の距離(類似性)は、自分の写真と友人の写真の距離に比べると高くなれば、それは優れたアルゴリズムで、そうでなければ優れていないアルゴリズムになります。
一般的には盗作を気にするようなユーザーのサイトには大量の画像があります。クローラーが検出した画像ファイルを1枚づつ、ユーザーのサイトにある画像データと比較するよりも、ユーザーのサイトにある画像自体についてグルーピングして、その代表となる画像と、クローラーが検出した画像を比較できれば、1枚1枚チェックするよりもはるかに効率があがります。
サイトの画像データを収集するクローラーも、そして集めてきた画像データをユーザーサイトの画像と比較するプログラムも、サーバーのリソースを多く必要とします。
そして、そのリソースは盗用画像を検索するサービスを運営するサーバー費用にも直結します。
つまり、ユーザーサイトの画像を行列データにするアルゴリズム、ユーザーサイトの画像データの代表データを絞り込む方法、そして、そのデータとクローラーが集めてきた画像データの類似性を検証するアルゴリズムなどなど、技術的にはとてもむずかしいレベルです。
まとめ
ということで、Deep Learningについて勉強中の自分が、社内のエンジニアにきいた内容をまとめてみました。
UdemyでDeep Learningの講習を購入してはみましたが、なかなか進まないので、やっぱり具体的なところを詳しい人に聴けるほうが、どこでどんな技術が必要でそれがどうやったら役に立つのかということがわかっていいですね。
なので、これからも幅広く勉強していきたいとおもいます。