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

2016/6/13~6/19

7月には転職面接を受けると締め切り設定を課した。
この締め切りまでに成果としてChainerでのSRCNN実装を終えたい。
→とりあえず完成はした!!が、Performanceがよくなければ意味がない。パフォーマンスよければ自信でるんだけど。

SRCNNの実装、パフォーマンスチェック

waifu2xの差別化としてRGBでTrainingさせることに決定。
RGBのコードを実装。その際にYonlyのコード内に重大なBugがあったことが発覚。。Y_dataが正しくなかった。今までのTrainingは全部無駄だった、、。

プロコンは2章巻末問題を1日1問解いていくことに。

SinraMediumをRGBでTraining。1日くらいかかった。

SinraMediumとwaifu2xのPerformance比較。大体の写真では大差なかった。
が、一部の写真でwaifu2xではJPEG Noiseがのっていて、その部分はSinraMediumの方がよさそう

Sharpnessはどちらもあまり良くなかったのでこの部分もっと改良できればすごいものになるなあ、と思う。

chainer imagenetのサンプルコードをcifar-10のデータを使って無理やり回してみた。
train.py参考にすべき、とてもよい。

Chainerでmlpconv Layerが実装されていたので、その元論文読んだ。Network in Network MLPと言っているけれど、これはただ1×1のConvolutional layer重ねたのと同じ計算しているだけであって、そんなに面白くないと思う。

社会人からはじめる機械学習勉強 Week 23 – Convolutional RBM 2

2016/6/6~6/12

7月には転職面接を受けると締め切り設定を課した。
この締め切りまでに成果としてChainerでのSRCNN実装を終えたい。
→2016/6/5 このままの進捗だと達成は厳しい。Realでの動作がうまくいっていない。
      追い込んでいかないと無理!
→2016/6/12 土日にはかどったので、とりあえず完成はした!!
      あとは、Performanceもっとでれば自信でるんだけど!!!。。。

Convolutional RBM

RBMから考えるDeep Learning ~黒魔術を添えて~を読んで、(これは下記の日本語訳”A Practical Guide to Training Restricted Boltzmann Machines” )Binary Unitを用いたCRBMのエネルギー関数のままで、連続値扱えば無理やりいけるんじゃないかと思えてきたのでそれを試すことにした。

実際のPexels写真データを用いたCRBMのPretraining code実装。今週中にPretrainingまで動作確認できた。

SeRanetの動作確認

Chainer版SRCNNであるSeRanet。fusion, splice関数の実行および、動作確認までおわりとうとう完成した。これから動作確認とPerformance checkを行う。

現状は、Fusion, Splice, CRBMを導入したことによるメリットがそこまで出ていない結果となっている。もうすこしいろいろNN設計いじって比較検討したい。(でもすぐにでも公開・ブログ書きしていかないと7月のInterviewに間に合わない。。。)

社会人からはじめる機械学習勉強 Week 22 – Convolutional RBM

2016/5/30~6/5

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

Convolutional RBM

Convolutional RBM=CRBMの動作確認すること。いろいろとバグがありなかなかうまく動作しなかった。。。当初の予定より時間食ったけど、BinaryでのCRBMはOK!ただ、CRBMの動作Realがどうしてもうまく学習しない。。。難しい。。。

現時点でのStock

最近やりたいことをまとめなおす

  1. CRBMに集中。とにかく早く完成させたい!
  2. プロコン → コンスタントに積み上げていきたい。
    1. Const. 蟻本 
      – 6月中に4章読みたい。
      上級編はどういったアルゴリズムがあるかのメタ記憶のみでよし→実装なしの流し読みでいいので5ページ/日 進めていく。
      – 7月中に本もう1週して、基礎の単語・アルゴリズム全部暗記する。(ノートにまとめていく)
    2. プラグイン改良
      C/C++ Single file execution pluginをアップデートしてSRMで使えるようにしたい。
      – スペース文字対応。
      – output PATHの制御
      → OK!!!
    3. 問題の数こなす。(週1問とか?)
      もしSRMでBlue coderになるのがまず目標ならば、SRMの過去問数こなしておきたい。特にString, charの扱いに習熟しておきたいところ。

目標設定および振り返り

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

WK21
Step1 waifu2x仕様で実装、Step2 BN入れる。家のPCで動作・パフォーマンス確認
→OK. 結論として今回のような情報復元タイプの機械学習にはBN入れない方が素直に良いと判断。BNは不採用の方向で。
早く終わったので、その分をCRBMの実装に回して、CRBMの実装終了まで行けた。

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

その他勉強したもの

DeepPose: Human Pose Estimation via Deep Neural Networks

Deep Pause: 人間の部位位置検出をしている。 → 位置検出・Translation invaliantではない例のいいものになりそう?

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

github
https://github.com/mitmul/deeppose

論文
http://arxiv.org/abs/1312.4659
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/42237.pdf

社会人からはじめる機械学習勉強 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 動画への応用へ。