社会人からはじめる機械学習勉強 Week 21 – Chainer RBM実装

2016/5/23~5/29

7月には転職面接を受けると締め切り設定を課した。
この締め切りまでに成果としてChainerでのSRCNN実装を終えたい。

Chainer RBM

RBMの実装試す。やっぱり理解するのに時間がかかる。。。
今週はPersistent CDの実装見直しなどしてた。

SRCNNのパフォーマンスを上げるために、教師なし学習を用いて精度があげられないかと考えた。教師なし学習としてRBM、それをimage processing に応用するためにConvolutional RBMに興味を持った。
論文読む、Convolutional RBM(CRBM)のFormulate & 実装へ。
いろいろと論文を読んだりしてRBMの理解を深めていた。
連続変数のRBM・PCDの実装・reconstruct・Sparsityについて
特に連続変数のRBMはまだ理解できてないし、ここはしっかりと抑える必要がありそう。
参考リンク:Theano 入門

予定通りCRBMのFormulation・実装に入った。
理論は特に問題なさそう、あとは実践でちゃんと動くかどうか。

論文

Continuous RBMの実装として以下の論文読みたい。

Sparsityについては以下の論文たちを参考にしたい。いくつか異なる手法がある模様。

その他メモ

面白そうな論文見つけた。Deepmindの社員の論文で、2016Award取ったみたい。

社会人からはじめる機械学習勉強 Week 20 – Chainer入門

2016/5/16~5/22

機械学習業界に転職するために勉強をしてきて半年近くになるわけだけど、とうとう先週、7月にはInterviewを受けようということで一つの締め切り設定を課した(ちょうど7/2から日本に帰国する予定があったため、その予定と締め切り設定を合わせた)。この締め切りまでに成果としてChainerでのSRCNN実装を終えたい。

Chainer

いままでTheanoライブラリを使って機械学習を行ってきたけど、他のライブラリフレームワークはどうなのか?ということで、Chainerを使ってみることにした。なぜChainerにしたのか?

  • 日本製である
    Preferred Networksという日本の会社が作ったオープンソースなプロジェクトであることが非常に親近感を持てる。
  • Define by run スキームの採用
    正直まだ、厳密な違いとか分かっていないんだけど、、、メインコンセプトとして、Chainerと他の機械学習ライブラリとの違いは、従来の機械学習ライブラリの大半がモデルを決めて構築してから実行するのに対して、Chainerはモデルを毎回実行時に構築できるという事でより柔軟なニューラルネットワークの設計が可能になるという事。
    今後、開発でいろいろなモデルを比較・検討したりモデルを組み合わせることによって従来以上の成果を上げることを目指すといった場合にこのモデル構築の柔軟性は重要になると感じた。
    (個人的にはOBSと組み合わせた動的なニューラルネットの刈り込み・うまく活性していないユニットのパラメータ再初期化による効率活用に興味がある。Adaptive learning?)
  • GPUの高速化に力が入れられている。
    GPUではnumpyの代わりにcuda.cupyを使用することで、GPUデバイス上での計算を高速に行えるようになっているのなど速度面も不足なし。

機械学習ライブラリの比較については下記参照。

SRCNNを改良するためのアイデア

ChainerでのSRCNN実装にあたってのIdea だし。ブレインストーミング的な感じで、思いついたアイデアをここに書き出しておこう。

1.Global ContextはColorizationのPaperにあったようにPlaces2の景色ラベルを使って教師あり学習させればいい、、、?→ただ、これだと学習する要素がGlobalすぎないか?実際にほしいのはもう少し細かい部分Middle featureのはず。

例:毛並、岩肌、木の葉っぱ、、、といった細かい部分の特徴を検出して、ディティールを再現するようなソフトがほしいわけ。ただ、これらの特徴をどうやって学ばせるか?写真の各部分でラベル貼り付けされているものなどはないので、教師なし学習による特徴量の抽出がしたい。

2.上の用途に関しては、Google の猫の顔を教師なし学習で構築した以下の論文が参考になるかも。

