顔認識AI技術を活用したレシピの紹介

# はじめに

Axrossを運営している藤原です。

**[Axross](https://axross-recipe.com/recipes)** とは、エンジニアの"教育"と"実務"のギャップに着目し、「学んだが活用できない人を減らしたい」という想いのもと、ソフトバンクと社内起業制度にて立ち上げたサービスです。

現役エンジニアによる実践ノウハウを"レシピ"として教材化し、実際にプログラミングで実装を追体験しながら学ぶことができます。AI/機械学習をテーマにした、様々な業務領域やビジネスの課題解決に応用できる実践的な学習教材を140以上揃えています。（2021年6月時点）
Axross：https://axross-recipe.com
公式Twitter：https://twitter.com/Axross_SBiv
![Axrossアイキャッチ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/9f500e0e-a759-20e2-bb8b-480bbcfaaf9b.png)
今回は、AIによる顔認識の仕組みとその代表的な手法を紹介し、Axrossのサービスで無料で学べる、**顔画像を活用した人気レシピ**をご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/11731d11-8385-4eb8-94f7-3ac4c54a4bc0.png)

# 顔認識AIの仕組み

顔認識AIとは、人間の顔をコンピューター（AI）が認識・認証する機能をもつことです。
顔認識AIの全体的な考え方として、まずカメラが取得した画像や映像から顔を検出します。次に、入力された顔画像のパーツの「目」、「鼻」、「口」の位置や、顔の形「輪郭」等を特徴点として抽出し、「性別」「年齢」「感情（表情）」などを識別します。ここまでが「顔認識」タスクです。

入力された顔画像を、事前に登録された顔画像から構成された顔情報データベースと照合し、一致・不一致を判定して個人を特定することが「顔認証」タスクです。顔認証のタスクは、顔認識タスクより一歩進んだ技術と言えます。

このタスクを、AIのモデルを活用することで、膨大な顔情報から高い精度の認識・認証を実現できます。
![img20200701235039222155.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/1bd492fb-4086-66d9-d2f2-7fd53d5a803b.jpeg)
出典：BK World


## 顔認識AIの活用例
顔認識AIは、セキュリティや監視だけでなく、様々な活用事例があります。
顔認識技術が最も活用されている中国では、既に顔認識技術が国家インフラとして活用され、国民のIDと紐づき、個人認証や出入国管理、行動監視などのセキュリティや、信用スコア化、キャッシュレス決済等に使われています。また、ロボットやドローン、自動車などのハードウェアに顔認証技術が組み込まれ、リモート接客や、無人店舗化、Webマーケティング等の企業が提供するサービスにも応用されています。

日本でも、スマートフォンのロック解除や、空港の出入国審査は身近な例ですが、そのほかにも不審者を特定する防犯カメラやオフィスの入退館システム、商業施設での属性分析によるマーケティング、チケットの不正な転売防止、会員制ジム等の入館パス 等で顔認識技術が活用され始めています。

## 顔認識技術の課題
一方で、顔認識技術を活用する際に課題もあります。

例えば、当たり前の話ですが、顔認識を導入する上でその精度は非常に重要になります。
どんなに顔認識AIアルゴリズムの性能が優れていても、顔画像を検出する際の環境が、日差しが逆光の場所や極端に暗い場所、霧や水滴、埃が多い場所では認識レベルが下がります。また、コロナ禍でマスクの常時着用が基本になっていますが、帽子やメガネ（サングラス）等も顔認識の障壁になり得ます。
このように、顔認識を活用できる環境や条件について工夫・考慮する必要があるのです。

また、顔認識で取得する人の「顔」データは、重要な個人情報です。個人情報保護法でも、顔に関するデータは「個人情報」と定義されており、データの取り扱いには細心の注意を払う必要があります。プライバシーへの配慮はもちろん、顔認識システム導入後のトラブルを防ぐために、「利用目的を本人に通知・公表したうえで運用する」「利用目的を超えたデータの乱用をしない」などの規定を事前に設けておく必要があります。

# 顔認識AIの代表的なモデル
顔認識AIの代表的なモデルについてご紹介します。
## DeepFace
DeepFaceは、Facebookが2015年に論文を公開し、人間と同等の顔認識精度を実現したニューラルネットワークモデルと話題になりました。

