Oregin
今回の宗教画テーマ分類コンペの3位解法を投稿させていただきます。
ProbSpaceの運営の皆様、共にコンペに参加し、研鑽させていただきました参加者の皆様に感謝を申し上げます。 毎回、コンペを楽しませていただきながら、色々と学ばせていただいています。 以下のブログにも全体像の図解等を掲載いたしましたので、必要に応じてご参照ください。
[【3位解法】ProbSpace開催「宗教画テーマの分類」の振り返り。]https://oregin-ai.hatenablog.com/entry/2021/09/13/232706
今回のコンペは、データの特徴として、訓練データが654枚、テストデータが497枚と、比較的データ量が少ないデータだったので、垂直・水平に反転した画像、回転した画像、セピア色に変換した画像を水増しした訓練データを作成。それぞれの画像の水増し割合を16パターンで学習を実施しました。
データの前処理については、albumentationsというライブラリを利用しました。
【前処理 共通】 こちらは、訓練データ、テストデータの両方に適用する共通の処理です。
【前処理 水増し】 こちらは、訓練データを水増しするために実施する前処理です。テストデータには実施しません。
今回は、大きく分けて、学習済みのEfficientNetを活用してファインチューニングを実施する1段目と、多値分類のモデルと、クラスごとの2値分類を実施するモデルを組み合わせた2段目の、スタッキングモデルを構築しました。 【1段目:EfficientNet】 1段目は、EfficientNetの学習済みモデルをファインチューニングし、訓練データの予測値と、テストデータの予測値を出力するモデルを16個作成しました。 それぞれのモデルで、訓練データの水増しの割合を変更することで、パターン分けしました。 このモデルは、skywalkerさんがトピックに投稿してくださっている、EfficientNetB0使ったベースラインも参考にさせていただきました。 https://comp.probspace.com/competitions/religious_art/discussions/skywalker-Post1a375b68565d3d022e6a
【2段目:LighetGBM】 2段目は、16種類の予測値を訓練データとして、多値分類するモデルの予測値に、各分類ごとの2値分類をするモデルの予測値を上書きすることで、精度を上げる方法を実施しました。 この方法は、プロ野球データ分析チャレンジで採用した方法を応用しました。
今回のコンペは、宗教画の意味するテーマを分類するコンペでした。 これまで、宗教画をじっくり眺めて、テーマを考えることがなかったので、「あ、この絵のこの部分はこういうことを表しているんだ。」と、モデル以上に自分自身も学習することができました。(笑) 途中、自分が分類する場合に、「十字架があるな」、「人が多いな」などを基準にしたりするので、物体検出が応用できないかと、Yoloにも挑戦してみましたが、なかなか精度は上がりませんでした。
参考:学習済みのYOLOv5による物体検出結果の特徴量への追加 https://comp.probspace.com/competitions/religious_art/discussions/Oregin-Post2a43024f366d7a2a8a05
新しい技術にも触れられて、とても有意義なコンペとなりました。 また、今回からProbSpaceでも、最終提出ファイル選択方式となったので、最後の最後まで、ファイル選びに悩みました。 Public:Privateが13%:87%と、Publicスコアがあまり重視できない割合だったこともあって、ShakeDownしてしまいましたが、何とか3位になることができました。 引き続き、コンペに参加していきたいと思いますので、対戦よろしくお願いいたします。
sugupoko
お疲れ様です。 貴重な情報ありがとうございます。
素人的な質問で恐縮なのですが、 OOFとPREDICTIONをLightGBMで学習させる、、、という枠組みは割と一般的なモノなのでしょうか?
申し訳ありませんが、教えて頂ければ幸いです。