【Kaggle】Katibで船コンペ銅メダル

Yuji Oshima
nttlabs
Published in
7 min readNov 22, 2018

Kaggle部作りました

こんにちはNTT研究所の大嶋です.
最近社内にKaggle部を作って同僚とKaggleに勤しんでいます.この度初参加したコンペの結果が出たのでその活動報告をしたいと思います.

Kaggleとは

もはや説明する必要も無いほど有名ですが,Wikipediaによると

”Kaggleは企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。”

です.

KubeFlow/Katibについて

そもそもKaggleに参加しようと思ったきっかけは,私の開発するKubeflow/Kaitbの実験場として最高だと思ったからです.Katibは機械学習におけるハイパーパラメータチューニングを簡単かつ効率よく行うことを 目的としたOSSであり,私はメンテナの一人として活動しています.Katibの詳細については別の機会にやるとして,ここでは以前KubeFlow MeetUpで発表したスライドをご紹介します(少々長いのでご興味があれば).

今回重要なKatibの機能は以下の3つです.

  • 簡単にいろんなチューニングアルゴリズムが使える
  • チューニング結果を可視化してくれる
  • 各ハイパーパラメータで学習したモデルをIDで管理できる

参加コンペ

まずは参加コンペを決めます.10/25の段階で参加可能なコンペから「船コンペ」と呼ばれていたAirbus Ship Detection Challengeが終了まで20日だったのでまずは練習!という気持ちで参加を決めます.

コンテスト概要

コンペの概要としては,衛星写真の中から船を検出してその船の領域を正確に取り出すことです.

背景:船での輸送量は急速に増えており,事故や海賊行為,違法漁業,麻薬密売,違法貨物移動の増加に対応するためにも多くの組織が外洋の高精度な監視の必要に迫られている.

評価:F2 Score at different intersection over union (IoU) thresholds.

左のような衛星画像から右のように船の部分を取り出します

アプローチ

今回は時間もあまりなく,Katibの評価が主目的であったこともあり,Kernelが公開されていたU-Netのモデルをベースにしました.U-Netは画像のセグメンテーションに用いられるモデルで,画像の特徴量を取り出すEncoder部と取り出した特徴量をマスク画像に復元するDecoder部に分けられます.

本コンペへの適用として以下のように学習〜推定を行います.

  1. ResNetなどを,画像中に船が含まれるか含まれないかの2値分類器として学習させる.
  2. 分類器として学習させたモデルをU-Netのエンコーダとして利用し,学習データ中の船が含まれる画像のみ入力としてU-Netを学習させる.
  3. テストデータの中から,分類器によって船が含まれると判断された画像のみU-Netに与え船の領域を推定させる.

Katibを用いたチューニング

今回のモデルではエンコーダ部分でのチューニングとU-Net全体のチューニングの2段階で行います.

1.エンコーダ部分

エンコーダ部分では画像中に船のあるなしの分類器を学習します.用いたモデルはResNetなどで探索対象にしたのは以下のパラメータです.

  • Data Augmentation(Rotation, Cutoutなどどれを使うか)
  • オプティマイザ(Adam, AdamW, AdaStand, SDProp)
  • モデル構造(resnet34, resnet50, densenet)

Katibでパラメータを生成し,それぞれのパラメータの組み合わせを評価した例が以下になります.(実際には単一のパラメータについてより多くの選択肢を検証する,モデル構造も含めて探索する,を繰り返しています)

青がハイパーパラメータ,黄色が学習中及び学習後のメトリクスです.どのパラメータをたどったらどれくらいの成績になるかがわかります.

この中から例えばvalidation lossが低い上位3つを取り出すと以下のようになります.

これからオプティマイザはAdaStandがよさそうです.実際には上位の複数のモデルでアンサンブルを取ることになります.

2.U-Net全体

次にU-Net全体のチューニングに移ります.前述したとおりKatibではチューニング中にできたモデルにはすべてIDが振られているので,そのIDを指定することで過去に学習したモデルを容易に持ってくることができます.U-Netではエンコーダ部分に学習済みの分類器を利用します.前段のチューニングでvalidation lossが低かった分類器をいくつか選択肢として探索空間に含めます.U-Netのチューニングで探索対象としたパラメータは以下になります.

  • エンコーダ(前段のチューニングにおけるvalidation lossが低い分類器3つ)
  • オプティマイザ
  • モデル構造

モデル構造はベーシックなU-NetとSCSEを加えたものを比較しました.探索結果は以下のようになりました.

最高精度の組み合わせは

  • エンコーダ:Rotation+CutOut, AdaStand, ResNet34
  • U-Net: AdaStand, SCSEあり

となりました.Validationセットを用いた検証として,accuracyは0.9988~9でほぼ違いは見られませんでしたが,IoUでは0.778→0.804とチューニングの意味があったと思います.

結果

最終的にPrivateLBは884チーム中58位,銅メダルを獲得できました!

上位7%で銅メダル獲得!

あと少しで銀メダルだったので悔しくはありますが,初参加かつ20日で銅メダル獲得できたので良かったなという感じでした.今回のコンペではチューニングがエンコーダと全体の2段階に分かれていたことで少し複雑になりましたが,KatibによってパラメータとモデルがIDで管理できたので容易に全体のチューニングを行うことができました.

どしどしメダルを増やしていきたい

反省

我々はU-Netのみでチューニングを行いましたが,上位入賞者はMask RCNNなど別のモデルとアンサンブルするなどしていたのでもっと色々試す必要があったなという印象です.本コンペは学習データが比較的大きな画像であり,あまり何度も学習が回せなかったことも手法が限られた要因でした.

今後もコンペティションに参加しつづけていきたいと考えていますのでまたここで成果を報告できればと思います!

おわりに:

私たちNTTは,オープンソースコミュニティで共に活動する仲間を募集しています.ぜひ弊社 ソフトウェアイノベーションセンタ紹介ページ及び,採用情報ページをご覧ください.

--

--