“Building high level features using large scale unsupervised learning”

読了。

要約:Filtering (Weight shareしていないのでConvolutionとは言わない!), L2 Pooling, LCN(Local Contrast Normalization)の3層×3の計9層からなるDeep learning。YouTubeからのランダム画像を10Million枚用いた、教師なし学習での特徴抽出タスク。パラメータ数が1Billionあり、16コア×1000台のコンピュータで3日間かけてのトレーニングという超莫大なデータ量及び計算リソースを使ってでた結果として猫の顔などを自然に特徴抽出できた。

以下、Convolutional Restricted Boltzmann Machine について調査。

Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations

読了。

要約:CRBMを用いて、教師なし学習での画像特徴抽出。

Layerを重ねるごとに、Edge→Parts→Objectといった特徴の抽出を実際に達成している。

  • CRBM:Convolutional RBMの提案
    – Visible layerとHidden layer
  • Probabilistic Max Pooling  
    – Pooling層に対応するものをこれで実現。これによってTranslation invariantな性質も持たせることができる。

CONVOLUTIONAL DEEP BELIEF NETWORKS (ppt)

Empirical Evaluation of Convolutional RBMs for Vision

その他

DeepPose: Human Pose Estimation via Deep Neural Networks

Deep pose: 人間の部位位置検出をしている。 → 位置検出・Translation invaliantではない例のいいものになりそう?→結果としては、CNN + MLPの組み合わせでx,y座標を算出しているだけだった。SRへの応用は難しそう。

Chainerについて調べていたらアプリがgithubにあるのを偶然見つけた。(論文とは別の人が実装した非公式サンプルアプリ)

github deeppose

論文

Chainer 実践

SRCNN

Chainer で SRCNNの実装した。

実装始めるまでのChainer勉強にはかなり時間をかけたけど、一度実装を始めてみると、豊富なLink, Functionが揃ってるので、実装はとても簡単にできる印象。Theanoの方からのコード移植という事もあり0からの実装ではなかったが、木曜・金曜の2日間だけで終わってしまった。

日曜にはwaifu2x仕様での実装チェックOK. ChainerにCudnn入れたら驚くほど速くTrainingが終わっていく。。。BNでのチェックもOK, 結論としてBNは入れない方が良いだろうという事に。 (Sigmoid Fnには有用だけど、Leaky ReLUには対して有効じゃなさそう & 今回は画像の復元系なので、もともとの値が重要。BN入れると相対差を重要視しちゃうのであまり良くない(実際黒潰れの写真などができてしまう。))

RBM

目標設定(改め)

7月に

WK20
Step1 waifu2x仕様で実装、週末に電源買う。

WK21
Step1 waifu2x仕様で実装。
Step2 BN入れる。家のPCで動作・パフォーマンス確認
上海行くのであんま進まないかも、、、

WK22
Step3 CRBM作成、cNoteで技術ブログ書き込む。

WK23
Step4 Fusionさせたもので動作させてみる。
→これで徹底的にディープにしてもよいので、パフォーマンスよければ。。。。

WK24
公開 & cNoteにいろいろと書き込む。→パフォーマンスダメだった場合は、、、
WK24 Scene detectionのLayer(Global feature)も入れ込んで、Fusionさせてパフォーマンス確認 & 公開 & cNoteにいろいろと書き込む。

WK25
100 star 達成。 週末にメール送る。
→* 追記:結論を先に書くと100 starなんてまったく達成できなかった。。。

WK26
Interview準備、まとめ。

WK27
Interview

社会人からはじめる機械学習勉強 Week 19 – TheanoでSRCNN実装5 公開

2016/5/9~5/15

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

公開

4週間前から行ってきた本プロジェクトも、まとまりがついてきて公開するところまで来たので、公開した。結果として望むパフォーマンスは全く出なかった。なので今回のソースコード公開はあくまでTheanoでのSRCNN実装をシェアするだけの教育的なもの。(実用価値はほぼなしってこと。)残念。

