総合実習レポート(顔認識の基礎)について

概要

必須課題

必須課題では、全ての課題、全ての項目を完成させること

課題A(固有顔による顔認識の基礎)

課題B(標準顔画像との比較による顔認識)

face1.pgmを標準顔画像として、face1.pgmとの距離を基準に顔画像かどうかを判別する方法を考える。

課題C(固有顔による顔認識)

応用課題

応用課題では、以下の順番で、なるべく多くの課題に取り組むことがのぞましい。 余裕が無い場合は、必須課題のみで提出してもよい。

課題D(顔画像と非顔画像の判別)

課題E(表情のある顔)

課題F(画像の前処理による性能向上)

画像を前処理し、コントラストを高くすることによって、顔認識の性能が向上すると期待される。ここでは、convertコマンドで実行可能な以下の三種類の前処理を考える。
  1. モノクローム化: 灰色をなくし、ほぼ純粋な真っ白(輝度値255)と真っ黒(輝度値0)のみの画像に変化させる前処理
    「$ convert -monochrome -compress none face.pgm face-mono.pgm」を実行
  2. 正規化: 画像の最も白い部分を真っ白に、最も黒い部分を真っ黒にするように、輝度値を正規化させる前処理
    「$ convert -normalize -compress none face.pgm face-norm.pgm」を実行
  3. 均等化: 画像の輝度値が0-255の範囲になるべく均等に分布するように、各輝度値を変化させる前処理
    「$ convert -equalize -compress none face.pgm face-equal.pgm」を実行

発展課題

余裕がある場合はできる範囲で取り組むとよい。

課題G(固有顔で判定可能な顔画像の範囲)

今回の固有顔は顔写真から抽出されているが、実際には、顔写真以外の様々な画像も人間は顔と認識する(絵画、コミック、アニメーション、心霊写真等々)。
ここでは、WWWで実際に写真以外の顔画像を収集、調査し、今回利用した固有顔が、顔写真以外のどの程度の範囲で有効かを考察せよ。

課題H(固有顔の選択と識別能力)

配布したデータでは50個の固有顔を利用しているが、顔認識において、50個全てを利用することがベストかどうかは不明である。同程度の認識性能であるならば、データ量および計算速度の観点からいって、個数が少ない方が有利である。
ここでは、利用する固有顔数を変更した時に顔認識問題における性能がどのように変化するかを調査し、固有顔数はどの程度が適切かを考察せよ。
以下にヒントを挙げておく(あくまでヒントなので利用しなくてもよい)。

課題I(独自の固有顔作成と個人顔認証)

多くの人間の顔を利用して固有顔を作成すれば、「一般的な」顔認識が可能である。一方、特定個人の顔のみを利用すれば、「特定個人の」顔認識(顔認証)が可能となるはずである。 以下に、統計処理ソフト「R」を利用して、自分の顔のみによる固有顔データ(U.dat)を生成する手順の例を示す(他の方法を利用してもよい)。
  1. 課題Bや課題Eで利用した自分の顔画像を収集する。必要に応じて追加撮影してもよい。最低でも5枚以上は収集すること。
  2. 各画像ファイルを、冒頭3行のフォーマット情報及びすべての改行を取り除くことで、数値が10000個並び最後に改行しただけの単純なファイルに変換する。例えば次のようなコマンドで実行可能である。
  3. 上記の数値ファイルを一つのファイルにまとめる。以下に3個のファイルをまとめる例を示す。
  4. 統計処理ソフト「R」により(ECCSではRStudioというツール名でインストール済)、以下の手順でU.datを生成する。
    1. 固有顔作成のサンプルプログラムeigenface.Rをfaces.txtのあるフォルダにダウンロードする。
    2. eigenface.Rをmi等のテキストエディタで開き、2行目の「num <- 3」の3をfaces.txtに含まれる画像の枚数に変更する。 例えば、5枚画像を用意した場合は、「num <- 5」と変更する。
    3. RStudio を起動し、faces.txtのあるフォルダ(ディレクトリ)に移動する。フォルダの移動方法は、こちらの検索結果等を参考にするとよい。
    4. Rのコンソール(コマンド入力画面)にて、「source("eigenface.R")」を実行すると、自動でU.datが計算される。計算の概略については、eigenface.R内のコメントを参照のこと。
  5. その後は、今までと同様にeigenfilter.rbを利用して任意の画像を分析可能であるが、eigenfilter.rb冒頭の「eigen_num = 50」の50の部分を「用意した画像数-1」に変更する必要がある。例えば、5枚画像を用意した場合は、「eigen_num = 4」と変更する。
U.datの作成に成功したら、以下の課題に取り組むこと。