AI vs 人間!顔認識技術の限界にチャレンジしてみた

f:id:karaage:20210320222529j:plain:w640

古くて新しい顔検出技術

 顔認識技術は、顔の位置を検出する技術です。デジタルカメラやスマートフォンのカメラ機能などでおなじみの、顔に四角い枠が出てピントが合うやつです。有名ですよね。

 より正確には顔の位置を示すのが「顔検出」で、誰の顔かを見分けるのは「顔識別」「顔判別」「顔認証」と区別されます。今回の記事では、便宜上一般的に馴染みのある「顔認識」=「顔検出」という定義で説明いたします(専門家の方、石投げるのはご勘弁を)。

 顔認識技術は、興味ある人も多いようで、当ブログで過去に顔認識技術を扱った記事も、古いわりに今だに人気のある記事になります。

 拙作の 「からあげ先生のとにかく楽しいAI自作教室」でも、顔認識技術は少し扱っているのですが、書籍の主題から外れるので、詳細は割愛しておりました。書籍の補足的な位置付けもこめて、今回は顔認識技術に関して、楽しみながらより深く理解できる記事として、顔認識技術の限界にチャレンジする実験をしてみたいと思います!

 なお、私は顔出しはNGのため、おなじみ超有名ブロガー、変デジ研究所のろんすたさんのフリー素材を使用させていただきました。感謝です!

 ちなみに、今回の記事、少し大袈裟なタイトルをつけてしまいましたが、エンタメよりの気軽に楽しむ記事なので、気軽に読んでいただけたら助かります。また、書籍やドキュメントなど調査しながら書きましたが、顔認識技術に関して私の理解が間違っているところあるかもしれません。もし間違い見つけたら、そっと教えてもらえると嬉しいです。

顔認識技術の歴史 〜ハールライク特徴量からディープラーニングへ〜

 顔認識技術は、その実用性の高さから、画像処理の歴史の中でもかなり古いものになり1970年代までさかのぼります。顔認識技術のベースとなる、初期のコンピュータを用いた顔に対する画像処理の研究で有名なものの1つに日本人の金出武夫先生(カーネギーメロン大学)の京都大学時代の研究「Picture Processing System by Computer Complex and Recognition of Human Faces」(論文がネットで読めます)があります。本人の著書「素人発想、玄人実行」の法則 によると世界初のコンピュータを用いた顔の認識技術として、アメリカの科学財団のレポートに認定されたらしいです。当時の今とは比べ物にならないくらい低いコンピュータの計算能力で、よく顔認識が実現できたものだと思います。

 その後、さまざまな技術の進展があり、現在でもよく使われる顔認識手法は、機械学習・ディープラーニング(AI)を使ったものが中心となっています。人工知能、機械学習、ディープラーニングの関係は、以前書いた以下記事を参照ください。

 上記記事でも記載した、以下の図の2番目と3番目の手法ですね。

f:id:karaage:20170625212919j:plain:w640

 機械学習の手法(図の2番目)では、昔の賢い人が設計したさまざま特徴量(LBP, HOG)などがあるのですが、顔認識に使う特徴量としてはハールライク(Haar-like)特徴量が有名です。ハールライク特徴量は、画像の明暗差を特徴として抽出するもので、具体的には以下のようなパターンを用いて明暗差を抽出します。

f:id:karaage:20210318124317p:plain 第3回 オブジェクト検出してみよう:OpenCVで学ぶ画像認識|gihyo.jp … 技術評論社より引用

 人間の顔は、目の周りや鼻に上のパターンに合致するような明暗差があり、特徴として抽出しやすいため、ハールライク特徴量がよく使われるようです。そう考えると、上のパターンを組み合わせると人の顔に見えてきませんか?

