固有顔。 Ghosts

Figure #1: Casper the Friendly Ghost (source: https://vignette.wikia.nocookie.net/christmasspecials/images/e/e8/Casper.jpg/revision/latest?cb=20121014033319)

Having more by having less… Easy! この機械学習の方法を使えば、線形代数の基礎知識だけで、より多くの情報をより小さなサイズで保存することができます。 それによって、幽霊のような形状の混乱から人間の顔を復元します。

独立したベクトルは抽象的な方法で空間を作成すると言われたことがあるはずです。 さて、実際に想像してみてください。 すべての空間はベクトルによって形成され、その空間の中の物も同様です。 あるベクトルは他のベクトルよりもあるものに寄与している。 他のものはそれら以外には無視できるほど小さいかもしれないし、私たちは基本的に気にしないし、それらの問題を持ち越したくないので、それらについて知る必要はないのかもしれない。

図2:この空間ではなくこの空間も(出典:https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

我々の主要テーマはPCAであります。 これは、さまざまなテーマで広く使われているアルゴリズムです。 顔に対して使用することで、より人間が解釈しやすくなるため、最も一般的なアプリケーションの1つです。 固有顔とは、顔画像のコレクションから顔の分散を求め、その分散を利用して機械学習的に顔を符号化・復号化する手法で、完全な情報なしで計算量と空間の複雑さを軽減し、顔の認識・検出に有用な方法である。 1991年にTurkとPentlandによって初めて使用され、今日の技術と比較すると限界があるにもかかわらず、その基本は新しい実践のために非常に有益である。

Figure #3: LFW (source: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)

実施に移る前に、述べた基本概念について少し紹介したいと思います。 また、私が使用した完全なスクリプトとデータセット (LFW_cropped のごく一部) はこちらでご覧になれます。

固有ベクトルと固有値

固有ベクトルと固有値が厳密にどう働くかは、誰もが知っていることでしょう。 正確ではないかもしれませんが、何度も聞いたことがあるはずです。 ここでは、私のような少数派で忘れ続けている人のために説明します。

正方形のA行列があるとします。 ほぼすべてのベクトルは予想通りAを掛けると向きを変えます。 しかし、Axと全く同じ方向を持つある種のベクトルxが存在します。 そこで・・・何だと思いますか? それが固有ベクトルです 特殊なもの・・・たとえ同じ方向であっても、Axとxはその大きさによって2つの異なるベクトルである可能性があるのです。 ここで、身近な等式を紹介します。 Ax=λxです。 この2つを等しくしているのが、大きさを等しくするスカラー、固有値のλです。 これは、掛け算の後に固有ベクトルがどのように変化したかを教えてくれます

以上から、なぜこれらが実際に役に立つのかがわかりますね。 より深く理解し、理解するためには、MIT の固有値と固有ベクトルの章を参照してください。

主成分分析 (PCA)

PCAの主目的は次元の縮小です。 可視化、特徴抽出、データ圧縮など多くの応用があります。 その背後にある考え方は、主成分(固有ベクトル)が投影データの最大分散、または投影による最小歪み誤差を提供する低次元部分空間へ、元データを線形に投影することです。 最終的には、どちらも同じ結果、つまり最適な再構成式を導く。 余談ですが、この部分空間は主部分空間と呼ばれています。

分散の最大化と歪み誤差の最小化の計算については、ANUのPCAについての講義ノートを参照してください。 また、YoutubeのPrincipal Components Analysis -Georgia Tech-Machine Learningという動画も、概念の理解に役立ちました。

実装

Ok! 皆さん、実装の準備ができました。 まず、必要なライブラリをインポートします。 皆さんは、それらが何のためにあるのか知っていると思います。 アルゴリズムの説明部分を中心に説明します。

次に、データセットから画像を見栄えよく視覚化するための関数が必要です。

これをデータセット lfwcrop_grey.zip に適用してみましょう。 ここでは計算量の関係で、顔の最初の1000個だけを取り出していますが、これは本当に重要ではありません。 でも、そんなことはどうでもいいんです。 また、画像をnumpyの配列(1000, 64, 64の形)に変換して処理しました。

Leave a Reply