なにはともあれ公開したのはこちら。

中期計画見直し

WK17, 18

実際にいろいろなパラメータでテストしていく。
パラメータと動作時間の関係を出していく。
可能ならAWSでの環境構築もしてしまいたい。
 →2016.5.9 [結果] 予定通りできていたけど、パフォーマンスが良くない。

WK19 可能なら動画への応用検討を開始。

(これができるようならマネタイズもできるかも。)Star 100とれないかなー?
 →2016.5.9 結局全然プラン通りに行っていない。プラン修正の必要あり、chainer使って再チャレンジ

WK20,21,22 動画への応用へ。
 →2016.5.9 結局全然プラン通りに行っていない。プラン修正の必要あり、chainer使って再チャレンジ
  WK20, 21で開発
  WK22, 23でトレーニング
  WK24で公開

2016/5/9 感想
結局第1プラン通りのスケジュールではいかなかった。
このままずるずるとスケジュール変更が重なるようだとよくない。。
→7月に日本に帰国する予定があるので、
 結果が出ても出なくても7月までにはInterview終了させること。
 そのために他の会社受けるなり、Interview受ける前に辞表提出するとしても。

社会人からはじめる機械学習勉強 Week 18 – TheanoでSRCNN実装4

2016/5/2~5/8

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

Padding問題の根本原因を見つけた。→TheanoのConv2dにPadding任せちゃうとダメ。0パディングされちゃう。代わりにnumpy使って自分でPaddingするよう実装変更した。

32x3x3_32x3x3_32x3x3_1x3x3にてチェック中。→なんかただパラメータ値によって誤差関数がランダムにFluctuateしてるだけな感じで、モデルの表現に限界がある気がする。うーむ、どうやったらパフォーマンスもっとよくなるのかなぁ。。。

最近読んでる論文集

SRCNNを良くするためのアイデアソースとするため。

1.OSD
http://ee.caltech.edu/Babak/pubs/conferences/00298572.pdf
https://papers.nips.cc/paper/647-second-order-derivatives-for-network-pruning-optimal-brain-surgeon.pdf
https://papers.nips.cc/paper/749-optimal-brain-surgeon-extensions-and-performance-comparisons.pdf

結局OBDはCNNには必要ない気がしてきた。

CNNにおけるUnitとは、Feature mapのことで、この場合Feature map数はあまり多くないから、それぞれ実際に”Pruning = そのチャンネルにおけるWすべての要素を0にする”して試してみればいいんじゃないかって気がしてきた。計算量的にわざわざHessianを計算する必要はないと思う。

2.ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付け
→ここで紹介されていたLayerのFusion はSRCNNでも是非試してみたい!!!

3.Batch Normalization

ニューラルネットがディープになっていったときに、Gradient descentが機能し続けるように入力データを平均からのずれで整形する方法。
http://jmlr.org/proceedings/papers/v37/ioffe15.pdf

社会人からはじめる機械学習勉強 Week 17 – GPU購入 & TheanoでSRCNN実装3

2016/4/25~5/1

PC購入

いままでずっとCPUで頑張ってきたけど、機械学習やりたいんだったらGPU使わないと。という事で、マザボ・CPU・メモリ含め一式交換することに(自作PC)。

これは投資ということで、惜しみなくスペックを追求した。

  • CPU: Core i7 6700K
  • CPU Cooler:
  • マザボ:ASUS Z170-A
  • Memory: DDR 4 Corsair 8GB × 2
  • GPU:MSI GTX 980Ti GAMING 6G
  • 電源:Cool Master V750 (7500W)

一番高かったのは(もちろん?)本命のグラボ。こういった専門性の高い製品はマレーシアでは安く買えないので、Amazon.comから買って輸入する形をとった。(日本とも価格比較したけど、アメリカのAmazon.comの方が安かった!)

合計で15万くらいいったのかな、、もらったばかりのボーナスをソッコーで消費してしまったー。