f:id:karaage:20210318124937p:plain:w200
「やあこんにちは、僕ハールライク太郎だよ」(多分、こういうことではない)

 もちろん、顔認識技術はこれだけでは実現できません。特徴を抽出するには、さまざまなパターンを考慮する必要があるのですが、その計算時間を削減するための工夫が必要です。また、特徴抽出した後の分類器の学習も必要となります。これらのさまざまな技術的な工夫をして初めて、顔認識技術を実現することができます。詳しくは、以下サイトなどを参照ください。

Haar Cascadesを使った顔検出 — OpenCV-Python Tutorials 1 documentation

第3回 オブジェクト検出してみよう:OpenCVで学ぶ画像認識|gihyo.jp … 技術評論社

 このようなハールライクを使った方法に対して、最近性能の高さからよく使われるようになってきたのが、ディープラーニングを使った手法です。ディープラーニングに関しての説明はこの記事では省略します。このブログの他の記事でも取り扱っていますので、よければ見てみてください。

 まとめると、現在主要に使われる顔認識の手法は以下の2つがあります。

  • ハールライク(haar-like)特徴量を用いた手法
  • ディープラーニングを用いた手法    ネットで調べてパッと出てくる手法は、大体上記のうちどちらかに当てはまると思います。

 デジカメやスマートフォンに用いられている顔認識技術は、詳細公開されていないものがほとんどですが、恐らく上記の2つをベースに改良を加えたもの・組み合わせたものになると思います。 

顔認識の限界に挑む!

 顔認識技術の概略が分かったので、いよいよ顔認識技術の限界に挑んでいきましょう!

 顔認識技術は、今はプログラミング言語Pythonでライブラリを使うことで簡単に使用することができます。Google Colaboratory(Google Colab)というGoogle提供の無料のWebサービスを利用すると、ブラウザだけあれば、Pythonでの顔認識技術を自分で実践することができます。Google Colabの使い方に関しては、以下記事参照ください。

 今回顔認識を実現するためのコードを載せたGoogle Colabのノートブックは以下です。実際にプログラムを動かすためのコードを知りたい人は参考にしてみてください。

顔認識のGoogle Colabノートブック

 とりあえず試したい人は、Google Chromeブラウザでノートブックを開いて、順に実行していけばプログラムを動かすことができます。このブログでは、上記コードで実践した結果を紹介していきたいと思います。

ハールライク特徴量を使用した顔認識

 まずは、ハールライク特徴量を使用した顔認識です。今回は、認識した結果のみを載せていきます。認識(検出)した箇所に、白い枠線(Bounding Box)を載せています。白い枠線が顔の位置に無い・もしくは枠線が表示されなければ、認識できなかったと理解してください。

 ライブラリはOpenCVという有名な画像処理ライブラリを使用します。

 まずは、とっても綺麗な顔から。

f:id:karaage:20210319123726p:plain
 問題なく認識できていますね。といいたいところですが、首のあたりに、小さい顔があると誤検出しています。ちょっとホラーですね(笑)

 続いて、横顔です。

f:id:karaage:20210319123738p:plain
 位置がずれてしまっています。OpenCVの顔認識は、正面の顔しか学習させていないようなので、正面の顔以外は基本的に認識できません

 続いて、顔の前に障害物があり、斜めを向いているケースです。

f:id:karaage:20210319123752p:plain
 何故か舌を認識してしまいました。よく見ると、舌にうっすら人の顔が…ないですね

 恐らく、斜めの顔を学習させてないだけと思われるので、角度を回転させてみました

f:id:karaage:20210319123803p:plain
 少し位置ずれていますが、認識しましたね。顔認識の想定以上の顔の長さだったようです。

 続いてメガネをかけているケースです。

f:id:karaage:20210319123817p:plain
 うまく認識できませんでした

 続いて、意地悪したケースです。ハールライク特徴量で認識する仕組みを逆手にとって、ハールライク特徴量のパターンを顔に載せてみます。

 本当は実際に顔にマジックで塗りたかったのですが、今のご時世ということで、iPadで写真の上から重ね塗りすることで実現しました。