DeepFaceは入力した画像内の顔から、顔の傾きを補正し、3Dモデリング技術で正面を向いた顔の画像を作り、これを1億2000万以上のパラメータを持つマルチレイヤーのデータにして深層学習で共通ポイントを解析します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e002b9ed-5b8f-78d7-c80a-19023a769d71.png)

まず最初に、矩形の2次元アラインメントを行います。Support Vector Regressionを用いて、顔の6箇所（両目、鼻、両口角と下唇）の特徴点を検出し、その位置が合うように画像の位置とスケールを調整します。

次に、この特徴点を67点に増やして3次元アラインメントを行います。予め用意した標準的な顔の3Dモデルの対応する基準点に対応させて、特徴点の3次元位置を推定します。

最後に、アラインメントされた画像を **Deep Neural Network (DNN) ** に入力し、得られた顔表現ベクトルをもとに2つの顔矩形を比べて、同一人物かどうかを判定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/a9c68b54-bb6c-67df-8fe7-c7c3cf63e93d.png)

出典：[DeepFace: Closing the Gap to Human-Level Performance in Face Verification](https://www.cs.toronto.edu/~ranzato/publications/taigman_cvpr14.pdf)

Facebookにアップロードされている4030人の440万点の画像や、米GoogleのYouTubeの動画内の顔データを集めたデータベースを利用した実験で、2つの顔画像の識別精度は97.25％を実現しました。身近な体感として、最近Facebookのタグ付け機能やGooglePhotoでの顔識別機能を試すと、同一人物の顔画像分類が高精度で実現できていると思います。

DeepFaceは、大規模な顔データセットの収集が必要な点と、新しく識別対象が追加するたびに再学習が必要な点はハードルが高いですが、非常に高い顔認識精度を誇るモデルです。

## FaceNet
FaceNetは、2015年にGoogleが発表した顔認証用のニューラルネットワークモデルです。顔画像からその特徴量を抽出し、128要素のベクトル表現 **ユークリッド距離** に変換して、その距離が近ければ同一人物、離れていれば異なる人物という判定をします。

FaceNetで使われる **Siamese Network** は、入力された顔画像ベクトルの距離を計算し、その画像間の距離を学習して閾値設定し、２つの顔画像が同一人物かどうかを判断します。このような距離による学習タスクは、距離学習（Metric Learning）と呼ばれ、クラス分類モデルのように膨大な顔データを収集する必要がない点が強みです。また、FaceNetは、画像が1枚であっても顔認識判定が可能できるため、**One Shot Learning** とも呼ばれます。

FaceNetは、**Triplet Loss** と呼ばれる損失関数を採用し、同じIDの画像間のL2距離を最小化し、異なる人物の顔画像間のL2距離を最大化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/bf6ecf52-0312-c26a-e01b-2cc4d24457cd.png)
出典：[FaceNet: A Unified Embedding for Face Recognition and Clustering](https://arxiv.org/pdf/1503.03832.pdf)

## ArcFace
ArcFaceとは、二つの顔画像を入力として角度による距離学習を行い、どれくらい同一人物に近いか距離を出力するニューラルネットワークモデルです。

**深層距離学習（Deep Metric Learning)モデル** と呼ばれ、顔画像同士の類似度を判定することができることから、顔認証や顔検索に利用されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/25d38d10-3601-c971-eb72-614554a7dd9f.png)
出典：[ArcFace: Additive Angular Margin Loss for Deep Face Recognition](https://arxiv.org/abs/1801.07698)

ArcFaceの他にも、SphereFaceやCosFaceといった深層距離学習モデルによる類似手法が次々に公開され、これらは顔認識AIにおける最近のトレンドと言えます。

AxrossのレシピにもArcFaceを実装して類似顔検索アプリケーションを作成するコンテンツがありますので、良かったら学習してみてください。
[Arcfaceを用いた類似顔画像検索アプリケーションの実装レシピ](https://axross-recipe.com/recipes/212)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e5d7bf00-3590-a6d6-e716-3c7eb70b708c.png)


# 顔画像を活用したレシピの紹介

#### [あなたのPCをPepperのような表情認識ロボットにできるレシピ](https://axross-recipe.com/recipes/166)
投稿者：[@benao_python](https://twitter.com/benao_python)さん
Pepperは、機械学習による画像認識で対面の人の表情を分析し、それに応じた会話を行う機能が搭載されています。このレシピでは、pazというロボット開発に使われているオープンソースのライブラリを使って、対面する人の表情を認識して発話するボットを実装する方法を学べます。

PythonとTensorFlowを用いて、人の顔画像を表情の種類でタグ付けしたデータセットであらかじめ学習を行い、カメラの被写体の表情をリアルタイムで分類することで、Pepperの機能を自身のPC上で疑似的に再現します。

https://axross-recipe.com/recipes/166

#### [GPUを使用せずに機械学習モデルで顔画像を分類するレシピ](https://axross-recipe.com/recipes/73)
投稿者：[@su2umaru](https://twitter.com/su2umaru)さん

scikit-learnに同封されているOlivetti faces datasetという顔画像のデータセットを使用し、機械学習のランダムフォレストを使用して画像分類を行います。

GPUを利用せず、PC上で機械学習モデルを構築し、顔画像の自動分類を行う手法を学べます。

https://axross-recipe.com/recipes/73

#### [StyleGAN＋CLIPモデルで、テキストによる顔画像の編集を行うレシピ](https://axross-recipe.com/recipes/168)
投稿者：[@jun40vn](https://twitter.com/jun40vn)さん

このレシピは、顔画像の編集を行うStyleGAN＋CLIPモデルを実装し、ランドマークに合わせた顔画像の切り出し、編集したい画像を生成する潜在変数の推定、テキストによる潜在変数の編集の手法、様々な潜在変数の編集例を学ぶことができます。

StyleGAN＋CLIPのモデルを組み合わせることで、編集したい内容をテキストで指示できる汎用性を持たせ、かつ高速処理が可能になり、顔画像の編集・分析を行う場面で実務活用できます。

https://axross-recipe.com/recipes/168

#### [顔交換（FaceSwap）技術を活用し、人物画像の顔を入れ替えるレシピ](https://axross-recipe.com/recipes/140)
投稿者：[@katkazzzzz](https://twitter.com/katkazzzzz)さん

FaceSwapを活用し、動画や画像から人物の顔の入れ替えを行い、機械学習で自然な合成を実現する手法を学びながら、画像処理におけるオートエンコーダーの仕組みとその効果を体験することができます。

AIを利用して人の顔を差し替える、「ディープフェイク」と呼ばれる、フェイク動画の悪用やいたずらが近年問題視されていますが、その技術そのものは非常に優れた技術であり、使い方によっては私たちの社会に貢献できるものと思います。倫理規定に賛同した上でお試しください。

https://axross-recipe.com/recipes/140

#### [簡単な顔画像認識を機械学習で処理するレシピ](https://axross-recipe.com/recipes/157)
投稿者：@asrさん

顔画像データセットに対して、データの収集⇒データの観察⇒モデルの実装⇒モデルの改善 という流れで、サポートベクタマシン（SVM）を用いたクラス分類モデルの実装を行います。

このレシピでは、Python初心者でも、Google Colaboratoryを使いブラウザ上で、scikit-learn組み込みの顔画像データに対して基本的な機械学習の流れを、それぞれのポイント解説を交えながら体験することができます。

https://axross-recipe.com/recipes/157

# 最後に

今回は、Axrossサービスで無料で学べる、顔画像を活用した人気レシピをご紹介しました。ほかにも有料ではありますが、顔画像を活用した実践的なレシピがたくさんあります。

AIを活用できる人材になるためのコツは、様々なテーマで実際にAIを実装する体験を繰り返すことだと思います。

Axrossのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、新たな知識の習得やスキルアップの一助になれれば幸いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/b48ed75c-2ed0-5598-0ca4-195626c30d70.png)
また、Axrossでは自身のナレッジを学習教材"レシピ"として寄稿いただけるエンジニアの方も募集しています！

見習いエンジニアから募った学びたい内容を[ウィッシュリスト](https://docs.google.com/spreadsheets/d/1HTL3puxFN6GGt6ReOwEbkuRGty82q_IDkjcQ9WSkD8c/edit#gid=175640870)として掲載しています。募集中のテーマからご自身で作成いただけるようでしたら、レシピ作成にご協力お願いいたします。