ちなみに到着は、マザボのみ在庫がなかったせいで結局全部そろったのが5月中旬だった。

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

  • SRCNNアプリは動作するところまではすでに完成。ここから改良していきたい。
  • Pexels dataでの動作確認
  • 様々なモデルで試す。32x3x3_32x3x3_1x3x3
    64x3x3_32x3x3_1x3x3 など。。

32x5x5_32x5x5_1x3x3のトレーニングは終了、32x3x3_32x3x3_1x3x3と大差ない結果に。。。
もっとFilter size 大きくして32x7x7_32x5x5_1x5x5でトレーニング開始。

トレーニング結果に満足してないからひたすらトレーニングさせて待っているけど、このままだとトレーニング頭打ちで終わってしまいそう。

もっとFilter size 大きくして32x7x7_32x5x5_1x5x5でトレーニング、一旦結果出たけどあまり良くなかったので、Epoch増やしてもう一度開始どうやったら端っこの特異的な修正効果を軽減できるのだろうか。。。
Filter数もっと増やす?Layer数もっと増やす?? 4層ネットワークまでは試してみたい。
32x5x5_32x5x5_32x5x5_1x5x5 とか。
32x9x9_32x5x5_32x5x5_1x3x3 とか。多分GPU Instanceじゃないとできない量だろう。。

NNの刈り込み

NNの最適設計・パラメータWの刈り込みアルゴリズムに関して、Optimal Brain Damageを読み始めた。PRML p251で紹介されていたので知ってた。

これは要約すると、ヘッセ行列の対角成分H_ii だけ見て、パラメータW_iiの重要度合い=”Saliency”がわかるよって感じだった。

つぎに以下の本を見つけた。

この6.5章にNetwork Pruningが乗ってたので読んだ。Optimal Brain Damageのほかに、Optimal Brain Surgeonという手法があることを紹介していた。

OBDとOBSの違い

OBD: Diagonal approximation使っているので、パラメータの数nに対して計算時間がO(n)で済む。

OBS: 非対角項の効果もしっかり取り入れているので、計算時間がもっとかかる(多分O(n^2))、ただし、性能はOBDよりいいっぽい。

疑問点:どちらもSaliencyを図るのに、ΔW_ijではなく、W_ijの実際の値を使っている。なぜだろう。。。これだとW_ijの絶対値が大きいものほどはじかれやすくなっちゃう気がする。→ここでは無関係な正則化の効果を入れ込んじゃってると思う。

疑問点の答:W_ijを枝刈りする場合、W_ijの値を0と置きなおすことに相当する。つまりW_ij ->0という値の変化になるので、総変化量がH_kk W_kk^2 で見積もられる。(つまりこれはH_kkが[0,W_ij]の範囲内で大きく変化しないという仮定を含んでいることになる。)

OBS: Optimal Brain Surgeon

振り返り

もう一旦実装は終了で、トレーニング結果待ちの段階に入ってきている。
次のステップを真剣に考えていかないと。

①SRCNN-theanoのPublish

やっぱりある程度いいパフォーマンスが出るネットワーク構築してからでないと公開できない。
Deep netでのトレーニング必須。→AWSのGPU Instance使って計算させてみるか?

追加機能チェック1.トレーニングパラメーターWの選別作業工程を提案する。
追加機能チェック2.動画で使えるかどうか。

②プロコン

どこまでやるか、、、?→ともかく蟻本は読了する!

CLion をWindowsにてSetupした。

どこまでやれば、実績になるだろうか、、、。。。 →公の指標必要なら、Top coderとかGCJ参加するべき。調べ始めたい。

現状

①SRCNN-theano

実装は良さげ。あとはトレーニング結果得るのみ。(PC無いので待ち工程)→2週間だけAWSのGPU Instance使っちゃうのがいいと思う。

MSEの平均の取り方はちゃんとデータサイズに依存しないようにしっかりチェックしたい。

結果がちゃんと出たら、githubにて公開する。目標〆切5/7

これ用の記事をcorochannNoteにでもなんでもいいから書いて、100Star持っていきたい。。。目標〆切5/21
 
