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から変えてみたが結果は改善されず