メモ
12/16(火) 午後から先生不在
12/17(水) 3年生4年生ゼミお休み
12/26(金) 4年生中間発表予定
日記
- 渡部研究室4年生向け
- wataken.hが少し更新されました.
mat A;
に対し,いままでの
ofstream ofs("hogehoge.txt");
ofs << A;
ifstream ifs("hogehoge.txt");
ifs >> A;
のようなitppのマトリクスの形式のファイルの入出力(itppの表示)だけでなく
ofstream ofs("hogehoge.csv");
ofs < A;
ifstream ifs("hogehoge.csv");
ifs > A;
のようなcsv ファイルの入出力(出力部Tさん)の他
stringstream ss("test.bmp");
ss >> A;
(Aの行と列が指定してあればそのサイズにリサイズ)とか,
vec v;
ss >> v;
なんてことができるようになります. また,
stringstream ss("out.bmp");
ss << A;
なんてのもできます. ちなみに, cygwin上でのコンパイルは
g++ filename.cpp -o filename `pkg-config itpp opencv --cflags --libs`
か,
cvcc filename.cpp
です. VS上では, "全部"プロジェクトで自動的に読まれます.
先日書いたcygwin上でのmpiですが, mpd.hostsを書いて
mpdboot -n 8 --rsh=rsh
とかやって, mpdを起動してから
mpiexec -n 32 //bernoulli5/mpi/hogehoge/hogehoge.exe
とかやればOKです.
- 連絡(渡部研究室4年生向け):
- n1からn8のデスクトップはbernoulliに移動しました。
- n1からn8はしばらく利用できなくなりましたので、ご了承ください。(明日には動くはずです。)
- 17:00 n1からn8は復帰しました。
- 変更内容:
- n1からn8までイメージが統一されています。各自の作業内容はネットワークフォルダにあげるようにしましょう。
- cygwinでもmpiが投げられるようになりました。mac同様, cvcc, mpicvccなどのスクリプトが使えます。
- 以下のウィザード:(vs2005とvs2008用)itpp, opencv, mpi+全部(前のほか,icainfomax,jadeを含む)を用意しましたので、ソリューションはビルドしなおしてくださいませ。
- Matlabがすべてに入っています。
- Kernel PCA
- Kernel PCAって, このKの部分を特異値分解すればいいんですよね。それから、どうやって特徴ベクトルを求めればいいんですか。
- ここに書いてありますね(Scholkopf Smola Muller)。K(x_i,x)を計算して、固有ベクトルと内積をとります。
- あれ、Kと固有ベクトル掛け算しているわけだからこれでいいんだよなあ。
- パラメータを調整すると精度が変わるんじゃないでしょうか。
- 調べてみます。(しばらくして) 80%位行くようななりました。でも、LDAに比べるとまだ見劣りしますね。
- (翌日) Kを計算するときに平均を引きましたか?
- 入力画像は平均ゼロにしましたが。
- カーネルで移したあとのデータです。
- カーネルで移したほうも平均引くんですか。それは引いてないです。
- そうそう、このKをつかって計算できるんです。ij成分について、i行の平均とj行の平均を引いて, 全平均をさらに枚数で割ったものを加えます。
- こんな感じですか。
- そうですね。
- (実行してみて)パラメータやはり調整しなおしのようです。
- そうかも知れませんね。
- (しばらくして)すごいデータです。こんなにいいの見たことありません。組み合わせによっては100%出ることもあります。
- え?バグじゃないんですか?(確認後)あら、本当だ。すごいですね。でも、交差検証時の組み合わせによる差が少しありますね。(平均をとれば95%くらいかな?)組み合わせごとに最適なパラメータが少し違うのでしょうか。
- もう少しいろいろな組み合わせを試してみます。
- 楽しみですね。期待してます。
- ICA
- そろそろICAに移ろうとおもうのですが、プログラムに入る前に座学をやりたいです。
- わかりました。まず、ICAで音を分離するデモって見たことありますか?
- いえないです。
- (カクテルパーティー効果のウェブサイトを見ながら) こんな風に混ざった音が(クリックして)分離されて出てくる。
- へー
- 入力信号だけから、それが互いに独立な信号の重ね合わせとして書かれていることを仮定し、互いに独立な信号と、
その重ね合わせかたとを教えてくれる。これが、ICAがやっていることです。
- ふーん。
- 画像に独立成分分析を適用するにあたって、2つのことを理解できるとよいんです。まずはじめに、独立な信号に分離するところ、それからそれを画像に利用する際の表現方法です。
- 独立な信号の分離方法には、Fast ICAとかInfomax ICAなんていうのがあるのですが、とりあえず、Fast ICAからやりましょう。そこでは4次のキュムラントというのを大きくする方法を考えるのですが、少し準備がいるので、まず準備からはじめます。
- わかりました。
- モーメントっていうのがあってね。x^lに確率p(x)を掛け算して積分したものです。l=0なら全積分だから1ですね。
- はい。
- l=1なら期待値です。
- こういうのを一挙に計算できる方法として, e^{zx}に確率p(x)を掛けたものを積分したものを考えます。e^{zx}はテイラー展開するとこんな風になるから、いろいろなモーメントが出てきます。
- 例えば、1回微分してz=0とすると,1次のモーメントm_1が,2回微分してz=2とすると, 2次のモーメントm_2が出てきます。(式をみながら説明。)
- なるほど。
- これをモーメント母関数といいます。対数を考えます。k回微分してz=0としたものをk次のキュムラントといいます。
- はあ。
- 例で見てみましょう。関数の対数は微分すると関数の微分を関数で割った形ですのでこうなります。(式をみながら)モーメント母関数の方はz=0で、eの0乗は1だからp(x)の積分になって1, 微分の方はxだけ出てきてx p(x)の積分ですからm_1になる。
- なるほど。
- 同様にしてm_2,m_3,m_4を計算するとこんな風になります。
- ここで, 平均ゼロつまりm_1=0を仮定すると、k_1=m_1,k_2=m_2,k_3=m_3,k_4=m_4-3m_2^2となって4次で初めて、モーメントとキュムラントが別になるんです。
- あ、そうですね。m_1がぜろならこうなりますね。
- この4次のキュムラントを利用して独立成分を求めます。先に行く前に少し説明しますと、実は4次のキュムラントっていうのは正規分布ではゼロなんです。正規分布からどのくらい外れているかがこれで調べられるんです。
- 4次のキュムラントにとって大切なのはこの関係式です。2つの独立変数x_1とx_2の一次結合y=ax_1+bx_2の4次キュムラントがk(y)=a^4k(x_1)+b^4k(x_2)となるということです。これは、独立な確率変数の積の期待値は期待値の積の形になっていることなどを使って計算で確認できます。
- そうなんですか。
- そこで、例えば、y=ax_1+bx_2見たいな形であったとしましょう。このとき、ベクトル(a,b)を長さが1の範囲で、キュムラントが最大になるようなところを探すことにしましょう。
- はい.
- (a,b)の長さが1なんだから(sinθ,cosθ)とおいていいでしょう。このとき, k(y)= sin^4θk(x_1)+cos^4θk(x_2)という形になります。ところでcos^4θ+sin^4θ≦1ですから、k(x_1)≧k(x_2)を仮定すれば(そうでない場合,x_1とx_2の記号を付け替えることにして) kはsin^2θ=1のところで最大になります。
- そうですね。
- このとき、y=x_1でyは独立成分となります。この原理をつかって独立成分を求めるんです。入力信号の1次結合を考えてあげて、それを極大にする結合係数の組み合わせから、独立成分に分離する方法と独立成分を求めようということなんです。
- ああなるほどね。
- 入力信号を単位ベクトルwに射影したものの4次キュムラントを求め、wが単位ベクトルであるという条件の下で、キュムラントが極大になるところを探します。具体的には、ラグランジュの未定乗数法を利用して求めます。
- はあ。wで微分すると4が出てきて、|w|^2wとなっていますが、ここまとめないのは何故ですか?
- これは、ベクトルの微分で、こんな意味です。(式を書いて説明)
- なるほど分かりました。
- これが最終的な更新式になります。右辺を計算して左辺wを求める。求まったwを正規化し、右辺に代入して再び左辺を求める。こういった作業を繰り返します。
- なるほどね。独立成分が固有顔みたいになるんですか?
- 画像表現についてこれから説明しますね。画像の場合は、画素数の方が枚数より一般に多いので、音声信号みたいなものとは少し扱いが異なります。その画像の表現方法には有名なものが2通りありましてね。Architecuture 1局所表現とArchitecture2 積表現と呼ばれるのがあります。ここに、学会発表用に簡潔にまとめたのがあるのでそれを見ながらやりましょうか。
- はい。
- まず、画像を横に並べたものをXとしてX=CPと分解します。Cは展開係数、Pは固有顔です。
- わかります。
- Architecture 1はPを独立成分分析しP=MUと分解します。ここでMは混合行列、Uは独立成分です。このPを上の式に代入すると, X=CMUとなります。この表現では、CMが展開係数で、Uが基底になります。基底画像が特徴的なところに極大点が見えるのが分かりますね。この基底は珠間切痕にインパクトがあるし、これは体耳輪にインパクトがありますね。
- そうですね。
- 顔の場合だと、目とか鼻とか口とかが出たりします。そういった意味で表情の識別なんかに良いという論文があります。まあ、耳には表情はありませんが。耳の場合はどうでしょうか。
- なるほど。
- もう一つは、Architecture 2でまず、X=CPを転置してX^t=P^tC^tにする。転置すると積は順番が変わります。
- そうでしたね。
- そこで独立成分分析で、C^t=MUと分解します。C^tを代入すると X^t=P^t MUとなります。
- はい。
- そこで、両辺を再度転置すると、X=U^t M^t Pとなります。ここでは、展開係数はU^tでM^tPが基底画像です。基底画像がもっと耳っぽく見えまよね。
- そうですね。どれも本当に耳っぽい。
- 顔認証ではArchitecture 2の方が認証には良いという論文があります。耳ではどうかというと、やはりこんな風にいいですね。ただ、マハラノビスではあまり大差があるように思えませんが。
- そうですね。
- 次に、実際にコードを作ってみていきましょうか。ただ疲れたので少し休憩しましょう。
- ゼミ
- (3年生) 先生、ゼミこのペースで全部(EigenFaces for recognition)論文読み終わるかしら。これ先輩就活で聞かれたんですよね。
- そうですってね。読んでる論文を聞れたので答えたら、担当者の人も知っていたていうやつですね。でも、消化不良になっても仕方ないしね。出来る範囲でがんばりましょう。ところでC言語のゼミ始めたほうがいいですか?
- はい。お願いします。
- 時間が取れるかどうか分かりませんが工夫しましょう。
- はい。
- Wiki
- 登場しましたね。
- はい。
- どうでしょうか。
- これ読んで、検出やってみようかなっていう気になりました。
- 検出は難しいけど、いいと思いますよ。
- はい。
total:20270 today:33
現在閲覧者数:3
|