②プロコン

5/21までに3章は全部終わらせる。→5ページ/日 目標

Top coder, GCJなどで腕試し一回したい

<勉強>
I. Deeplearning.netとsinhrksさんのブログ → DBNまでで一旦OKとする。その他は必要なとき学ぶベースという事で。
II. Chainer → サンプルコードだけでいいから実装して試してみること。
III. PRML  →  時間あるとき読みたいけど、、、Deferとする。
IV. Reinforcement learning  →  時間あるとき読みたいけど、、、Deferとする。

社会人からはじめる機械学習勉強 Week 16 – TheanoでSRCNN実装2

2016/4/18~4/24

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

予定:黒字、実際:赤字

  • Model のSave, Load機能を実装する。
    → OK
  • jsonで管理できるように。 
    → OK
  • ログをファイルにセーブ
    → OK print関数がそのまま使える。
  • YCbCrでのYのみ使う簡単な方(cf: RGB3色でトレーニング)で、アプリ完成させる。
    → OK
  • TrainingにMomentumを実装、試す。
    → OK、ただしあまりいい効果が見られなかったので、次の方法を試したい。
  • ADAMで試す。
    → OK。

学習率の適応方法・調整方法

調べてみると、いろいろあるよう。

その中でも最新で提案されているAdamが、MomentumとAdaGradのコンセプトを取り入れていそうだったのでこれを実装してみたいと思う。→実装してみたら、収束も普通より早いし、極小値も普通のより低い値まで行ったのでかなりよさそう。なぜこうなるのかの原理が少し理解できていないけど、、、。

データの収集

Places2 の写真データ使用していたけど品質が良くないので、他のを探したい。

そこで、Pexelから写真一括取得してトレーニングしたい。目標は5000写真。

例えばこんなURLが取れる

-mediumを取ればオリジナル画像が得られる。

Pexelの自動写真ダウンロードがしたい。infinite scroll タイプなので、どうやって写真データ取得できるか?Chromeでブレークポイント張って調べた結果

https://www.pexels.com/?format=js&page=1

このURLでpage部分変えていけば情報取得できそう。→OK、結果Pexelから7000写真取得。総サイズも400MBで大きすぎずいい感じ。これで本番トレーニングしたいと思う。

評価関数・ロス関数・誤差関数

SRCNN元論文で使われていたPSNRという評価関数は結局MSEと同じ誤差を計算している。そのままMSE使えばOKという事がわかった。

社会人からはじめる機械学習勉強 Week 15 – SRCNN実装

2016/4/11~4/17

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

予定:黒字、実際:赤字

エラーでまくってもいいので、ツール走らせるまで終わらせる。
家での動作確認まで終わらせる。

モジュール実装:4階テンソルをnumpyで実装してPickleするところで躓き中。ツール走らせるなんてまだまだ先。木曜までに実装を進めていく感じにしたい。

モジュール実装1 Theano sharedを用いたcPickleでのphoto.pkl.gz保存まで実装。4階テンソルのdata x, y に対してConvLayerが動くように修正。

モジュール実装:上終わって、実際にtrainingを動かせるところまでOK。ただ、Convolution結果の画像が真っ黒で計算がうまくいっていない模様。。。

モジュール実装2 実際にtrainingを動かせるように実装。

モジュール実装2:画像を0-1に正規化、あとlearning rateの調整にて実際に動くようになるところまでOK。activationどうすればいい?→activationなしだとただの線形変換になってしまう。。。→ReLUっぽいのを使うのがよさそう

  • 案1 Max(0, x)      → 負の値を0へ。
  • 案2 Min(Max(0, x), 1) → 常に0-1で正規化。こっちにしたいかなー。。。

モジュール実装3 動作するところまで実装終わらせる。

モジュール実装3: 上記案2を試したところvanishing gradient が発生して途中で結果がサチってしまい望む結果が得られなかった。代わりにLReLU (Leak ReLU) を試してるところだけどうまく動いてくれない。。。バグ特定中、、

