画像コンペの取り組み方
今回は一例として、筆者の画像分類コンペの取り組み方を紹介していきたいと思います。

画像分類コンペの取り組み方
Exploratory Data Analysis(EDA)
まずはタスクのイメージをつかむため、実際にどんな画像とラベルが付与されているのかを可視化していきます。ここでコンペやデータの概要を確認しておくことも重要です。ラベルごとの画像枚数も併せて確認しておきます。ラベルにノイズが含まれているようなデータセットであれば、同じラベルを持つ画像を複数枚可視化してどのようなノイズなのかを確認します。画像データの場合は基本的には画像とラベルの情報が与えられるケースが多いので、テーブルデータと比較するとシンプルなEDAになります。
少しテクニックを紹介すると、画像ファイル名から日付との関連性を探ったり、画像のハッシュ値を取ることで類似した画像を見つけたりすることもあります。この辺りのテクニックについてはKaggle Days Parisで紹介されている「Dirty Tricks for Image Classification」を参考にするといいでしょう。
とりあえず学習&サブミット
最初の学習&サブミットでは試行錯誤用のベンチマークを作成します。経験的に、ニューラルネットは層を深くしたり、パラメータを増やしたりすると性能が向上します。一方で、1回の実験にかかる時間が増えてしまうので、コンペの終盤に変更を加えます。私はベンチマークとして軽量な「ResNet-50」というニューラルネットワークを採用することで、その後の試行錯誤の実験コストを小さくするようにしています。
最初のサブミット後にはデータ拡張と学習率、最適化手法のチューニングを行っておき、良いハイパーパラメーターの目星を付けてその後の土台にしておきます。そもそも「ResNetとは?」という方には、内田祐介氏の論文をお勧めします。画像認識で用いられるネットワーク構造の変遷を知ることができるのでオススメです。
また、コンペで勝つためには最初のベンチマークを早く作り、その後の試行錯誤をやりやすくすることが重要だと思っています。そのために私はコンペ用のパイプラインを作成しています。特に画像コンペではこれまでのコンペで使ったコードを流用しやすいので、自分なりのパイプラインを持っておくといいと思います。
論文と過去コンペの調査
画像コンペは学会とひも付くなど研究色が強く、ディープラーニングに関する研究のトレンドを追う必要があります。締め切りまでに時間があるコンペに取り組む際には、arXivやGoogle Scholarなどのウェブサイトで最近の手法を調査します。個人的にはこの辺りの取り組みが画像コンペの特徴であり面白いポイントだと思っています。
最近のトレンドを大まかに把握できたらコンペのデータセットに手法を適用してみます。主な手法はGitHubに実装が公開されていることが多いですが、実際に論文の手法を適用してみると多くの場合で精度が出ません。精度が出ないのはハイパーパラメーターが悪いのか、データセットに依存して精度が出ないのかなど、さまざまな理由が考えられ、切り分けはとても難しいです。
筆者の場合、調整のために数回は学習を回しますが、それでも精度が出ない場合は他の手法を試していき、タスクの分野全体について知ることに重きを置いています。この部分は人それぞれの考えや意見があると思いますが、私の中でKaggleは学ぶための動機付けの一つでもあるため、勝つためが60%、知る・学ぶためが40%ぐらいの気持ちでコンペに取り組んでいます。
過去コンペの調査も勝つために重要な取り組みです。Kaggleの画像コンペはオーソドックスなタスクが多いので、似たようなタスクが過去のコンペで開催されている場合があります。Kaggleではコンペ終了後に上位の手法が公開されていることが多く、過去の似たタスクのコンペの上位解法が参考になることもあります。
コンペ特有の課題への対処
EDAをしていく中で、クラス数ごとのデータ数が不均衡であったり、ラベルにノイズを含むなどのコンペ独特の課題が見つかったりします。課題を見つけたら、コンペ独自の対応策を実施していきます。例えば、「iMet Collection 2019 - FGVC6」というコンペでは、データセットにラベルノイズが含まれていました。バッチサイズをなるべく大きく取ることでノイズの影響を軽減したり、予測値の誤差が大きいものを学習データから省いて学習させたりすることが効果的でした。
アンサンブル
最後に精度を上げるためにアンサンブルを行います。この段階になるとベンチマークとして作成していたResNet-50を「SEResNeXt-101」「Inception-ResNet-V2」「PNASNet-Large」「EfficientNet」などに変えて学習を回します。実験の過程で学習したネットワークもアンサンブルの1つとして利用します。私はコンペの序盤から中盤まではシングルモデルで精度を上げることに注力し、終盤2週間はアンサンブルモデルの作成をします。多くの時間をシングルモデルの改善に費やすのは、個々のモデルが強くなければアンサンブルを行ったとしても最終的に金メダル以上を取ることが難しいためです。
筆者はこれまでに取り組んだどのコンペにおいても上記の取り組みを行っています。第3回を担当した加納さんと一緒に最近取り組んだ「iMet Collection 2019 - FGVC6」では、論文調査&適用の段階でAttention Branch Networkがタスクに向いていそうなことだったり、データ数を増やすためにPseudo Labelingに取り組んだりしたことで金メダルを獲得し、最終的にはCVPRワークショップで発表を行うことができました。
2人でさまざまな論文や過去コンペの解法を読み、議論しながら実装を行ったのでチームとしての楽しさを味わいながら金メダルを取ることができました。私は今まで個人でコンペに参加することが多かったですが、チームとして取り組むことで画像コンペの違った面白さを知ることができたと思っています。
最後に
今回はKaggleにおける画像コンペの特徴と私の画像コンペに対する取り組み方を紹介しました。近ごろ、Kaggleでは画像データを扱うコンペが乱立している状況ですが、これを機に画像コンペに挑戦する人が少しでも増えれば幸いです。

- 矢野正基
- ディー・エヌ・エー AI本部 AIシステム部 データサイエンス第1グループ
- 2018年11月DeNA入社。Kaggle Master。大学時代はオペレーションズリサーチを専攻し、タクシー割り当て問題やブラックボックス最適化の研究に従事。趣味でKaggleに挑戦してきた。現在はオートモーティブ事業への機械学習の応用に向けた開発を行っている。