LBPで特徴ベクトルを作成

あらためて、WikipediaのLocal Binary Patternのページを読むと
http://en.wikipedia.org/wiki/Local_binary_patterns

Local Binary Patternは、エンボス加工ぽい、画像を作るためじゃなくて、the feature vector まで、作成するためのものだった。
画像を int[8]のデーター量(サンプル数8の場合) まで、特徴量を絞り込めるようだ。

今日は、そのデーターで顔検出を試したい。

LBPの実験

昨日したこと
Local binary patternsを実験した。

GPLのLBPの実装
https://github.com/tjrantal/RegionGrow/blob/master/src/LBP.java

使ってみるとなんとなく、LBPがわかった。
255のgrayscaleから、0-9の値になったのが大きくて、機械学習がはかどった。

GPLのコードは混ぜれないので、自分で作り直すことになった。
そのため、サンプルとネイバーは8,1の固定になった。

ライセンスの確認は最初に絶対にやっておかないといけないと、つくづく思った。危うくコミットしてしまうところだった。

昨日したこと
ようやく、コンピュータービジョンライブラリーのccv.jsのC言語部分のビルドにMacで成功した。
lib/configure の後にできる、bin/makeをすればよかった。
これでようやく、精度が高いと噂のBBF: Brightness Binary Featureを試せそう。
http://libccv.org/doc/doc-bbf/

あとは、相変わらず機械学習のJSをいじっていた。
でも精度がまったく上がらない。

今日は、LBP detect Local Binary Patternをやってみようと思う。

昨日したこと
OpenCVでの画像サイズを大きくした場合のテスト - 結果的には、検出率以上に誤検出が増えた。
画像サイズを大きくするとトレーニングに物凄く時間がかかるようになるので、費用対効果は薄い

あとは、レクトを正しく検出できたかの判定で、かするだけのことが多かったが、レクトの1/4を含むように義務付けたら、改善された。

念願のJavaScript版の機械学習を試すことができた。ただ、物凄く遅いので、正しく動いてるのかどうかわからない。
思うこと
他にもjsfeatやclmtrackrなどJavaScriptライブラリー沢山あるな。見切りを早めにつけて、いろいろ試したい。

今日すること
機械学習のページでもまとめよう。

昨日したこと
OpenCVで画像サイズを24から32,40と変更したものを試したが、思ったほど精度があがらなかった。
たしかに、検出数は増えたが、誤検出も増えたので、stage上げたりNegを増やさないといけない。


ようやくOpenCVのトレーニング中のNeg Countにやたら時間かかる理由が納得できた。(推定)
BGは指定した画像中からランダムで、指定数だけ切り抜くわけだが、それまでのステージをテストして誤検出されないといけない。
ステージが進むにつれて、精度があがり、これまで100を切り抜いたら1つは見つかった誤検出されるNeg画像が、10000とかに1つとかになる。
完成したcascadeを動かしたら、画像を1枚走査しても、誤検出0だったりするものね。

stageを上げ過ぎるといつか止まるのはこれも原因だろう。
逆に、誤検出限りなく0に近づけたいなら、検出率も下がるが、実質止まるまで、stageやfalseAlarm下げるといいかもね。

今日すること
OpenCVをもう少し
JavaScript版の機械学習を試す

過去
またまたOpenCVで検出のテストをしていました。
検出結果を評価できるようになったので、少し試した。

横反転は画像量2倍になる。認識率は10%ほどよくなった。
角度を左右に30度のものを作成。認識率は5%ほどよくなった。(誤検出増えた)

背景によって、ご検出率が大きく変わることががわかった。
しかし、テストと同じ背景使ってもそれほど優れない。

背景(BG/NG)は、画像数だと思っていたが、ただの切り取回数のようだ。
ランダムで、適当な部分を切り取るようだ。
極端な話ngリストには、写真1つでもいい。

現在
どれだけサンプル増やそうが、ある程度からは、検出率増えても、誤検出を抑えられない気がしてきた。
1000の後は、2000で試して、次の3000画像集めるか考えてもいいだろう。
質が要求される気がしてきた。

未来
もう少し、OpenCV いろいろ試してみたい。