f:id:karaage:20210319123833p:plain
 認識できません

 実はこのような試みはComputer Vision Dazzle Camouflageという顔認識を騙すためのファッションを作るプロジェクトで、過去に実際に実践されているそうです。

 面白いですね。

ディープラーニングを使用した顔認識

 続いて、ディープラーニングによる顔認識技術です。ライブラリは、face_recognitionを使います。手軽に使えるシンプルなライブラリです。

参考:プログラミングで顔を見分ける | Playgram

 先ほどと同じ画像で試していきます。今回は結果だけ一気に載せます。

f:id:karaage:20210319123911p:plain

f:id:karaage:20210319123934p:plain

f:id:karaage:20210319123947p:plain

f:id:karaage:20210319123959p:plain

f:id:karaage:20210319124012p:plain

f:id:karaage:20210319124022p:plain

 ハールライク特徴量のときに見られた、誤検出は無くなりました。メガネをかけた顔も問題なく認識されています。

 ただ、横顔に加えて、意外にもハールライク特徴量メイクをした顔は認識できませんでした。ディープラーニングの中身はブラックボックスなので、原因の分析は難しのですが、これはひょっとしたらディープラーニングが学習により自動設計した特徴量が、ハールライク特徴量に近いものだったことを意味しているのかもしれません。

 「AIが将棋・囲碁で学習により自分で定石を再発見した」という話もあるので、ありえない話ではないのかもしれません。

iPhoneの最新の顔認識技術に挑戦

 ここで終わろうと思っていたのですが、ふとiPhoneのカメラにも顔認識技術が搭載されていることを思い出しました。iPhoneなら、最新のAI技術が搭載されていそうですね。ということで、iPhoneでも試してみることにしました。ところが、この思いつきが恐ろしい結果になるとは、このときは夢にも思いませんでした。

 まずは、先ほどと同じように認識をさせます。iPhoneの場合は、PCのディスプレイに映した画像をiPhoneのカメラで実際に写すことで確認しました。

f:id:karaage:20210316000631j:plain

f:id:karaage:20210316000617j:plain

f:id:karaage:20210316000622j:plain

f:id:karaage:20210319131042p:plain

 なんということでしょう!メガネはもちろん、今まで全く検出できなかった横顔・斜めの顔・ハールライク特徴量メイクをした顔、全てで正確に顔認識できています。iPhoneの顔認識性能恐るべし…

 ここから、AI vs 人間の頂上決戦(?)が始まります。

f:id:karaage:20210315234934j:plain
 これでもダメ…

 もうヤケだ…これならどうだ!

f:id:karaage:20210320145038p:plain
 …認識しない!?

 勝った…!将棋・囲碁でも敗北を喫した人間が、ついに顔認識でAIに勝利(?)しました!

 最新のiPhoneの顔認識技術でも認識しないメイクを施した人間。それがこれだっ!

f:id:karaage:20210316001816j:plain
 ニン…ゲン…??

まとめと宣伝

 最新の顔認識技術の限界へチャレンジしてみたという記事でした。是非お手持ちのカメラで顔認識できるか試してみてください。ひょっとしたら、カメラの機種や撮影方法によっては認識できたりするかもしれませんし、今後ソフトのアップデートで認識できるようになるかもしれません。

 AIというと、なんか難しそうでよくわからないという印象がありますが、実際このように身近に使われている技術です。理屈を理解して、自分で実際に実践して遊んでみるとこの記事のような思わぬ発見があるかもしれません。

 この記事でAIに興味を持った方、自分も実際に動かして色々試してみたい・遊んでみたいと思った方には、拙作「人気ブロガーからあげ先生のとにかく楽しいAI自作教室」がおすすめです(宣伝です)。

 この記事のように、PCのブラウザさえあれば、実際に動かして楽しみながらAIを学べます。よろしければ是非!

関連記事