Path: blob/main/translations/ja/ch-applications/facial-expression-recognition.ipynb
3861 views
量子顔表情認識
顔表情認識(FER)は環境予測、コンテンツ分析、ヘルスケア支援、行動記述などの多くの応用があるヒューマン-コンピューターインタラクションに関連する極めて重要なタスクです。FERは顔画像を怒り、恐怖、驚き、悲しみ、喜びなどを示す表現のカテゴリーと結びつける分類問題です。人間の顔の不均一性、ポーズと背景の多様性のため、この問題をコンピューターモデルを用いて解くことは困難です。FERに対する伝統的なアプローチでは画像の前処理、特徴量抽出、表情分類の3つの大まかなステップを踏みます。ここでは教師ありの表情分類がどのように量子コンピューターで実装できるかをみていきます。最初の予備的なステップである画像の前処理はデータベースのアイテムを生成する古典的なタスクです。一方で、特徴量抽出の段階では前処理済みの画像をグラフにマッピングします。私たちの実装では、分類の段階が量子パートで、ここでは画像分類器を表す量子回路の入力となる量子状態の振幅に特徴がマップされます。
顔認証と分析は強力な道具であるものの、特に偏見やプライバシー、同意をめぐる倫理的な懸念が伴います。これを念頭に置いて、量子表情認識の高速化については未検証であることを考慮し、この研究は低リスクだとみなしています。しかしながら、将来の研究、特に応用ではプライバシーや同意の問題に抵触するかもしれず、同様の評価が必要になります。私たちは自分たちのソフトウェアの潜在的な正と負のインパクトを必ず考慮する必要があります。一方でまた、ソフトウェアを訓練するときは多様性のあるデータベースを使い、差別的な影響を与える人間の偏見を入れることを避けるように責任を持つ必要があります。
私たちのアプローチでは写真のデータセット(以下の数値実験ではFFHQデータセット[2]を使います)の一部を取り出し、その部分集合に含まれるアイテムのラベル付けを行います。 そしてラベル付けされたインスタンスとラベル付けされていないテストインスタンスを量子状態にエンコードします。この量子状態はテストデータのラベルを推測する量子回路の入力として利用されます。グラフ表示におけるユークリッド距離で測った時に最も近いアイテムのラベルが推論されるラベルに対応するため[3]、回路は古典的な機械学習における最近接セントロイド法[5] と似た方法で動作します。下記で述べる量子分類器は [4]の研究を発展させたものになります。後述するように、この回路の最後の測定によって得られた出力はそれぞれのクラスのラベルとラベル付けされていないテストデータとの距離を表現する特定のコスト関数の最小化とみなせます。従って距離測度をカーネルと解釈すると、このモデルはカーネル法による二値分類器とみなすことができます。
距離を計算する処理の(操作やゲートの数の観点からみた)複雑性は量子ビット数に対して線形です。一方で一般的な古典の手法では特徴量の数に対して線形な数の命令を実行します。
依存関係のインポート
タスク
私たちは(人間の)嬉しい表情または悲しい表情のどちらかを含む写真が与えられたときに、その写真と結びつく正しい感情を出力するプログラムを設計しなければなりません。
タスクは以下の段階に分けることができます。
画像の前処理: 68個のランドマークの位置(下記の図中の抽象的な顔の上にこれらの点を確認することができます)を抽出する過程である 顔ランドマークの検出 [1]を実行します。この過程の出力は変形された点の座標の集合になります。

