2022.7.11

顔を照合する

技術

SCROLL DOWN SCROLL DOWN SCROLL DOWN

こんにちは!AIサービス開発室の鈴木生雄です。一ヶ月に1回は投稿したいと思っていたのですが、今回は前回投稿から二ヶ月が経過してしまいました。その間に季節は夏に移り、当社の新入社員は今月から部署配属されて、各プロジェクトでのOJTを開始しました。月並みですが、本当に時間が経つのは早ーい、もっと時間がほしーいと思います。そんな時間に関して心に刺さる言葉をみつけたので、この場を借りて紹介したいと思います。それは、ジブリ作品『風立ちぬ』における、航空技師カプローニの「創造的人生の持ち時間は10年だ」という台詞です。私はその台詞から、自分自身の気力・体力、職場や家庭の事情、時勢が全てそろって、創造的なことに挑戦できるのは正味10年くらいだというふうに解釈しました。人によってタイミングや期間は違うと思いますが、私にとってはまさに今だと思っています。社会人として働く期間は長いですが、常に仕事に没頭できるかというと違います。もし条件が整っているのであれば、力の限りを尽くすことをおすすめしたいです。

顔照合により、別の写真に写っている同じ顔を見つける

さて、前置きが長くなってしまいました。今回は顔照合(Facial Verification)のお話です。顔照合とは、画像や映像に映っている顔をあらかじめ作成しておいた一覧にある顔と照らし合わせる機能のことを指します。私たちが現在作成中のアプリにこの機能を盛り込む予定ですので、その過程で実験した内容について記載します。

最先端技術の検索

AIには、多岐に渡るタスク領域があります。そして、それぞれのタスク領域において、研究が盛んにおこなわれています。そのため、AIモデルを新たに一から構築するよりも、まずは研究結果を活かすことが得策であると考えています。State-of-the-Art というサイトには、様々なAIのタスク領域についての理論をまとめた論文や、理論に基づいた動作するソースコードが掲載されています。顔照合のタスクに関しても多数の情報の索引がありました。複数の理論と実装が公開されている中で、今回私たちは、同サイトで検索をしてみつけたInsightFace、VGG-Face、Facenet、ArcFaceの四つのAIモデルを比較実験しました。

実験内容

各AIモデルにて、あらかじめ用意しておいた私の写真と、当社の社員旅行の写真242枚で顔照合をおこないその精度を比較しました。なお、242枚のうち私の顔が映っている写真は6枚ありました。

精度を比較するための評価指標には以下四つを用いました。

評価指標 説明
正解率 対象の顔在り/無しと推定したものが正しい割合。
適合率 対象の顔在りと推定したもののうち、正解している割合。誤ることなく照合できたかを測る指標。
再現率 対象の顔が在りの写真全体のうち、顔在りと推定した割合。漏れなく照合できたかを測る指標。
F値 適合率と再現率のバランスを見るための指標。

評価指標については、こちらのサイトがわかりやすく解説しているため興味ある方はご参照ください。

顔照合のサンプル

実験内容のイメージを膨らませてもらうために、顔照合のサンプルをお見せします。

AIに以下のような写真を入力します。すると、AIは以下のように顔を検出します。そしてこの顔が照合元の顔になります。

AIは照合元の顔と、次に挙げるような照合先の写真で検出した顔を比較して、同一の顔である確率をスコアとして出力します。以下の照合結果をみてください。私の顔は一番左なのですが、私の顔のスコア0.63になっていて、他の顔と比較して顕著に高くなっていることがわかります。同一の顔とみなすスコアの閾値をどこに置くかは人間が決めることですが、有意な差であると言えるでしょう。

もう一つ照合結果のサンプルをお見せしましょう。今回は照合先の顔が正面を向いていない場合となっています。私の顔は今回も一番左なのですが、スコアは0.40となっていて横向きの場合であっても有意な結果を得ることができました。個人的には顔が横向きであるにも関わらず、スコアが高く出ることに驚きました。

実験結果

前述の四つのAIモデルを比較した実験結果については、以下のとおりとなりました。なお、今回の実験ではスコアの閾値を0.3と置きました。すなわち、スコアが0.3以上の場合には照合元と照合先の顔が同一であるとAIが判定したとみなして評価指標を算出しました。

InsightFace VGG-Face Facenet ArcFace
正解率 0.987 0.719 0.966 0.917
適合率 1.000 0.084 1.000 0.133
再現率 0.700 0.666 0.111 0.222
F値 0.823 0.150 0.200 0.166
総評 × × ×
コメント 間違いは少ない、漏れはまずまずある。 間違いが多い、漏れはまずまずある。 間違いは少ないが、漏れが多い。 間違いも、漏れも多い。

今回の検証ではInsightFaceがすべての評価指標すべてで最高値となりましたので、四つのAIモデルの中で最も精度が高いと結論付けました。

まとめ

今回のエントリーでは、別の写真に写っている同じ顔を見つける、顔照合の手法について、実験した内容を紹介しました。実験ではInsightFace、VGG-Face、Facenet、ArcFaceの四つのAIモデルの顔照合結果を、正解率、適合率、再現率、F値の四つの評価指標によって計測しました。その結果InsightFaceが最も精度が高いことがわかりました。データが手元にあった社員旅行の写真のみでしたので、汎用的なサービスに組み込んで利用できる程の精度が出せるどうかは引き続き実験して見極めていく必要がありますが、少なくとも手元のデータではInsightFaceが使えそうであるという感触を得られたことが収穫でした。

今回、既存の学習済みAIモデルをサービスに適用する前提でこのような実験をしました。サービス開発という観点でいうと、デリバリーを早めるために、既存のAIモデルを適用するのに越したことはないからです。ただし、適用するAIモデルにおいて、達成したい目的を果たせるほどの精度が出せるかは見極めなければなりません。そして、もし精度が十分に出ないのであれば、転移学習やファインチューニングと呼ばれる手法を適用して精度を高める必要が出てきます。今後、既存のAIモデルを目的を果たせる精度に高めた上で、サービスに組み込むノウハウを蓄積していきたいと考えています。