stMind

about Tech, Computer vision and Machine learning

プランクトン画像分類で1位になったチームの解説ブログのメモ(1)

プランクトン画像分類でトップを取ったチームが、自分たちが採用した手法を解説したブログエントリーを 書いてくれています。

benanne.github.io

今回のコンペはフォーラムを読む英語力と、そこで公開されてたcxxnetをビルドする根気があれば、 それだけでそこそこの順位に位置することが出来たんですが(半分より上くらい)、 そこから上位に行こうと思うと当然、機械学習の実践的な知識と実装力が必要になってきて、 初期設定に対してちょちょっとデータ増やしただけではどうにも順位が上がらなかったです。

1位となるような手法は何が違うのかなといった所はかなり興味深い所なので、 読んだことをメモしておきます。 結構長いので、まずはPre-processing and data augmentationまでを。

  • Introduction
    • Software and Hardware
      • numpy
      • theano
      • cuDNN
        • CUDA Deep Neural Network library
      • pyCUDA
      • Lasagne
      • scikit-image
        • for preprocessing and data augmentation
      • ghalton
        • quasi random number generator
      • GPU
        • NVIDIA GTX980, GTX680, Tesla K40
  • Pre-processing and data augmentation
    • Pre-processing
      • Rescaling
        • プランクトン画像のサイズはバラバラなので重要
        • 固定サイズ化
      • Zero Mean Unit Variance
      • プランクトンのサイズ推定
        • image momentsを使って推定
        • Rescalingに使ってみたが結果は変わらず
        • ただし、分類の時の特徴量として使ってみたら結果が良くなった(後述)
      • Data augmentation
        • データセットのサイズを大きくする
        • アフィン変換の手法を適用
          • rotation: 0-360度の間でランダム(一様)
          • translation: -10から10ピクセルの間でランダム(一様)
          • rescaling: 1/1.6から1.6の間でランダム(対数一様)
          • flipping: する or しない(ベルヌーイ)
          • shearing: -20度から20度の間でランダム(一様)
          • stretching: 1/1.3から1.3の間でランダム(対数一様)
        • realtime augmentation
          • 学習フェーズで実行する
          • CPUで実行(学習はGPU
        • パフォーマンスが改善しなかったこと
          • elastic distortion
          • gaussian distribution
            • uniformから変えてみたが結果は改善されず

cxxnetでKaggleのプランクトン画像分類に取り組んだ話

www.kaggle.com

最終結果は286th / 1049でした。

f:id:satojkovic:20150318224423p:plain

今回、初めてKaggleのコンペティションに参加しましたが、やってみて思ったことを書き留めておきます。

  • Forumに投稿されているDeep LearningベースのStarter Codeを使うことでそこそこの順位に位置することが出来る
    • エラーが出てビルド出来ないよ!って言ってる人もたくさんいるので、ビルド&実行して結果をSubmit出来るだけでもDeep Learningではない手法よりも上位にいける
    • ただし、Deep Learningの手法同士の競争はむしろそこから
  • 次のアプローチとしてデータ増強(Data Augmentation)をまずはやってみると良さげ
    • 自分がやったのは、画像の上下、左右フリップ
    • 回転もやってみたが、むしろ順位は下がってしまった
    • Kaggle CIFAR-10の話 - デーが参考になった
    • Forumにも同じ話題があるので
  • GPU必須
    • 最初、自分のMacbookProで実行していたけれど、データ増強で学習画像数を増やせば増やすほど時間がかかってやってらんない
    • cxxnetはGPUで実行するオプションがある
    • GPUのマシンとか持ってなければ、AWSのEC2にNVIDIAが用意しているGPUインスタンスがあるのでそれを使うと良い
    • 1日以上かかっていたのが、1、2時間で学習できるようになった

とかやってたら、Yosemiteをアップデートしたタイミングで、起動しなくなるというトラブルに見まわれ、 復旧に時間がかかってこれ以上は出来ませんでした(若干言い訳)。

一応Starter Codeの素の状態で1.382285ということなんで、0.3くらいのスコア改善は出来たかなという感じです。

参考資料

今回のコンペティションで1位を取ったチームのまとめエントリーがありました。

benanne.github.io

Netflixの中の人が書いた「Ten lessons learned from building machine learning system」というブログエントリーのメモ

TechnoCalifornia: Ten Lessons Learned from Building (real-life impactful) Machine Learning Systems

少し前のエントリーですが、ざくっとポイントをメモしました。

Ten lessons

  1. More data and better models
    • どちらかだけにフォーカスすると、うまくいかない
      • あなたの問題では追加データが必要かもしれないし、またはモデルを改良する必要があるかもしれない
  2. You might not need all your big data
    • 全データのうち、どのサブセットを使うかが重要
    • データが多いほど精度が上がるというわけではない
  3. The fact that a more complex models does not improve things does not mean you don't need one
    • 「複雑なモデルを使えば改善するのではない」という事実は、複雑なモデルが不要ということを意味するのではない
    • 多次元の複雑な特徴を使う場合は複雑なモデルが必要、逆も同じ
    • 特徴量とモデルをパラレルに改善する事が重要
  4. Be thoughtful about how you define your training/testing data sets
    • データセットは注意深く扱うようにしなければいけない
      • positiveとnegativeのラベルを付けるのは簡単ではない
  5. Learn to deal with (the curse of) presentation bias
  6. The UI is the only communication channel between the Algorithm and what matters most: the Users
  7. Data and Models are great. You know what is even better? The right evaluation approach
    • 最も重要なレッスンかもしれない
    • 正しい評価手法がなければデータ、モデル、インフラは意味をなさない
    • Offline ExperimentationとOnline Experimentation
      • Offline Experimentationはおなじみの機械学習アルゴリズムの評価ステップのこと
      • Online Experimentationで最も有用なのはA/Bテスト
  8. Distributing algorithms? Yes, but what at level?
    • 分散処理させたいタイミングがやってくるけれど、問題はどのレベルで分散させるか
    • 3つのレベル
      • Lv.1. 個々に独立した全データのサブセット単位
      • Lv.2. ハイパーパラメータの組み合わせ単位
      • Lv.3. 各学習データサンプルにおけるモデル学習の単位
    • AWSを使って分散処理させた例がNetflixのTechblogに掲載
  9. It pays off to be smart about your hyperparamters
    • ハイパーパラメータのチューニングを繰り返し実行するための仕組みは重要
  10. There are things you can do offline and there are things you can’t…and there is Nearline for everything in between
    • システムアーキテクチャの話
      • OfflineとOnline、Nearlineの3層
      • Nearline: OnlineとOfflineの間(造語?)
    • レイテンシーについて考えると、MLアルゴリズムをどのレイヤで実行するかにブレイクダウンする手助けになる
    • NetflixのTechblogに掲載

Conclusions

  1. 持っているデータを注意深く考察して扱い
  2. データとモデルの依存性を理解し
  3. 正しい評価指標を選択し
  4. 目的に対してのみ最適化する

MediumのBack channelが面白い

特にSteven Levyの記事が良いです。

Webで読めるニュース記事というよりは、キーパーソンのインタビューやニュースになった事象の裏側の話がまとめられた内容で、 なんとなく本に近い感じがしました。

今のところ、6つの記事が公開されてます。

Twitterのマネタイズの話も面白いです。

Twitterはユニークユーザの増加は諦めていて(完全に諦めてはないと思うけど)、ユーザが増えなくても収益をあげられるように、 テレビとか他のウェブサイトとか、Twitter以外の場所に拡散したTweet(Off-Twitter)から収益を得るモデルを構築しているんだとか。 であれば、最近Twitterのユーザ数の伸びがなくなって成長が止まったというニュースがあったけど、実はTwitter内部ではそれほど 問題視してないのかもしれないですね。

英語で、しかも一記事が長文なので(4500単語くらいある)、全部読むのはかなり大変ですが...

Pylearn2 and Theano on python3

TL;DR

  • bleeding-edgeなTheanoであればpython3で実行可能

installation

書いてある通りのコマンドを実行すれば良い。numpyとscipyをアップグレードするときはno-depsオプションを外す。

$ pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

Pylearn2はTheanoインストール後にinstall instructionに書いてあるコマンドを実行すれば良い。

$ python setup.py develop

tutorial

チュートリアルが出来るかどうかを確認します。

  1. データセット作成
$ python make_dataset.py

pylearn2/scripts/tutorials/grbm_smdで実行します。 実行完了すると、cifar10_preprocessed_train.pklというファイルが出来ます。

  1. モデルの学習
$ python ../../train.py cifar_grbm_smd.yaml

scriptsフォルダにパスが通してあればtrain.pyで実行出来ます。 実行完了すると、cifar_grbm_smd.pklが出来ます。

  1. 学習結果の確認
$ python ../../show_weights.py cifar_grbm_smd.pkl

結果が視覚的に確認出来ます。

f:id:satojkovic:20141214214531p:plain

アーセナルらしさとDNA

20141206-170340-8

ネスレカップ 国際女子サッカークラブ選手権2014

後半からでしたが、アーセナルレディースの決勝戦を見てきました。
残念ながら0-2で負けてしまったんですが、随所に素晴らしいプレーがあって良い試合でした。

アーセナルらしさ

ベンゲル監督が直接レディースにプレーを教えているということはないとは思いますが、やってるサッカーはボスの目指すコレクティブなプレーそのもので、ボスの哲学がここまで浸透してるのかとちょっとした感動を覚えました。Boring boring Arsenalは過去の話、今やコレクティブなパスサッカーはアーセナルのDNAとなっているのだと思いました!

それに、後半開始からバー直撃を含む猛攻で完全なるハンドのペナルティを取ってもらえず、さらにはその流れのカウンターで逆に相手にPKを献上してしまう始末...
さらにさらに、猛攻を仕掛けて今度こそという完全なるファールのペナルティはまたしても見逃しで万事休すというあるあるな展開は、見ていてちょっと笑ってしまいそうな感じでした:D

新宿御苑の紅葉 2014

もう終わりに近づいている感じではあったけど、見事な紅葉でした。

イチョウ

辺り一面が黄色で美しい。

f:id:satojkovic:20141128142555j:plain

朱色、緑、黄色と組み合わせが美しい。

f:id:satojkovic:20141128144325j:plain

パノラマ

水面に写る紅葉が美しい。

f:id:satojkovic:20141128151602j:plain

他にも

吸い込まれそう。

f:id:satojkovic:20141128143419j:plain

動き出しそう。

f:id:satojkovic:20141128151320j:plain