画像分類コンペ実践
転移学習・データ拡張・TTA・fold アンサンブルで画像分類コンペに取り組む流れを学びます。
概要#
画像分類コンペでは、ImageNet 等で事前学習済みのモデルを使う 転移学習 が標準です。 ゼロから学習するより少データ・短時間で高精度を狙えます。L7(CV)の実践編です。
メモ
画像コンペは GPU が前提です。デバッグは少枚数・小解像度で行い、本学習だけ GPU を有効化して クォータを節約します(L7-09 参照)。
1. データ確認#
import pandas as pd
df = pd.read_csv("/kaggle/input/<competition>/train.csv") # image_id, label
df["label"].value_counts() # クラス分布(不均衡を確認)クラスの偏り・画像サイズ・破損画像を確認し、層化した 交差検証 を設計します。
2. 事前学習モデルのファインチューニング#
import timm, torch.nn as nn
model = timm.create_model("tf_efficientnet_b0", pretrained=True, num_classes=n_classes)
# 通常の PyTorch 学習ループ(AdamW + 小さめ学習率 + 早期終了)事前学習時より**小さい学習率**で微調整し、検証で早期終了します。
3. データ拡張と TTA#
# 学習: 反転・回転・切り抜き・色変換などで水増し(過学習抑制)
# 推論: TTA(複数の拡張版を予測して平均)でスコア底上げデータ拡張 は画像コンペの効きどころです。正規化の統計量は学習・検証で必ずそろえます。
4. fold アンサンブル#
各 fold のモデルでテストを予測し、平均します。さらに別アーキテクチャを混ぜると多様性が出ます。
test_pred = sum(fold_models[k].predict(test) for k in range(5)) / 5