ふぁむたろうのブログ

機械学習系のお話やポエムを投稿します

KaggleのNFLコンペ振り返り会を開催したらコンペの中の人が来てくれたお話

どうもみなさんこんにちは。敗北者のふぁむたろうです。

先日(日本時間 2021/11/03) NFL Health & Safety - Helmet Assignment | Kaggle が終了し見事に散りました。 チームメイトのあるてまさんにおんぶに抱っこでこの結果ですので、時代が時代ならハラキリでしたね! (これが実務じゃなくて本当に良かった)

f:id:fam_taro:20211108215056p:plain
ギリギリ銅メダル

結果は残念ですがカメラ幾何とか点群とか勉強するきっかけになったので参加してよかったと思います。

とはいえそのまま終わるのも虚しかったのでコンペ振り返り会を開催したところ、コンペ運営側の Rob Mulla さんも参加してくれたので思い出ネタに記事を書くことにしました。

振り返り会の詳細な内容には触れません。ですので Solution 周りの話はないのでご注意ください。

結論

  • 振り返り会参加者が強いと中の人が来てくれるかもしれない
    • 今回は 1st, 2nd, 3rd, 9th, 12th, 14th, 16th >>> (とても大きい壁) >>> 98th(me) が参加したので実質 Winner's call でしたね
    • 自分も強い側で参加したかった…🥺
    • 今度は自分が褒められる側で参加したい(願望)
  • 振り返り会開くと良いことがあるかもしれないのでみなさんも開きましょう
  • 日本語圏以外の方とリモート会話するときは GoogleMeets が便利
    • 自動字幕 & 翻訳機能 が便利
  • 募集するときに 日時を記載する場合は JST(日本標準時) と UTC(協定世界時) を両方記載しておくと世界中の人にとって優しいです

振り返り会開催の経緯