全体的に動作確認がとれるまでいきたい。

モジュール実装3: LReLUで動作確認とれた。1日中回して1000epoch後、割といい精度で画像復元できてるけどトレーニング続けたらもっとよくなりそう。週末も回しっぱなしにしとく予定。どうやらTraining parameterのチューニングは短い時間ではできそうにない。

RGBでやるとパラメータのチューニング(Training)がよりシビアになる傾向にあると思う。Trainingにも時間epochがかかるし。→YCbCrでやってみることに。YCbCrでトレーニング回す。3層で。

Alor Setar へ旅行に行っていたため進捗なし。トレーニングは回しつづけてた。

今後の予定

来週

評価関数の実装。(どれだけいいSRができているかを比較検討するため。)

再来週

実際にいろいろなパラメータでテストしていく。

WK17, 18でパラメータと動作時間の関係を出していく。
可能ならAWSでの環境構築もしてしまいたい。

WK19 可能なら動画への応用検討を開始。(これができるようならマネタイズもできるかも。)
    Star 100とれないかなー?

WK20,21,22 動画への応用へ。

社会人からはじめる機械学習勉強 Week 14 – PRML4章まで

2016/4/4~4/10

今週1週間、会社で出張が入ったため、実装面での進捗はなし。家のPCは使えいないということで、本を持参して勉強をしていた。

PRML

機械学習では一番有名な本。ただし学術研究としての本であり、ただ実装できればいいエンジニアにとっては難易度は高いと思う。

読み始めから5章途中まで行った。

[書評]
副題にもあるとおり、パターン認識をベイズ的な取り扱いから理論立てていく本。
アカデミックに使用されている感じが強く、理論が多くてちゃんと計算も追ったり、演習もやるとなると読むのには時間がかかりそう。
演習まできちんとこなせば、確率論・微分積分・分布関数などこの分野を扱うにあたって必要な数学の基礎はしっかり身に付くと思う。
とくに頻度主義(事前分布を考慮しない、実践面ではこっちで十分なことが多いか)・ベイズ主義(事前分布を考慮して最尤推定する、計算が一段階難しくなる。)
にスポットを当てて書かれていて、ベイズ主義を学びたい場合はこの本を読むことは必須だろう。

しかし、現在多くのアプリケーションで用いられているのは頻度主義の理解で十分で、これを理解するためだけにこの本を読むのはtoo muchな印象。
上巻の5章・ニューラルネットワークまでだとそんな感じだけど、下巻で応用例を扱うっぽいので、ここを読んでみないと何とも言えないけど。

社会人からはじめる機械学習勉強 Week 13 – SRCNNの実装開始

2016/3/28~4/3

3/26~30まではPhuketへの旅行へ行っていたため、特に何も進まず。

機械学習用パソコンセットアップ

家のUbuntu環境をセットアップしなおした。現状多くのソフトがサポートしている環境であるUbuntu 14.04でセットアップ。

Python セットアップ

以下備忘録として、メモ抜粋。

python, numpy, scipy, matplotlib install

$ sudo apt-get install python python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib

Ref: http://sat0yu.hatenablog.jp/entry/20130302/1362172589

$ sudo apt-get install python-pip
$ sudo pip –proxy=http://xx.xx.xx.xx:port install milksets

PIP setting

[Encode change from ‘ascii’ to ‘utf-8’]

This is necessary for pip to work properly on Ubuntu
Change default encoding

add write below at /usr/lib/python2.7/sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')

Theano install

For Ubuntu 11.10 through 14.04:

$ sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ 
$ libopenblas-dev git
sudo pip install Theano

Updating theano module

$ sudo pip --proxy=http://xx.xx.xx.xx:yyyy install --upgrade theano
$ theano-cache clear

Upgrading scipy

$ sudo pip --proxy=http://43.74.40.42:10080 install --upgrade scipy

We can upgrade scipy when we get below warning

Pandas install

sudo pip install pandas

Image processing: OpenCV, CV2

