線形代数と美女画像
こんにちは。昼のoscillographです。
このところ画像認識を勉強しているのですが、とても楽しいのでどんなことやっているのか紹介したいと思います。
最近線形代数の勉強を始めたけれどモチベーションが上がらない人とかおすすめです。
自分はそこまで数学とかできないのですが、ぜひ数学できるとこんな楽しいことができる!というのは知ってほしいです。
ベクトルの基礎と画像認識の橋渡しをしてから、美女空間の設計とその応用について考えていきます。
画像はベクトルだ…!
画像認識の分野では画像をベクトルとして扱うのが一般的です。
画像はピクセルの集まりなのでそのピクセルに入っている数値を並べてひとまとめにしてしまえば、ベクトルとして扱えます。
ベクトルとして抽象化された画像は、線形代数で用いる様々な演算を適用することができます。
ベクトルの平均
画像認識(データ分析)的には、ベクトルの平均をとるというのはそのデータ群の代表的な特徴を表現するということになります。
例えば、私の好きな女優(※後述)の画像を100枚集めて平均を取ると以下のような感じになります。
ベクトルの射影
3次元空間のある平面を考えてみます。
このときある平面に1本のベクトルを射影するということは、その平面の成分を抽出(もしくは平面の成分を除去)するということです。
詳しく説明すると、以下のようになります。
このx,y,zで張られる空間が人の顔画像を表す空間として(3画素の画像を考えてみてください)
P:佐々木君の顔画像
A:日本人の顔が多く分布している空間(日本人顔画像空間)
などどしたとき、
P':佐々木君の日本人成分
| P'-P |:佐々木君の日本人じゃない度合
などと解釈できます。
この例では3次元で考えていますが、この考えは多次元に拡張することができます。
つまり、ある画像を○○な画像空間に射影することによって○○な成分を取り出すことができるというものです。
美女空間の設計
ということで、美女空間を設計してみましょう。
つまりどんなにヤバい顔画像を射影しても美人な画像ができる魔法のような画像空間です。
今回は主成分分析(PCA)という方法を使って、空間を設計してみようと思います。
いくつかの(正規)直交ベクトルによる部分空間による美女空間です。
さて、美女画像空間を作成するために美女画像を集めます。
今回は(私が好きな)
広末涼子、能年玲奈、新垣結衣、麻生久美子、道重さゆみ
の5名の画像を各20枚ずつ、計100枚ネット上から収集してきました。
それらの画像に対してOpenCVというライブラリを用いて顔領域を抽出し、PCAにかけて作成した空間が以下のようなものです。
これらの画像はまさしく直交しています。つまり画像同士の内積は0になります。
本当に美女になるのか
さてここで作成した美女空間に人の画像を射影してみます。
今回は、なかやまきんに君さんと山崎邦正(月亭方正)さんの画像を使わせていただきました。
なんか美人になっている!?
というか別人な気もします。
ということで画像を重ねて徐々に透過させていくと…
なるほど、似てるっちゃ似てます。
美人な人ほど、変化は少ない訳ですので、差が大きかったということでしょうか。
結論
まあ、美人空間は作れたといっていいのではないでしょうか。
とりあえず、数学やっとくとこんな楽しいことができるということを伝えたかったです。
画像系は楽しいですね!