特徴量抽出: これらの点の集合から特徴量のリストを抽出します。特徴量は任意の2つの点の間の距離になります。
分類: 写真と結びついた特徴量の配列をうれしいか悲しいかのどちらかに分類します。
データセットと画像の前処理
このチュートリアルを完了するためには表情の写真の集合が必要です。あなた自身の写真を使うこともできますし、代わりにdatasets/FFHQのフォルダーに付属している写真も使えます。フォルダーには ここから無料でダウンロード可能な.FFHQデータセット[2]から取ってきた写真が入っています。
それぞれの写真のライセンスはCreative Commons BY 2.0、Creative Commons BY-NC 2.0、Public Domain Mark 1.0、 Public Domain CC0 1.0、U.S. Government Worksのいずれかです。これらのライセンスはすべて、非営利目的であれば自由に使用、再配布、翻案することを許可しています。
画像の前処理の操作は顔のランドマーク検出だけで構成されており、古典的に実行されるため私たちの目的とは関係がありません。FFHQデータではすでに一つの写真に対して68のランドマークが含まれています。
datasets/FFHQ/happyと datasets/FFHQ/sad のサブフォルダーの中にはそれぞれxxxxx.pngというファイル名の10個の写真とxxxxx_landmarks.jsonのファイル名のランドマークが入っています。このデータセットについては写真と感情が結びついていないので、後で手動でラベル付けを行います。
データセットを読み込むために以下のコマンドを実行してください。
以下の方法で写真とランドマークを可視化することができます。
うれしい表情:
悲しい表情:
座標の集合から特徴量ベクトルへの変換
顔を表すランドマークの集合は無向重み付きグラフを通してエンコードされます。それぞれのグラフは1つの頂点に1つのランドマーク点が対応し、68の頂点を持ちます。二つの頂点の間の辺は、頂点と結びついている座標間のユークリッド距離でラベル付けされます。グラフに好きなだけ多くの辺を追加することは可能です。辺を追加するほどグラフはより豊富になり(また冗長な可能性もあります)、量子回路へのエンコードのコストもより高くなります。私たちは二つのエンコード手法を提案します。:
完全グラフエンコーディング: 各頂点間に1本の辺があるグラフです。
弦グラフエンコーディング: 弦グラフはドロネー三角形分割アルゴリズムによって作られ、それぞれの頂点は少なくとも2つの辺を持ち、誘導閉路グラフも常に3つの頂点を持ちます。
グラフを作れたので、そのグラフの隣接行列を構築することができます。行列は対称行列で対角成分は0なので、対角成分を除いた上三角成分だけを考えればよいです。
分類器
分類器はベクトル とそれぞれ、うれしいと悲しい表情を表す2つのベクトル を入力として受け取ります。最初にユークリッド距離 、を計算します。これらの距離をもとにして、最も近い方の代表点、つまりテストアイテムからの距離がもう一方よりも小さい代表点にテストアイテムを分類することができます。
このきわめて簡明な分類器は二つの代表点の選び方に大きく依存します。しかし、この後にこの方法が満足のいく結果を与えることを確認します。さらに、この分類器の精度は代表点を変えて classifier 関数を複数回呼び出し、最頻出のラベルにテストインスタンスを分類することによって改善することができます。
距離関数の古典計算
量子分類器を古典の対応物と比較するために、距離を古典的に計算して、推論したラベルを返します。
距離の量子計算: 補助的な関数
配列を操作する二つの補助的な関数を定義すると便利です。
一つ目の関数はデータを格納する量子レジスターとサイズを合わせるために配列に0を付け加えるのに使われます。 量子ビットの量子レジスターはちょうど 個の係数を持ちます。これは個の要素をもつ配列は少なくとも個の量子ビットを必要とすることを意味します。ここで最後の 個の係数は0になります。ある配列と量子ビットの個数が与えられたときに、zero_padding関数は必要な0係数を付け加え、0埋めされた新しい配列を返します。
配列を保持する量子レジスターはノルムが1でなければなりません。normalize メソッドは配列を規格化します。
最後にデータをエンコードする処理が必要です。この目的のためにInitialize ゲートを使います。データをエンコードするユニタリー変換に続いて作用する、量子ビットをに初期化する非線形なReset ゲートを1つの量子ビットに対し1つずつ並べることでInitialize が構成されていたことに注意してください。Initialize は非常に非効率になり得るため、アルゴリズムの速さはこのゲートの効率性に依存します。
量子分類器の回路を実装するためには制御Initialize ゲートが必要になります。 これは(必要な制御量子ビットの数だけをパラメーターとしてもつ)controlメソッドを呼び出すことで自動的に計算することができるでしょう。しかしながら、control は線形回路でのみ動作するので、先頭の Reset ゲートを取り除く方法を見つける必要があります。
現在実現可能な最も簡単な方法は、
Initializeゲートを作る。回路を逆にして
Resetゲートを削除するgates_to_uncomputeメソッドを呼び出す。回路を再度逆にするために
invertメソッドを呼び出す。これによりリセットを含まない初期化が行えます。controlメソッドを呼び出す。
距離の量子計算: 回路
距離関数は以下の回路で計算します。
回路の入力は4つのレジスターで構成されています:
一つ目の単一量子ビットのレジスターは補助レジスターと呼ばれます。
二つ目のレジスターはインデックスレジスターです。
三つ目のレジスター はデータレジスターです。
四つ目のレジスター はクラスレジスターです。