I don’t know which one is necessary. all 4 procedures, it worked fine.

1. Install by pip

$ sudo pip --proxy=http://43.74.40.42:10080 install cv2

2. Install python-opencv

$ sudo apt-get install python-opencv

3. using script

Make “opencv.sh” and write following and execute.

version="$(wget -q -O - http://sourceforge.net/projects/opencvlibrary/files/opencv-unix | egrep -m1 -o '\"[0-9](\.[0-9]+)+' | cut -c2-)"
echo "Installing OpenCV" $version
mkdir OpenCV
cd OpenCV
echo "Removing any pre-installed ffmpeg and x264"
sudo apt-get -qq remove ffmpeg x264 libx264-dev
echo "Installing Dependenices"
sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg cmake qt5-default checkinstall
echo "Downloading OpenCV" $version
wget -O OpenCV-$version.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/$version/opencv-"$version".zip/download
echo "Installing OpenCV" $version
unzip OpenCV-$version.zip
cd opencv-$version
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j2
sudo checkinstall
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
echo "OpenCV" $version "ready to be used"

4. PYTHONPATH setting

Write inside ~/.bashrc

# Python Path setting
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

Chainer install

Before installing chainer, I needed to install google apputils beforehand!!!

$ sudo pip --proxy=http://xx.xx.xx.xx:yyyyy install google-apputils
$ sudo pip --proxy=http://xx.xx.xx.xx:yyyyy install chainer

SRCNN実装

以下、関連するリンク集。

SRCNN Website サンプルソースコードなど

Matlab, caffeを使って実装しているよう。

・写真のデータセットについて
1.ILSVRC
http://image-net.org/challenges/LSVRC/2013/
http://image-net.org/challenges/LSVRC/2015/
ILSVRCは、Detection, classification task用の写真Datasetを配っているので、写真の質は必ずしも良くないものが多いので不適切な気がする。

2.Places2
http://places2.csail.mit.edu/index.html
http://places2.csail.mit.edu/download.html
景色のDetectionのためのProjectで、10M枚を超える(500GB程度)写真のDatasetを提供している。景色写真が大量にほしかったらここで足りそう。
とりあえず一番小さいVaridation dataset 1.2GBだけダウンロードした。

3.Pexel (Flickrとかもあり)
本格的なTraining phaseに入る前までは、少ない枚数のサンプルがあれば十分なので、手動でPexelからCC0ライセンスの写真を使うことに。→最終的にはこれを使って訓練してる。

社会人からはじめる機械学習勉強 Week 12 – Theano tutorial Restricted Boltzmann Machine

2016/3/21~3/27

ディープラーニング実践勉強 Theano

先週から引き続き、ディープラーニングの実践勉強。

先週から引き続き教師なし学習編。先週Auto Encoderを一気にマスターしたので、今週はRestricted Boltzmann Machine (RBM)を一気にマスターしていく。

構成

6章でRBMについて学ぶ。この時点では単層の教師なし学習。

7章でRBMを積み重ねてPretrainingを行っていくDeep Belief Networkについて学ぶ。

6章 Restricted Boltzmann Machines

教材

細かい説明は上のリンク参照。また、「深層学習」でもRBMに説明されているので、読むとよい。

正直いままで学んできたものとは段違いに理解難易度が上がる。

7章 Deep Belief Networks 

教材

同上で詳細は略。Stacked Denoising AutoEncoderでやった時と同様に、1層目から順にPretrainingしていくことで学習の安定化を図り効果を高めるというもの。

設定している目標

2章/週のペースの勢いでやっていって4月末までに全部終わらせたい。

→結果論として次週WK13からは実践編ということで、SRCNNの実装に入ったこともあり勉強に時間とれなくなった。また、残りの章はこれまでの章と比べると説明が断片的で、補足的な感じがあるので、一旦優先度を下げて今回はここでdeeplearning.netの学習終了とする。

残りの部分についてはまた暇な時間ができたとき・使う必要に迫られたときに学習することにしようと思う。