今更バイリニア補間法

HTML5でWebWorkerの中では、キャンバスが使えない。
なので、ImageDataのデーターをもらっても、自分でリサイズしないといけない。
なので、バイリニア補間法でリサイズすることにした。
http://tech-algorithm.com/articles/bilinear-image-scaling/ に載ってた、教科書道理のコードを参考にした。

でもやはり、遅い。コメントに載ってた、高速版は、実装に失敗した。
他にも調べると、いろいろ高画質で速いという、リサイズのスクリプトあったけど、どれもコードが長いので試さなかった。

Githubのいいプロジェクトの見つけ方

昨今のGithubの普及を考えると、スターの数は社員数と同等になってもおかしくないので、
単純に、スターが多いから、広く使われていると思ったら大間違いだな。

となると、一番信頼できるのは、自分がすでに使ってるProjectを運用している人のスター。
いいプロジェクトを見逃さないためにも、積極的にいい人はフォローしていこう

昨日したこと
JSZipを使っていて挙動不振な点があり、調べた所、いくつかわかった。詳しくは以下にまとめた。
http://www.akjava.com/jp/html5/blob.html

概要を書くと、500MB超えるBlobは作成した瞬間に壊れる。
https://code.google.com/p/chromium/issues/detail?id=375297

ダウンロードに使う、Blobはグローバルに置かないとガーベージコレクションで即回収される。(容量小さいと、見逃されてるだけで、いずれ消える)

昨日したこと
Chromeの64bitを試した。Webアプリのメモリ使用が4GB超えても落ちないと思ったがそうでもなかった。GWTプラグインが未対応なのでアンインストールした。

GWTでいろいろテスト
ImageElementと文字列をキャッシュする場合、なぜかImageElementの方が2倍ほど容量を使う。ChromeはdataUrlからImage作成するとき、読み込みを待たなくていいので、これからは文字列のまま保存しよう。
JSZipを試したが、どうも200MB前後から、ガーベージコレクションでダウンロードリンクが数秒以内に消えてしまう。javascriptのグローバルに置いてもblobは残っても中身が消える。
もう少し試そう。あと、400MBのデーター作るのに、4分ぐらいかかるな。base64から作っているのが原因かもしれないが

昨日は顔認識のための切り抜き作業をしていました。
以外とはかどらなかった。

機械学習だが、ニュートロンの量が結果に与える影響が予想できない(数式しらないのと、中身よくわからないのが原因だけど)。
大きくすれば、学習効果が上がると思ったが、時間がかかる。保存時の容量が増えるというデメリットしか今のところ見当たらない。
一度、ニュートロンの数と精度の関係を調べたい。ただ、今のところ、最初のランダム値による影響が大きすぎる。早い所、同じランダムを使いまわせるようにしたい。(テスト以外使わないけど)


こういう微妙なパラメターの調整は、遺伝子アルゴリズムで解くものだろうと思って
JavaScriptを探したがGenetic.jsがあった。デモを少し試したら、いい感じに動いた。

もう少し試してみたい。

しかし、本来のやりたいことから、物凄く離れていってる気がする。

昨日したこと
あいかわらずJavaScript機械学習してました。
32次元のデータを学習できないという問題がありましたが、単純に
set(0,0,datas)とするところを、set(1,1,datas)としてました。(1x1x32のデーター構造だから、0,0に値を入れないとダメ)
直前でデーター作るのにcreate(1,1,32)とか呼び出してたせいで勘違いしました。Javascriptはこういう所を気をつけないとだめですね。

さらには、繰り返し学習ができないという問題がありましたが、これまた単純にコピペで使いまわしたコードがPositiveデーターを、Negativeに登録してました。
此のへんは、トレーニングのステータスを見ればわかるはずなので、確認したいです。

Wikipedia見ながら作っていた、ローカル・バイナリー・パターンの実装ですが、Concatenate (normalized) histograms of all cells.の意味を誤解してました。
http://en.wikipedia.org/wiki/Local_binary_patterns
間違って単純に合計しただけだと、cellsに分ける意味なかったですね。おそらく32x32画素の画像をのLBP時のサンプルを8だとすると、各Cell(16x16だと最大256の)ごとに8bitのデーターができるので、これを並べてセル数が4だと32bitのデーターを作る必要があった。値の範囲は-1 - 1が望ましいので、128でわって、-1した。
これを入れると、動いた。グレイスケール画像を均一化していく方法に比べたら、精度はともかく、計算速度が物凄くはやい。これだとリアルタイムに対応できそうな速さだった。


双曲線関数(tanh)・シグモイド関数(sigmoid)・Rectified Linear Unit(relu) の違いが何となくわかった気がした。
流行り廃りとか関係なく入力されるデーターの傾向によって、使い分けるのがいいかも(少数のサンプルで全部試すのがよさそう)
今のところは、tanhは中央にデーターが集まる傾向が多い時、sigmoidは外側の時(tanhとsigmoid逆かもしれないが)、万遍ないときはRelu

レイヤーの設計で性能が大きくことなることだけは、試してわかった。

数式がわからなくて、自分で事前予測とか全くできなから、これこそ、遺伝子アルゴリズムで解きたいよね。