Kaggle奮闘記 〜Kuzushiji Recognition〜
最近、仕事やらkaggleやら応用情報やら数検やらで忙しかったので更新が滞っていました(泣)
だいぶ落ち着いてきたので、最近まで頑張っていたkaggleについて書いていこうと思います。
Kuzushiji Recognition
今回のコンペはくずし字認識。なんと日本語のコンペです。その分メダルはなかったのですが(笑)
私の成績は80/293。なかなか難しいコンペでした。

今回コンペのまとめ、反省をしつつブログを書いていきます。
くずし字コンペのタスク
以下のような古書の文字が書いてある場所とその文字がなにであるかを当てます。

大きく分けて、領域検出と文字認識のタスクがあります。
領域検出
領域検出といえばFaster RCNNやSSD、YOLOだと思っていましたが、kaggleカーネルでcenternetというものを知りました。
centernetのカーネルはこちら
結局精度高かったのでこちらを使用しました。すばらしいカーネルありがとうございます。
テストデータに対して当てはめるとこんな感じの予測をします。

文字認識
最近pytorchを覚えたので、pytorchで作ってみました。 pnasnet5-largeという学習済みモデルを使用しています。
予測した文字を正方形に切り取って、グレースケール化や回転、拡大、平行移動をかけました。文字認識のため、反転はしませんでした。
また、5枚以下の画像は5枚に、400枚以上の画像は400枚にして枚数の偏りを減らしました。

予測時間が非常に長いです(RTX2080Tiで30時間かかっていました。)
以下は予測結果です。

個人的には意外と予測できてる!という感じでしたが、上位陣の人はどれくらい当たっているものでしょうか。非常に気になります。
やってよかった点
-
Faster RCNNを実装することができた
-
centernetを知ることができた
-
大金叩いて買ったGPUを活かすことができた
-
pytorchを使えるようになった
-
学習済みモデルの偉大さを知った
反省点・やってみたかったこと
物体検出に関して
- centernetを学びたかった
centernetの理論が何となくしかわかっていないので、しっかり勉強したい。 - 前処理をしっかりしてFaster RCNNでも予測したい
文字が小さいのでcropはしてたが、カーネルのように画像に応じたcropはしていなかった。これをすればもう少し精度が上がった可能性がある。 - いくつかの組み合わせで精度を上げたい
自分で作成したモデルが雑魚すぎて組み合わせたら精度が下がってしまった。精進します。
文字認識について
- 前処理をいろいろ試したかった
グレースケールは必要だったのか、回転や平行移動はどれくらいがよいのか。 - 4000分類もいらなかった
約4000値分類だが、実際予測したラベルは2800種類。頻出していない文字は思い切って捨ててもよかったかも - 文字の並びで推測できた?
やっていいのかわからないが、人が文字を読む時って前後の文字から推測するはずなので、このコンペでもそれが使えたかもしれない。自然言語処理を生かせるときだったかも。 - 予測に30時間はかかりすぎでは?
resnet101くらいでよかったかもしれない。まあ精度上げるためなのでしょうがない。
全体的に
-
評価指標F値がどうすれば上がるのかを考える必要があった
-
そもそもメダルなしコンペだと知った頃には引き返せないところまで来ていた
最後に
勉強になった楽しいコンペでした。開催してくださった方、kaggleカーネル投稿してくれた方ありがとうございました。
コードを綺麗にしたので、需要があればコードあげます。(ただ、カーネルで十分な気も(笑))
2/18追記:この記事でコードあげました
Comments
Loading comments...