Fusic Tech Blog

Fusicエンジニアによる技術ブログ

AIに顔認識させて似ている顔を探してみる
2024/02/19

AIに顔認識させて似ている顔を探してみる

こんにちは、石橋です。

先月、キックオフミーティングのチーム発表で機械学習チームは面白いデモを開発しました

僕が作ったのはfacenetを用いた社内で似た顔を探すアプリです

こう見てみると、確かに似ている人がトップ3に並んでいる気がしているような気もしますねw

手法

全体像

  • facenetで顔をベクトルに変換する
  • ベクトルのデータベースを構築して
  • あるベクトルをクエリとして、類似ベクトルを探す

第一ステップ : facenetで顔をベクトルに変換する

facenetをembedderとして顔写真から顔ベクトルを得ます

facenetの事前学習済みモデルは公開されているので、そのまま使わせてもらいましょう。

ちなみに学習データはgithubのreadmeによると

  • Casia-WebFace
  • VGGFace2

の二つだそうです。

https://github.com/davidsandberg/facenet

Casia-WebFace は公式のリンクが生きていないので自分でデータを確認するには、クローンを公開しているものを探すしかありません。

僕も偶然見つけて手元にダウンロードしたのですが、どこでダウンロードしたかは忘れてしまいました。

第二ステップ:ベクトルのデータベースを構築

本格的にアプリにするのであればpostgresやmysqlなどで値を持つのがいいかもしれませんが、今回はデモ用の一発限りだったのでコード内の変数に残したままで使いました。

pythonであればpickleやpandasなどでやるのもいいかもしれませんね。

第三ステップ:あるベクトルをクエリとして、類似ベクトルを探す

ベクトルの類似度を計算する方法はいくつかありますが、今回はコサイン類似度で比較をしました。

ネット上で記事をいろいろ見ているとユークリッド距離で比較しているものもありました。

コサイン類似度についてはこちらとかが参考になるかと

https://manabitimes.jp/math/1378

類似度がいくつ以上ならTrueとするかの閾値は適宜調整が必要かもしれませんね

precisionを優先するかrecallを優先するかでも変わってくると思うので、この辺りはケースバイケースですね。

終わりに

一般的な画像処理だと、写っている人物判定は容易ではありませんが、機械学習の発展のおかげでより高精度な顔認識などを行うことができるようになりました。

それこそ、監視カメラの映像を自動で解析することや、大量の写真から同じ人だけを抽出してくるなど様々な応用方法が考えられます。

写真や映像を大量に抱えているが、活用方法が見つからないというお悩みなどがありましたら

ぜひお気軽に弊社にご相談いただければと思います

Ryu Ishibashi

Ryu Ishibashi

機械学習/Vue/React/Laravelとかやってます