やはり行うべきは Twitter ですね。
「振り返り会したいな〜(チラチラ」って言ったら今回のコンペ覇者の K_matさん (@Kmat67916008) さんが拾ってくださったので、開催することにしました。

f:id:fam_taro:20211108220516p:plain:w500

まあ4,5人集まれば上々って軽い気持ちで調整さんを作って投げたところ、想定以上に人が来ることとなりました。

f:id:fam_taro:20211108221338p:plain:w500

また英語圏の方も何故かこの Tweet を拾っていて(K_mat さんの RT 拾ったんですかね🤔)、下記のようなやり取りもありました。

相手「英語でやらんの?」

私「英語できんし日本語でやる」

相手「日本の Kaggler 強えし英語ももっと勉強してくれや😂」

私「TOTEMO WAKARU😂」

上記のようなやり取りもあり、「まあ日本語でひっそり開催するっしょ」って気持ちでいたのですが、まさかの運営のRobさんから「日本語しゃべれないけど参加したい」って来たので参加していただくこととなりました。(これも K_mat さんの Tweet 拾ったんですかね🤔)

f:id:fam_taro:20211108222543p:plain:w500

最終的には 12,3人が参加することとなりました。
お忙しい中参加してくださった皆様にはこの場で御礼申し上げます。ありがとうございました!

f:id:fam_taro:20211108221116p:plain:w800
調整さんが埋まっていく図

Robさんとの時差の調整とか、最初Zoomで開こうと思ったけど字幕機能とかがあるMeetsに変更しただとか少しごたつきはありましたが無事振り返り会当日を迎えることができました。

Rob さんってどんな人

  • 現役のGM
  • 前回の NFL 1st and Future - Impact Detection | Kaggle で 2nd の team にいた
  • 今回のコンペではほとんどの人が参考にしたであろう notebook を公開してくれたり、discussion のレスポンスも早かったりして終始コンペをリードしてくれる運営だった
    • 他のコンペの運営も見習って
  • スコア出しそうで犬飼ってそうな顔してる(他の参加メンバーのコメント)

振り返り会の大雑把な流れ

会の流れは大体下記のとおりでした。

  • 自己紹介
  • 全体所感
  • 各Solution振り返り(1st place 以外)
  • Rob さんからのコメント
  • Rob さんへの QA
  • 1st place solution 振り返り

Rob さんは振り返り会開始時(日本時間 19時)は現地朝5時らしく、終盤(日本時間21時あたり)のみ参加してもらってコメントもらう予定でした。
(現地朝7時から参加してくれるとかめっちゃ良い人じゃん)

自分は軽い気持ちで「コンペお疲れさまでした!WEEEEEEEY!」くらいのものを想定していましたが、思ったより Winner's call って感じの会になりました。

タイミングよく tito さんの 2nd place solution の説明のときに Rob さんが参加してくれたので、Rob さんも含めて 1st place solution を聞くこととなりました。 (tito は「ティト」ではなく「ティー・いとう」らしい。あと tito さんは実在するらしい)

Rob さんがいるとき英語でサポートしてくださった かまろ/Camaroさん (@mlaass1) に感謝です。

また Robさんは振り返り会参加者からの質問も快諾してくれたので、今回のコンペについて色々裏話を聞くことができてよかったです。

小ネタ

お酒が入っていたので若干曖昧です。ですので発言した人とかそもそも言ってないこととかあるかもです

  • 今回は最終予測まで複数の推論ステップがあったので、途中のアウトプットの分布をチェックするような probing は有効そうだった
    • bestfitting さんが sub 多かったのもそうじゃね?という説もあり
  • K_mat さんいわく、以前単眼 depth 推定モデルを作ったことが今回のコンペに活きた、らしい
  • 今回は Deep じゃなさそうだけどやっぱり Deep だった
  • ハンガリアン法は嗜み
    • 今回でいうとヘルメットへのプレイヤーラベルの "割当て" において使われるケースがあった
  • Rob さんがいなかったら metrics は impact helmets only になってた可能性があった
    • もっと shake が激しくなった可能性がある
  • Rob さんも事前に検証しててそこそこのスコア出してた
    • 僕は超えることができませんでした🥺

こんな感じでコンペでは大敗北をしてしまったのですが、貴重な経験も含めて色々得るものがあったので皆様もコンペが終わった後は振り返り会を開催しましょう! あとこの記事でNFLコンペに興味を持った方はぜひ Late Submit してみましょう!

コンペのためにLambdaPCを購入してみたお話

こちらはKaggle Advent Calendar 2020 - Qiita 18日目の記事です。 内容的にQiitaに残すものでもないかなということではてなブログに掲載させていただきます。

この記事ではKaggleコンペのために LambdaLabGPU付きマシンを買おうとした背景だったり、どんな手順を踏んだのか綴っていきます。 あとは実際に購入してみてどうだったのかの所感も残しておこうと思います。 この記事がGPUマシン買う人にとって参考になれば幸いです。

0. LambdaPC を知ったきっかけ

※記憶がやや曖昧です

  • たしか現職への転が決まった後の GW 頃の Zoom飲みしてるときに教えてもらった気がします…
  • 現職に就くにあたってはコンペ用にマシンを持ってた方が良いと考えてて、どうやって手に入れるか悩んでた時期です
    • 前職とかでGPU使ってクラウド代溶かすことを覚えてしまったのが原因です
    • 現職でもクラウド支援はあるのですが、さすがに画像メインのコンペで複数GPUを使うとすぐ溶けることが分かっていたのであまり当てにしてませんでした
  • 特に自作せずに国内BTOで済まそうとすると、複数GPUマシンの選択肢があまりなかったのもあります

1. あなたはLambdaPCを買うべきか?

  • まず LambdaLab で買ったほうが良いか否かは下記の通りだと思っています
    • 図の通りLambdaPC を薦められる人はかなり限られていると思います
  • GPU1枚以下の場合は国内のBTOで購入するのが良いです
    • 特にKaggle等のコンペ用にマシンに負荷をかける場合、保証は必ずつけるべきだと思います
    • 加えて万が一の場合は、国内の方が連絡や郵送の手間が少ないのも大きいですね

f:id:fam_taro:20201217222409p:plain
簡易フロー

2. 購入するまでの手順

  • そもそも自宅にGPUマシンを置くこと自体初めてでしたので、おっかなびっくりしながら購入まで進めてました

2.1 電力の確認

  • 1GPU なら問題なさそうだと聞いていたのですが、2GPUだとよく分からなかったので LambdaLab の人や前職のインフラの先輩にお話を伺いました
    • 下記は LambdaLab の人とのやり取りです
    • ついでにそもそも日本に届くのかも聞いちゃってますね
  • 電源自体は1300Wで、実際に使う際には多くても 1000W くらいだという想定をしました

f:id:fam_taro:20201217230113p:plain

  • 次に家の電力プラン的に大丈夫なのかも確認しました。
  • 幸い関西は契約アンペアという概念自体なかったので、特に問題はなさそうでした

2.2 見積もり

  • 金額の見積もりでは念の為 LambdaLab と国内BTOの両方でしました
  • ただ同じスペックで見積もると、国内BTOだと +3-40万 ぐらいかかりそうでしたので迷わず Lambda にしました

2.3 購入

  • 金額が金額で人生で一番高い買い物でしたので手が震えてたのは覚えてます
  • あとクレカによっては最大金額でも足りなかったのでちょっと焦りました
    • 枠としては海外ショッピング枠に該当するので、お手持ちのクレカとご相談ください
    • 常日頃から信用を重ね金額上限を上げることは意外と大事みたいです…

f:id:fam_taro:20201217231411p:plain

2.4 関税を支払う

  • 自分の場合、PCが空港に到着した日に FedEx から電話がかかってきて、その場でクレカで支払いをさせられました

2.5 到着

  • 注文してから 12日で到着しました
  • 海外発注なのにあっという間に届いてびっくりしました

f:id:fam_taro:20201217232135p:plain

2.6 設定

  • ほぼ何もしてないです…(最初から Docker とかほとんど入ってたので…
    • 普段から Docker 使っててよかったなとは思いました
  • ネットワーク周りの設定だけして GoTo Kaggle してました

3. 約半年使ってみてどう?

  • クラウドよりも気が楽
    • 気兼ねなく実験を回せるのは嬉しいです(その分つい脳死実験を回してしまうという罠もありますが
  • 音は気にならない
    • 自分は普段から空気清浄機使ってるせいか、音はそこまで気になりませんでした
  • ピカピカ光るのは気になる
    • 自分はPCの向きを変えれば我慢できるぐらいなのでそうしてます
    • BIOS の設定で OFF にできそうなのですがなぜか手を付けていない)
  • 空調には気を使うようになる
    • 夏場は怖いのでエアコンの温度を低めに設定してました
      • ただ学習が終わったあと部屋が寒くなりすぎて起きるということが何度かありました
    • 冬場はあまり気を使わないですが、それでも学習が終わると部屋の寒さを感じます
  • GPU 1枚と2枚の差は非常に大きい
    • コンペに参加してみたところ、やはり1枚と2枚では自由度がかなり違いました
    • 1枚で手堅い学習をしつつもう1枚でデバッグとか検証とかちょっとチャレンジな実験ができるのは大きかったです
  • 電気代は最大で月2万ぐらい
    • 一ヶ月ほぼほぼフルで 2GPU 回した場合です

4. コンペと付き合っていく上での自PCのメリット・デメリット

ありがちではあるのですが、自分が使ってみて感じた自PCのメリット・デメリットは下記の通りです

  • メリット
    • クラウドより気軽に実験できる
      • クラウドでもしっかり工夫すれば安く使えたりするのですが、そこらへんを全く気にせず使えるのは気が楽でした
    • クラウドよりレスポンスが早い
      • サクサク操作できるのは地味に嬉しいです
      • 開発PCとちょっとしたファイルのやり取りも一瞬でできるので楽です
    • GPUを回せという物理的圧を感じられる
    • 一度手に入れれば、必要なものだけ変えていけば良い
      • PC の場合パーツによって寿命が違うので、必要なものだけ変えていけばよいのは楽そうですね
      • まだ一度も変えたことありませんが
  • デメリット
    • クラウドほど手軽くスケーリングできない
      • テーブルコンペとかですと RAM 1TB 回すシーンもあるそうですが、自PC だとさすがにここまで RAM 積めないですね
    • 物理的スペースを要する
      • PC の真横にものを置くのもよくないので、一定のスペースは犠牲になります
    • 年中エアコンのお世話になる
    • 回さないと罪悪感を抱く
    • 初期費用
      • 個人によるとは思いますが、自分の感じるコンペで遊べそうな GPU にするとどうしても費用がかさんでしまいます…
      • f:id:fam_taro:20201217234630p:plain

自分の場合はこのPCのおかげで今年金メダル取れたのもあるので後悔はないですが、 決して安い買い物とは言えないので、慎重に検討していただければと思います。 (まあ2-3年 Kaggle で遊ぶつもりなら買いしかないと思ってますが!)

正直なところ画像コンペと言われるものに参加されるなら断然あったほうがやりやすいですし、 近頃はテーブルデータコンペでも GPU が輝くシーンが増えてるので、今後2-3年は遊ぶだろうなという方は買って良いと思います。 (賞金でペイしてやるという気概でも良いかもです…)

記事としてはこれで終わりです。 他にも気になることがあった場合はお気軽にTwitterとかで聞いていただければと思います!

Kaggle PANDA コンペで優勝しました(おまけ)

※ 本記事では解法については触れていません。

先日(2020年7月24日)終わった Prostate cANcer graDe Assessment (PANDA) Challenge | Kaggle で優勝しました。

f:id:fam_taro:20200807045300p:plain
リーダーボード

個人的には非常に思い出深いコンペになったので、解法とは関係ないおまけ話とかをここに残しておこうと思います。
解法については 1st Place Solution [PND] | Kaggle で述べているのでここでは割愛します。
 (スライドとか細かい日本語解説記事は後日公開するかもです)

1. 転職後初のコンペ

  • 現職に就いてから初めてのコンペが PANDA でした
  • 現職では幸運にも業務時間の一部を Kaggle に使うことができる一方、その分結果は残さなきゃなという焦り気持ちはありました
    • (ッシャの方々が🧠でポンポコGold取ってるの見てて🐼ではなく🧠参加するべきだったか?と思ったり思わなかったり)
  • 幸運にも最初のコンペで結果が残ったのでホッとした部分も少しあったりなかったり

2. My new gear(自宅PC)での初参戦

  • 現職に就くことが決定したときからGPUマシンを購入することは決めてて、丁度 PANDA を始めるときに届きました
  • Lambda PC で購入しました
    • 機会があればこれについてもどこかで報告しようと思います
  • Titan RTX x 2 ということもあって、人生で一番高い買い物となりました(購入時に手が震えてたのは思い出です)
  • 実際コンペ参加期間中(約 2ヶ月)はずっとGPU回していたので、これのおかげと言っても過言ではないです
  • 電気代について
    • 一ヶ月ぶん回したところ、大体 13-14k 円程電気代上がりました
    • クーラーもぶん回してました

3. チームマージ(終了3週前〜)

  • チームマージ直前が精神的に一番辛かった気がします
  • 僕の場合終了 1ヶ月前に Train・Test 間でラベルノイズがあることに気づいたのですが、その対処のため色々試しても Public が上がらずしんどかった時期です
  • 幸運なことに @arutema47 さんにチームマージのお誘いをいただいたので、渡りに船とばかりに飛びついた次第です
  • arutema さんがっょっょなのは普段のツイートから知ってましたし、もうひとりのメンバー(poteman)はよく知らんけど多分強そうってことで「これはもう勝ったな」という気持ちでした
    • いつものガバガバ見積もり
  • 実際 Team Slack 上では色々なアイデア出しや議論ができて学びが多かったです
    • 全員で話すときは英語だったのですが、僕は DeepL さんのおかげでなんとかコミュニケーション取れました

f:id:fam_taro:20200807051928p:plain

4. Shake(終了日)

  • 前日の Team Slack は穏やかな気持ちで、「上がると良いね〜」ぐらいの空気だった気がします
    • 終了直前の Public では 24~25 位くらいでした
    • 僕は多少(± 15位)Shake するだろうと思ってたので、Gold 取れるかも〜って気持ちでした
      • 僕たちより上位でもノイズ対策ミスってたりしてないところもあるかもしれないという想定でした
  • そして終了直後(日本時間午前9時)は下記メッセージに起こされました
  • 最初は送られた図中の #1 を +1 と勘違いしてて、「何が congratulation! やねん」って気持ちがありました
    • ただよくよく見ると #1 に見えてきて、慌てて arutema さんのツイート確認したら優勝してたことに気づきました

f:id:fam_taro:20200807053705p:plain
Teammate からのSlack

f:id:fam_taro:20200807054105p:plain
最初は +1 ShakeUpしたと思ってた図

5. 感想

  • チームメイト(arutema さん、poteman さん)に改めて感謝🙏
  • シンプルな Solution を残せて嬉しかったです
  • Titan RTX 最強!Titan RTX 最強!Titan RTX 最強!

転職しました(Lite版)

※ いつものお気持ちポエムです

現在引っ越し周りの作業で忙しい @fam_taro です。
落ち着くまでの現状報告用ですので短めです。

おちんぎんのお話とか細かい転職活動等、センシチブなお話はNote(有料)に記載予定です。(ユルチテ…
今ならなんと 1e-4 ふぁむたろうで販売予定です。

本記事では概要とか次職についてご報告できればと思います。

1. 概要

2. 転職した理由

  • もう少し機械学習とかKaggle頑張りたかったため
  • 今回が3回目の転職となりますが、これまで以上にネガティブな理由は控えめだったと思います
    • 色んなことにチャレンジさせてもらったり、各社員や会社の雰囲気も良く、そこまで大きな不満はありませんでした
      • 論文LT会 は非常に楽しかったです。興味を持ってくださった方々・参加してくださった方々に改めてお礼申し上げます
    • 今回は退職前提ではなかったので、行きたいと思える企業様に採用されなかったら引き続き頑張ろうかなという気持ちでした

3. 転職活動について

3.1. 期間

  • 2019/12中旬 - 2020/02 中旬
    • 年末年始はやってなかったので、活動してたのは 2ヶ月ないくらいです

3.2. 何社ぐらい活動した?

  • スケジュール調整には調整さん作って相手の方に投げると楽でした
  • 後半からはコロナの影響もありリモート対応も増えてきました
    • 取り組みが早いところは早くて感動しました
  • カジュアル面談を申し込もうとして辞退した企業様もあったため、やりとり自体はもう少しありました
  • スケジュールとしては結構ギチギチに詰まってたためMPをガリガリ削られました
ステップ 社数
カジュアル面談まで 8
カジュアル面談から最終面接まで 2(内定とお祈りが 1 社ずつ)

3.3. 使ったサービス

今回はエージェントさんを使う理由が特に無かったのと、あまり時間を使いたくなかったので下記のサービスを活用しました。

LAPRAS・Findy・Wantedly あたりは12月頃にちゃんとプロフィールを書いたり SNS 連携とかをして、あとは待つことが多かったです。
ほとんど同じプロフィール埋めてましたが、サービスによっていいねしてくる会社様が違ったのは面白かったです。

上記については、スキルを盛りたいというよりは現在できていること(できてないこと)や興味があること を過不足なく伝えてカジュアル面談以前のマッチングミスが起きないようにしたかったお気持ちです。

  • LAPRAS
  • Findy
  • Wantedly
  • Green
    • (怪しいコンサル会社とか SES が多かった)
  • Twitter
    • DM いただいたところにそのままカジュアル面談行ったりしました
  • 転職ドラフト
    • 自分には早かったです
    • というよりこの職種向けではなさそう?
  • 直接応募
    • rist はこのルートでした

4. コロナの影響ってあった?

  • 時世柄一応触れようと思います
  • 私自身は 2019/12-2020/02 あたりに活動していたため、大きい影響はありませんでした
  • 後半(2020年入って)からは対面予定だった面談・面接のいくつかがリモートに変更されたぐらいです
  • 現在について
    • 周りのお話を伺うと、採用活動が停止したりして返答待ちで一ヶ月経ってるところもあると聞いてます
    • また私自身の場合、1,2 月頃に比べて上記サービス上で声がかかる(気になるボタン押される)数が減ったのは実感しています
      • それでも声かけてくるところはかけてきますが…
      • 単に新年度になって一旦停止したところもあるとは思いますが
      • いずれにしてももう数ヶ月経つと状況は変わると思います

5. さいごに

  • 人生で初めて京都(関西)で働くので、詳しい方助けてください
  • Zoom 飲み誘ってください

Kaggle Master になりました(ポエム)

先日(2019/11/19)念願(?)の Kaggle Master になることができました。

これまでの振り返りも踏まえて書いてみたかった Kaggle Master ポエムを書いてみます。

1. この記事の対象

  • Kaggle に興味がある人
  • 画像系コンペに興味がある人
    • ただし細かい技術的な部分はこのポエムでは触れていません
    • 筆者は画像系コンペしかメダル取れていません。テーブルコンペはほぼ未経験ですので参考になる情報はないです
      • LightGBM で Learning Rate をチューニングしてしまうくらい分かっていません
  • 暇な人

2. 結論

  • 運ゲーに勝ち申しました
  • Kaggle はソシャゲー。時間とお金をかけて殴りましょう
    • 誰がやっても時間かかる作業はあるので、どのコンペも最後までやって損はないと思います
  • とりあえずコンペ参加しましょう。ウチもやったんだからさ

3. これまで参加したコンペとかの履歴

時期 コンペとかイベント 戦果 コメント
2018/04 《Sansan×ヤフー×DeNA》Kagglerが伝える、Kaggleの楽しみ方 - connpass 当時 Master だった onodera さんと Expert のばんくしさんが登壇してたイベント。登壇されてた皆さん楽しそうだったので Kaggle って楽しそうだなと思いました
2018/04 TalkingData AdTracking Fraud Detection Challenge 上位 48%(1881/3946) とりあえずカーネルコピペしてキャッキャしてました。Negative Down Sampling すげーーー!!!とか思ってた時期です
2018/05 Kaggle Tokyo Meetup #4 - connpass   @osciiart さんが 2-stage コンペの闇について触れていたのを憶えています。その御蔭で気胸コンペでも正気を保つことができました
2018/09 今の会社に転職 機械学習楽しそうだったので、機械学習できそうなところに絞って 4-6 月あたりに職を探してました
2018/10-11 Airbus Ship Detection Challenge(船コンペ) 上位 82%(717/882) Segmentation とか UNet で余裕wwwと思って死んだコンペです。あと転職直後でそれどころではありませんでした
2018/11- 2019/01 Human Protein Atlas Image Classification(細胞コンペ・タンパクコンペ) 上位 32%(681/2169) PyTorch に少し慣れてきてチャレンジしたコンペ。1st の bestfitting 氏が metric learning とか言ってて「???」となりました
2019/03 会社の近くに引っ越し 通勤時間が 1.5時間(徒歩・バス・電車)から 20分(徒歩) になり Kaggle に使える時間が増えました
2019/04 まで 虚無の期間 何故か競技プログラミングにハマって「AtCoder たのち〜〜〜!!!」とか言っていました
2019/04-06 iMet Collection 2019 - FGVC6(壺コンペ) 上位31%(159/521) GWはずっとパイプライン組んでた気がします。カーネル難しいなとか、@tawatawara さんが上位にいてすげーーー!って思ってた気がします
2019/07-09 SIIM-ACR Pneumothorax Segmentation(気胸コンペ) Team Gold(12 / 1475) 初メダルでした。夏休みとか会社とかあらゆるリソースを捧げました
2019/10 Severstal: Steel Defect Detection(鉄コンペ) 上位14%(329/2433) 気胸コンペのパイプラインを反省して PyTorch-Lightning で挑戦して砕け散りました
2019/10-11 RSNA Intracranial Hemorrhage Detection(脳コンペ) Team Silver(42 / 1345) @Appian42 さんの神コードや計算環境に恵まれたのもあり Silver おいち〜〜〜!とか思ってました。Appian さん takuoko さん solo gold おめでとうございます
2019/11 Understanding Clouds from Satellite Images(雲コンペ) Solo Silver(69 / 1538) きつかったのですが年内に Master になりたくて 2週間チャレンジ。Appian さんのパイプラインとかも見習って再度 PyTorch-Lightning で挑戦しました

4. 各コンペ振り返り

ここではメダルを取れたコンペについて軽く振り返ります。

4.1 SIIM-ACR Pneumothorax Segmentation(気胸コンペ)・Team Gold(12 / 1475)

このコンペは胸部 X線画像から気胸の領域を検出する Semantic Segmentation コンペでした。
評価指標はよく用いられる Dice Score でしたが、気胸がないデータに対しては全く無い(all 0) と予測すると 1.0、そうでない(1pixel でも1となる)と 0 という、FP(偽陽性)に対して厳しい評価指標でした。
そのため、後述しますが気胸の有無をしっかり分類できるかがポイントでした。

4.1.1 参加した背景

この領域は会社としても無視できない領域でもあり、会社の業務として取り組んで良いという許可をいただきました(工数としてはお察し)。
正確には政治力の高いメンバーである Kさん(おそらく日本最高齢のMaster)が取ってきてくださりました。

そのおかげで会社で Kaggle していても白い目で見られなくなりました。加えて計算資源をゲットできたのは非常に大きかったです。 ただし一部業務として取り組む以上、あまりにひどい成果だと今後会社で取り組めなくなるためそれなりにプレッシャーはありました。

上記の背景もあり、今回のコンペでは捧げられるリソースを捧げきって Gold 取るぞという気持ちで始めました。

4.1.2 序盤

始めてから気づきましたが、僕の中での Segmentation は Vanilla UNet で止まっていました。ですのでその周りの Paper のサーベイカーネルの読み込みに時間がかかりました。またカーネルでは UNet(EfficientNet encoder) が公開されていましたが、こちらは Keras で書かれていたので泣きながら PyTorch 移植を行いました。

そのおかげでネットワークの変更やテンソルの扱いに慣れることができました。
(for 文をテンソル計算に拡張したりとか)

序盤でまだ参加者が多くなかったこともあり、60~50 位くらい(ギリギリ Silver 圏)から始められた気がします。 他のメンバーも Silver 圏にいたため、情報共有のためチームマージをしました。

マージ後は、K さんが僕が作った Classification Model の結果を組み合わせるとスコアが上がることを発見したので、私は Segmentation + Classification で進めることにしました。ただしコンペ後の Solution を見ると、Gold 圏の 2/3 ぐらいは Segmentation Model だけでもできていたため、この選択は早まりすぎたようにも思えます。

不思議だったのですが、Classification Model が効果ありそうということはチームで共有されていましたが、私以外は実装してくれませんでした。不思議です。やはり Classification は難しいのかもしれません。

4.1.3 中盤

ここらへんから他のチームメンバーは業務上の都合もあり、参加が難しくなってきました。
各 Augmentation の有無やしきい値調整とかは試していただきました。

自身の作業では、 cvpaper.challenge も始まっていたのでこちらを参考にいろんな論文をチェックしたり実装したりしてました。

また外部データセットとして NIH Chest X-ray dataset (デカい) と CheXPert(デカい) が Discussion 上で共有されていました。 これらのデータセットには気胸の有無に関するラベルが付与されていたため、Classification Model の精度向上が期待できました。
特に今回の Kaggle Dataset は NIH Chest X-ray dataset の一部のデータに対して気胸のマスクを付与しているため、私の中では NIH-dataset は必須だと思っていました。

ここらへんで夏休み含む 10連休を取って、外部データセットを使った Classification の精度向上や論文実装に充てました。ですので 2019年の夏休みは Kaggle しかしていません。

ですが悲しいことに、NIH Chest X-ray dataset はあまり役に立たないという結論に至りました。 正確には NIH のラベルは正確ではなく(ところどころ Kaggle Dataset と食い違う)、NIH のラベルを使ったモデルは有用ではありませんでした。ただし後の Solution を見ると pseudo labeling には有用そうでした。

また今回はデータの配布形式が DICOM 形式であり、患者の年齢や性別・撮影方向等が付与されていました。そのため CNN(2 class classification) で作った特徴量に対し、これらの情報を加えて LightGBM で分類してみました。

4.1.4 終盤

終盤では CheXpert を使った Classification の精度向上や Loss やモデルの細かい部分の調整をしてました。 加えて初めての 2-stage 制でしたので、 Train や Predict の再現性確認・ドキュメントの準備等も行いました。

終了三日前には泣きながら optuna で LightGBM のチューニングを行いました(後の反省会でボコボコにされる項目)。

1st-stage 終了時には、自分の成果物だけ固めてアップロードしました。

他メンバーについてはコメントを控えさせていただきます。

ちなみにこの時期が精神的に一番不安定だったような気がします。
「チームとはなんだろう(哲学)」「仮に Gold を取れたとしても、それは何もしていない人が Gold を取ることになり Gold の価値を下げてしまうのではないか?」
みたいな謎のことが頭の中をよぎっていた気がします。

こうして 1st-stage を終了しましたが、順位はこんな感じでした。

f:id:fam_taro:20191123171543p:plain:w500
金が遠い

4.1.5 2nd-stage とコンペ終了

2nd-stage では 1st-stage の test dataset のラベルが与えられており、再学習が許可されていました。さらにモデル毎に再学習するか否かを選択できました。
私の場合、Segmentation の一部のモデルでは再学習時にわずかに LocalCV が下がったため、再学習したモデルとしていないモデルが混在する submission となりました。

こうして 2nd-stage を終え長かった気胸コンペが終了しました。
ただし終了時はあと一歩 Gold に届きませんでした(12th までが Gold)。

f:id:fam_taro:20191123172057p:plain

終了当日は、とりあえず疲れていたのでサクッと社内用の資料やコード整備をして即帰ってスマブラして寝ました。

翌朝起床すると、takuoko さんから DM が来ていて Gold になっていることを知りました。どうやら上のチームが BAN されたらしいです。嬉しい気持ちもあったと思うのですが、一応昨日中に自分の中では終わったコンペでしたので困惑もありました。

f:id:fam_taro:20191123172823p:plain:w300
繰り上がりました

こんな感じで初メダルは Gold でした。Gold 取れたことはもちろん嬉しいです。 加えて今回のコンペではほとんど自分で Score を上げることができたので、自信を持つことができたのも非常に大きかったです。

4.1.6 気胸コンペ反省会(後日)

幸運にも takuoko さん、pocket さん、kiyo さんと反省会をすることになりました。会場は らくスパ1010神田 です。
コンペ参加者は私と takuoko さんのみでしたが、いろんなことを共有することができてよかったです。 ちなみに私は何も知らずに LightGBM で Learning Rate をチューニングしてました。もちろん反省会でボコボコにされました。

f:id:fam_taro:20191123174725p:plain
反省会の様子

4.2 RSNA Intracranial Hemorrhage Detection(脳コンペ)・Team Silver(42 / 1345)

このコンペは 脳MRI画像から各脳出血の種類を分類する multi-label classification コンペでした。

気胸コンペの振り返りとか業務で忙しかった中、タスク的に会社の対象領域でもあったので会社のメンバーで参加しました。

脳コンペはデータ数が多く(約70万枚)、計算資源的に厳しいコンペだったのですが、逆に課金すればある程度順位取れそうという下心もありました。コンペ中 @Appian42 さんが神コード(動かすと Gold になれる) を公開してくださったおかげで、このコードをベースに取り組みました。感謝の極みです。

このコンペは 2-stage 制であり、2nd-stage では追加 test data のごく一部(1% 未満ってなんだよ)しか public LB に反映されませんでした。それもあり 2nd-stage public LB はスコアが不安定で(takuoko さんとか 1st の SeuTao さんが下位 20% にいたりする)、自身の submit がバグっているかも分からずドキドキしました。

結果としては 1st-stage とほとんど shake もしておらず、無事に Silver 取れておいち〜〜〜!!となりました。

4.3 Understanding Clouds from Satellite Images(雲コンペ)・Solo Silver(69 / 1538)

上記の脳コンペ 2nd-stage(11/5-11/13)中はほとんどできることはなく暇であり、かつおそらく Silver は取れるだろうなと思ってました。ですのでせっかくなら年内にもう一つ Silver 取って †Master† になりたいなと魔が差しました。

ですが年内に終わるコンペのうち画像コンペ(かつ Segmentation が望ましい)が雲コンペしかなかったので、頑張って参加することにしました。

鉄コンペでは初めて PyTorch-Lightning を導入しましたが至らぬ点もあり爆死しました。雲コンペでは当時足りていなかった部分(細かい使い方)や @Appian42 さんのコード等を見習いもう少し実験を管理しやすくしました(yaml で設定ファイル書けるようにしたり)。その結果短い期間ではありましたが色々検証することもでき、運良く Solo Silver を取ることができました。

コードは下記に置きました。来週の分析コンペ LT までには README にちゃんと追記します。。。

github.com

5. まとめ

こうして振り返ると、改めて "会社"・"周りの人(Twitter 含め)"・"計算環境"・"開催されるコンペ" などあらゆるものに恵まれていたなと思います。
このような中で Kaggle に取り組むことができたのは本当に幸運でした。
私にとって参加して無駄だったコンペなど一つもなく、全てのコンペで学びや自身の成長が感じられたのも幸運でした。

6. 次の目標

2019年中に Kaggle Master になるという目標(先程立てた)は達成できたので、 次は 2020 年中に Grand Master を目指そうと思います。3ヶ月に1つ Gold (うち Solo Gold 1つ) 取ればなれますしね(ガバガバ計算)。 また個人としての成績を求めるだけでなく、 LT や Discussion を通じてコミュニティに色々還元できるように意識したいです。 その結果として界隈を盛り上げる一助になればと思います。

論文: Bounding Box Regression with Uncertainty for Accurate Object Detection

またしても作成したスライドの紹介になりすみません。 :;(∩´﹏`∩);:

lpixel.connpass.com

こちらは CVPR2019にあった論文であり、先日行われた論文LT会で紹介しました。 比較的シンプルにボックスの曖昧さを数式で表し、その KL divergence を Loss として検出を行った論文です。

www.slideshare.net

論文: Clinically Accurate Chest X-ray Report Generation

こちらは論文LT会 #3 で紹介した論文です。

lpixel.connpass.com

胸部X線写真からより正確な診断レポート(自然言語)を生成する方法についてまとまってます。 レポートを診断するための強化学習の報酬を改良することで、文章の自然さのみならず、臨床的正確さを伴うレポートを生成できるようになったという趣旨です。

www.slideshare.net