終了済み: 「くずし字」識別チャレンジ

β版ProbSpaceコンペ第2弾!

賞金: 100,000 参加チーム数: 136 5ヶ月前に終了

くずし字3位解法

試したこと:

Model:

Data Augmentation:

  • Random Cropping

    28x28の画像を36x36にパディングし,32x32の部分をランダムにクロップ.

  • Mixup

  • Cutout

  • 回転 15°を上限に画像全体を回転.回転角は一様分布からサンプリング.

その他

  • Pseudo-Labeling

  • Label smoothing($\epsilon=0.1$)

  • Unsupervised Pretraining

    画像を回転させたりフリップしたりしてその操作を推測させて事前学習するやつ(もとの論文を忘れたので誰か教えてください)

  • Average Ensemble

効いたこと:

  • ShakeShake
  • Label smoothing
  • Random Cropping
  • Cutout
  • Ensemble
  • Pseudo-Labeling

実験:

いろいろと実験をしたのだが,嫌になってデータをすべて消したので以下はうろ覚え.

予備実験

Random Cropping (ResNetは128x128を入力とした)とmean subtractionのみを前処理とし,batchsize=128, lr=0.2, Momentum SGD, cosine annealingによって30 epoch学習した結果,5-fold CVにおいて,validation accuracyが

  • SE-ResNeXt: 0.96

  • Shallow ResNet: 0.95

  • Narrow ResNet: 0.93

  • ShakeShake: 0.99

  • ShakeDrop: 0.95

となった.ろくにハイパーパラメーターチューニングをしていないので,不公平な実験であることは明らかにしておく.この結果を受けてShakeShakeを使うことにした. ShakeShakeとShakeDropはchainercv2の実装を使った.ShakeDropはdtypeのcastにバグがあったので修正しないと実行できなかった(どこかは忘れた).

本番

Label Smoothing, 回転,Cutoutを適用し,5-fold CVで得られたモデルをaverage ensembleすることで,test setにおけるスコア0.992を得られた.

Test setに対する推測をPseudo-Labelingし,同じくShakeShakeをrandom initilizationから学習した.

このとき,pseudo-labelingはモデルたちの推測結果の平均をラベルとし,label smoothingとの兼ね合いで0.9を上限にクリップした.

異なったランダムシードによって異なったtraining/validation splitを作成し,合計で30のモデルを学習し,validaition errorの低いモデルを10個選んで同じくaverage ensembleを行い,最終的にスコア0.994を得られた(実用性?知らない子ですね・・・).

感想

ak1100氏の二位解法をみると,300 epochと私の設定の10倍で,さらには"300epochしか回さなかったのは足りてなかったかもしれません"と述べている. Cosine annealingもShakeShakeもエポックを多くすることがキモだが,shakeshakeの効率が悪すぎて(volatile gpu-utilが20%を超えない)あまりにまだるっこしいし学習曲線がサチって見えたので短縮してしまった. 短気は損気(確信).

今回のコンペではわりとオーソドックスな手法を様々試し,組み合わせることで3位に入賞することができた.もっと参加者が多かったり難しい課題だったりするコンペも基本を抑えれば結構戦えるのではないだろうか.夢が広がる.

Icon4
nattochaduke

dkobayashiさん ありがとうございます

04e77bda 5812 4c05 a982 d567eef70bb1
dkobayashi

Unsupervised Representation Learning by Predicting Image Rotations
こちらですかね?事前学習については完全に頭から抜け落ちていたので非常に参考になりました。

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。