kaggleでの画家分類について(Painter by Numbers Competition)

  • 10
    いいね
  • 0
    コメント

本記事はDeepLearning Advent Calendar 12月19日の記事です。

Kaggleにて画家分類が行われていましたので、
本記事では、その手法について、第1位を獲得した人を例に、見ていきたいと思います。

概要

このCompetitionについて

Painter by Numbers Competition

 このコンペは、Kagglerであるsmallyellowduckさんが、自分自身でKaggleコンテストをデザインし、開いたというコンテストです。(そのため、賞金なしのplayground competitionとなっています。)
開催期間は、2016/4/29(金) - 2016/10/31(月)で、参加チームは41Teamと、賞金ありのコンペに比べれば規模は小さいです。
 ただ、「画家分類」というテーマは面白いと思いまして、手法もDeepLearningと関連がありましたので、こちらで紹介させていただこうと思います。

Competitionの目的、内容

 このコンペでは、絵画が誰によってかかれたかを目的としていません。むしろ、2枚の絵画を比べて、同じ画家が描いたのか、それとも違う画家が描いたのかを判定することを目的としています。
その上で、smallyellowduckさんは、以下の2つのことを期待しています。

  1. 新しいクラスに推論可能となるような分類アルゴリズムの構築
  2. 既存の画像分類アルゴリズムに対する望ましい改善

です。
 1に関して、smallyellowduckさんは、siamese_neural_networkを紹介しています。このモデルは2つの画像パッチを入力し、その特徴量の誤差をモデルに学習することでよりロバストな画像特徴量を得ようとする手法です。[siameseネットワークモデル]
 2に関して、今回のデータセットの画像は、サイズが縦横、バラバラです。そのため、このままでは入力が異なるサイズの画像となっているため、何らかの前処理が必要となってきます。この異なるサイズの画像に対して、どの様に"interesting"な部分を特定して画像を加工していくかのアイデアを見たいと言っています。
 今回のコンペのデータセットは、トレーニングセット = {画家:1584人、絵画:79433枚}、テストセット = {絵画:23817枚}となっています。(テストセットは便宜上、13グループに分かれています。)トレーニングセットでモデルを構築後、そのモデルでテストセットの絵画の1枚1枚を比較していき、同じ画家によって描かれたかどうかを判定する、という仕組みになっています。
また、各画家の描いた画像数もバラバラです。[下画像 : 各画家の絵画数]
number-of-paintings
さらにいうと、トレーニングセットに含まれる絵画を描いた画家は、テストセットに存在しないこともあり、その逆も然りです。あくまでも、目標は、2つの画像を見比べたときに、その画像が同じ画家によって描かれたか、そうでないかを区別することです。画家の描く特徴を学習していなくても、類推できるモデルの汎用性が試されます。

Compititionで1位にランクインされた方の手法

今回、1位にランクインされた、Nejc ilenicさんです。 Githubにソースを公開しています。(使用ライブラリ:Keras(with Theano backend)、Numpy、Scikit-learn)
順序として、手法のフローは以下の様になります。
トレーニングフロー.png

CNNの構造は、こちらに載っています。3×3畳み込みフィルタ、2×2プール、活性化関数にはPReLUを用いています。

Kaggleのコンペでよく用いられる様になってきたと言われている、次元圧縮法の一つであるt-SNEは、内部でPCAをあらかじめ実行しているようです。
[こちら]がとても参考になりました。

この手法による結果は、以下の通りとなります。

  • テストセット全体を用いた場合、AUCにおいて、0.9289の値を出した
  • テストセット1(トレーニングセットに存在する画家たちの絵画)の場合は、AUCは、0.94218
  • テストセット2(トレーニングセットにいない画家たちの絵画)の場合は、AUCは、0.82509

結果に対する考察は、

  • 実際に画家のユニークな描画を分類することはできるが、学習していない画家に対していは、今のモデルでは精度が悪くなってしまう。
  • 今後は、Siameseネットワークモデルを焦点において、改善していきたい。

お粗末ながら、以上となります。

この投稿は DeepLearning Advent Calendar 201619日目の記事です。