グラフを表現する特徴量ベクトル が与えられたとき、量子状態 を構築することができます。ここで は規格化係数です。
回路による発展は以下のようになります:
回路は の状態から開始します。
最初は補助レジスターとインデックスレジスターが均一な重ね合わせになるように二つのアダマールゲートが作用し、その後の状態はです。
制御初期化ゲートがテストインスタンスに作用したあとの状態はです。
補助量子ビットにXが作用した後の状態はです。データ は今、補助ビットの と結びついており、これによって後でデータと 、 とを干渉させることができます。*
二つの制御レジスターをもつ制御初期化ゲートが一つ目の代表点の状態に作用した後の状態はです。
Xがインデックスレジスターに作用した後の状態は です。データ は今、補助ビットの とインデックスの と結びついています。
二つの制御レジスターをもつ制御初期化ゲートが二つ目の代表点の状態に作用した後の状態は です。データ は今、補助ビットの とインデックスのと結びついています。
インデックスレジスターとクラスレジスターの間のCNOTゲートの後の状態はです。可視化のため、クラスレジスターが二つのラベルを含むことを思い出せるよう を に、 を に対応させます。 この式は以下のように整理できます。 この操作は インデックス をクラス にインデックスをクラスに結びつけます。
最後のアダマールゲート後の状態は です。この操作はデータ を と干渉させ、距離の計算を可能にします。
距離の量子計算: 回路
ここで補助量子ビットを測定し、0状態に射影します。すると回路は の状態になります。対称性から上記の公式を少し修正することで補助量子ビットが1になる結果も同様に考えることができます。
クラスがy_0=0$または と読み出す確率を推定することで間の距離に対する間の距離を推定することができます。これより、
です。計算の確率的性質に起因する誤差を緩和するために、二つの距離の間の境界に小さな許容誤差を導入できます。
データが一度読み込みされると、距離を計算する部分の回路では定数回の操作が行わるため複雑性はになり、一方で、どんな古典的なアルゴリズムもをベクトルの成分数とすると ステップ必要になるということが簡単に分かります。
画像分類
上記の分類器を使ってFER問題([3])を解くことができます。
簡単のために、顔の点の部分集合だけを考慮します。これにより、量子回路にエンコードする情報量を減らせます。特ににっこりした口は幸福感に関係し、むっつりした口は哀感に関係していると仮定すれば口に関係する点だけを考えれば良いです。
分類に考慮される口の点の数をさらに制限したときに精度がどう変わるかを研究することは興味深いです。このために、 繰り返しなしに48以上68以下の個の頂点の部分集合をランダムに生成するpick_mouth_points 関数を定義します。
最後にfaces_classifier メソッドは(load_landmarks)を使ってデータセットから読み込まれた)座標のリストとしての三つの顔happy_instance, sad_instance, test_instance といくつかの構成パラメーターを受け取ります。
is_quantumはquantum_distanceのときtrue、classical_distanceのときfalseis_complete_graphはbuild_complete_graphのときtrue、build_complete_graphのときfalsen_pointsは分類に考慮される口の点を何個ランダムに選ぶかを表し、1以上20以下の整数でなければなりません。
出力は HAPPY または SADの文字列です。
精度を確認するためにデータセットを訓練セットとテストセットに分けます。
最後に精度を計算します。
明らかに量子、古典のどちらの場合も二つの代表点の選び方に精度は大きく依存します。代表点を変えて顔の分類器を複数回呼び出し、最頻出のラベルを割り当てることによってテストインスタンスの分類を行うことで精度は改善するかもしれません。
最後に一つのアイテムに対して複数回分類を実行します。
参考文献
[1] Facial Landmark Detection, https://paperswithcode.com/task/facial-landmark-detection.
[2] A Style-Based Generator Architecture for Generative Adversarial Networks, Tero Karras (NVIDIA), Samuli Laine (NVIDIA), Timo Aila (NVIDIA), http://stylegan.xyz/paper.
[3] Facial Expression Recognition on a Quantum Computer (2021, DOI 10.1007/s42484-020-00035-5), R. Mengoni, M. Incudini, A. Di Pierro.
[4] Implementing a distance-based classifier with a quantum interference circuit (2017, DOI 10.1209/0295-5075/119/60002), M. Schuld, M. Fingerhuth, F. Petruccione.
[5] 最近接セントロイド分類器