catlaの備忘録

忘れないように書いておきます。

kaggleに初挑戦したお話

はじめに

この記事では、具体的な解法は書いておりませんのでご了承を。 基本的には、初挑戦した感想を書いております。 アドバイス等ございましたらぜひ@katsura_jpまでご教授お願いいたします。

初参戦したコンペ概要

初挑戦コンペはTGS Salt Identification Challengeでした。 どんなものかというと、地震画像(sesmic image)から塩分が含まれている箇所をセマンティックセグメンテーションしようという内容です。 あらかじめ報告しておくと、ゴールド圏内に入ることができました。

参加するきっかけ

まず、なぜ参加しようと決めたのかというお話からしたいと思います。 私自身、Kaggleは1年ほど前に存在を知り、なんとなくアカウントを作成していました。 しかし、自信もなく、具体的に何から始めればいいの?と感じていました。

しかし、今回参加することを決めたのは、一つのことがきっかけとなりました。

私は今、筑波大の情報科学類に所属しています。学群学類というのは実際は他大学でいう学科に該当します。そこで今年「情報特別演習」という授業を履修したのですが、 どんな授業かというと、(情報学で)興味あることやったら単位あげるよ!という内容です。私は、コンピュータビジョン系でミーハーなのでディープラーニングに興味があったので、 同大学で関連している教員をクラスの担任から紹介されて、その先生にお願いしました。

その研究室でディープなら学生の方が詳しいからとの理由で紹介していただいたのがKaggle masterのlyakaap先輩で、先生からkaggleやってみればいいじゃんと言われたのが参加のきっかけです。

参加する前の知識量

参加する前後あたりでの私の知識ですが、実際はとても貧しいものでした。 5月ごろには先輩とkerasでCNNでMNISTのクラス分類を行い、「おぉ〜」と感動したのを今でも覚えていて、5~6月は、kerasの使い方とDLの基本(順伝播、逆伝播、CNN、最適化、活性化関数あたり)を勉強しました。正直、最適化に関しては、数式をみてもわからない部分も多少、いやたくさんあってこころが折れてました。そして、7月ころ、授業の中間発表のためにそれとなくやってみたのが、U-Netで人物をセマンティックセグメンテーション。実際そのくらいの知識量です。

参加した直後

参加したのは、ちょうど夏休みに入る直前でした。実際は夏休み入ってからやろうと思ってたのですが、課題を早めに終わらせていたので暇だからやるかとなって早めました。 当初の目標がブロンズメダル取れたらいいなくらいの気持ちでした。

こちらが初めてのsubmission f:id:katsura_jp:20181021211521p:plain

8月4日

たしか、順位的には50%くらいだったかな。kernelの最高スコアより低くて凹んだ記憶があります。 f:id:katsura_jp:20181021211822p:plain

8月8日

このときは、kernelをほぼコピペでそれにflipのみのaugmentを加えました。が、その直後、それより高いkernelが登場して、凹んだ記憶があります。 f:id:katsura_jp:20181021212153p:plain

8月12日

参戦して、約一週間、semantic segmentationに関連する記事をあさり、Kfoldを試してみるとスコアが伸びて、シルバー圏内へ。 とても嬉しい気もちになり、目標をブロンズからシルバーへ。

コンペ終了まで

しかし、ここから1ヶ月間休戦へと入る。理由としては、飽きたからではない。もうアイディアが無いからだ。1ヶ月間放置した結果、44位から350位くらいまで下がっていて、 気持ちが鬱に。。。私はkernelばかり漁っていたのだが、8月末からdiscussion漁りを開始する。そこでいろんな情報を提供していたのが、カエルアイコンのHeng先生。 しかし、ResNetの存在すら知らなかった私は、はじめ何を言っているのか理解できなかった。

8月末~9月上旬にかけて、ネットワークの知識を増やそうと思いネットサーフィン。ありがたいことに夏休み期間で時間もあったので、一週間めちゃくちゃ知識を詰め込んだ。 ResNetをはじめSENet,ResNeXtなど。ここで、discussionをみて見ると、Pytorch使ってる人おおいなと思い、Pytorchを使い始めようと思った。

約一週間Kaggle外で知識を詰め込み、はじめて英論文も読んだ。が、専門用語が多すぎて初めは1本読むのに丸1日。読んだが理解をしたかと言われると、していない。 一番なんだよこれ、と思ったのが"state-of-the-art".

そんなこんなで、充電期間を終え、回し切ったモデルを提出。 f:id:katsura_jp:20181021214419p:plain

9月27日
シルバー圏内に戻れて、めちゃくちゃ嬉しかった。このときは、どん底から上がったので、嬉しさは大きいものでした。

もともと、画像サイズを256x256でinputしていたので、128x128でやろうかチームマージしたいと考えてるなか、マージしたのが、お世話になってるlyakaap先輩。 マージ直後は、マージ相手を探していたのでやったーという気分だった。が、その気分もすぐに冷める。マージして思い知ったのが、自分のDLML知識の少なさ。 soft votingやoofの意味を知らず、やばいと感じた。一人でやっていたのは、すべてhard votingだったのもここで気づく。

ここでの心境としては、先輩の足を引っ張るわけにはいかないという焦り。また、数日たち、ギリシャ人の人とマージをする。英語でコミュニケーションをしたことがなかったため、不安も多かった。しかし、チームメイトは、こんな私にも優しかった。

kaggle mastar5人とnovice1人。議論を共にする自信が0を下回ると、食らいついていこうという気持ちが2147483647に変わった。 基本的にDL系は他の人に任せて後処理に回った(が、終わってから後処理部分の核となっていたものが機能していない説が出てややアイデンテティを消失気味になっている笑)

[2018/10/22 追記]

チームメイトが検証くれた結果、後処理なしではゴールド圏に入れなかった模様。

結果

結果として、当初ブロンズ目標だったものが、ゴールドを手にしていた。嬉しい気持ちもあるが、悔しいという気持ちもある。今回に関しては、個人戦だとシルバー入れていたのかも不安だし、謙遜しすぎかもしれないがおこぼれをいただいた感もある。自分がもっと知識をつけていたらもっと上にいけたはずだと感じもした。

ただ、topの人たちが、どのようにスコアを上げるかを近くでみれたのはもっとも大きな収穫だ。

これから

私はまだ大学2年。時間もたくさんあるし、1、2年で単位も順調に取っているので、来年以降はもっと時間がある。lyakaap先輩を慕っているので、院卒業時にはkaggle masterなりたいと野望を心の中に秘めていたが学部卒までになってやると変えた。

また、これからは、画像認識に関する論文を読んで、知識をもっと入れて、いつか今回のメンバーとチームを組むにしろ、戦うにしろ、肩を並べられる存在になりたいと強く思った。

さいごに

やや、ポエム気味な文章になってしまったのは申し訳ない。。。

今回のチームメイトには最大の感謝とこれからの健闘を祈りたい。

Thank you "Leaning the Future"!!

f:id:katsura_jp:20181021221534p:plain

f:id:katsura_jp:20181021221722p:plain

追記[2019-02-10]

Kaggle Meetup Tokyo#5で発表したスライドです。解法載せてあります。

speakerdeck.com