Newer
Older
TIASJudgeModel / docs / 06_TEST / TEST_03_交差検証結果.md

交差検証結果 (Cross-Validation Results)

tias-train cv(SPEC_02「交差検証の実行」)で,実データ(1085 枚)の 5-fold 交差検証を 4 モデル × 2 条件 × 3 seed で回した結果.学習は研究室サーバで行い,手元には集計値・図・ログだけを回収した.表は uv run python scripts/summarize_cv.py runs で再生成できる.

項目内容
実行日時2026-09-28 00:38〜01:34(ユーザー就寝中の自律実行)
実行場所Archimedes の RTX A6000 × 2(GPU 0・1 を並行.ユーザーの許可による)
本数36 本(5-fold × 36 = 180 回の学習).所要時間の合計 88 分
コード最初の 2 本は 9445436,次の 22 本は b17fcc9,学習率 1e-3 の 12 本は 3983c2a
分割 seed42・43・44(同じ seed なら全モデル・両条件で分割が完全に同じ)

※ b17fcc9-dirty の実験 ID は,実行時にテストファイル(tests/)が未コミットだったことによる.学習に使うコード(src/)はコミット b17fcc9 と同一.

評価の読み方 (How to Read)

  • common: held_out のうち「あり」(strong)と淡紅(normal).両条件とも学習に含まれる部分で,2 条件の比較はここで行う
  • all: held_out 全体(「ややあり」を含む)
  • mild→淡紅: held_out の「ややあり」の画像を淡紅と予測した割合
  • macro F1・正解率は,3 seed × 5 fold = 15 fold の fold ごとの値の平均 ± 標準偏差
  • 学習の設定は SPEC_02「学習の設定」の既定値(AdamW・学習率 1e-4・最大 40 エポック・patience 8・224×224・色を変えない拡張).ResNet-50 と EfficientNet-B0 は学習率 1e-3 でも回した(下記「学習率について」)

結果 (Results)

モデル学習率条件common macro F1common 正解率all macro F1mild→淡紅
ConvNeXt-Tiny1e-4込み0.541 ± 0.0660.668 ± 0.0350.510 ± 0.0560.29
ConvNeXt-Tiny1e-4除外0.592 ± 0.0680.744 ± 0.0350.480 ± 0.0560.55
EfficientNet-B01e-4込み0.494 ± 0.0470.593 ± 0.0460.475 ± 0.0280.20
EfficientNet-B01e-4除外0.520 ± 0.0660.664 ± 0.0390.447 ± 0.0480.40
EfficientNet-B01e-3込み0.529 ± 0.0430.629 ± 0.0270.501 ± 0.0320.26
EfficientNet-B01e-3除外0.577 ± 0.0500.707 ± 0.0370.486 ± 0.0360.48
ResNet-501e-4込み0.574 ± 0.0460.702 ± 0.0370.516 ± 0.0490.29
ResNet-501e-4除外0.362 ± 0.0730.714 ± 0.0290.296 ± 0.0520.62
ResNet-501e-3込み0.546 ± 0.0570.649 ± 0.0660.520 ± 0.0500.24
ResNet-501e-3除外0.637 ± 0.0620.748 ± 0.0450.519 ± 0.0560.48
ViT-Small1e-4込み0.579 ± 0.0600.683 ± 0.0530.525 ± 0.0480.34
ViT-Small1e-4除外0.581 ± 0.0630.743 ± 0.0320.464 ± 0.0520.57

クラス別の再現率(common) (Per-Class Recall)

モデル学習率条件淡白淡紅紅暗赤紅紫
ConvNeXt-Tiny1e-4込み0.450.660.600.820.29
ConvNeXt-Tiny1e-4除外0.450.880.590.770.26
EfficientNet-B01e-3込み0.490.610.660.740.34
EfficientNet-B01e-3除外0.470.820.640.730.24
ResNet-501e-4除外0.040.920.110.890.00
ResNet-501e-3込み0.480.620.680.770.40
ResNet-501e-3除外0.590.830.610.790.39
ViT-Small1e-4込み0.460.700.620.790.42
ViT-Small1e-4除外0.370.880.480.810.26

fold 間の標準偏差は淡白・紅・紫で 0.1〜0.28 と大きい(各 fold の held_out にこれらのクラスは 11〜12 人しかいないため).

「ややあり」を学習から外すと (Effect of Excluding Mild)

同じ seed・同じ fold どうしで common macro F1 の差(除外 − 込み)を取った対応比較.

モデル学習率差の平均 ± 標準偏差除外が上回った fold
ConvNeXt-Tiny1e-4+0.051 ± 0.07011 / 15
EfficientNet-B01e-3+0.049 ± 0.06014 / 15
ResNet-501e-3+0.091 ± 0.08213 / 15
ViT-Small1e-4+0.002 ± 0.0488 / 15
  • 学習がうまくいった 4 つの組み合わせのうち 3 つで,「ややあり」を学習から外すと共通部分(あり・淡紅)の性能が上がる.ViT-Small は差が無い
  • 上がる主な理由は淡紅の再現率(0.6〜0.7 → 0.8〜0.9).「ややあり」は淡紅に近い色で他クラスのラベルが付いているため(TEST_02),これを学習に入れると淡紅と他クラスの境界がぼやける
  • 外して学習したモデルは,「ややあり」の画像の 48〜57% を淡紅と予測する(込みのモデルでは 24〜34%).臨床上「ややあり」は淡紅と判断されることが多いという知見と整合する
  • 一方,all(ややありを含む全体)の macro F1 は外すと下がるか同程度.「ややあり」を元のクラスとして当てる力は,入れて学習したほうが高い

モデルの比較 (Model Comparison)

ConvNeXt-Tiny(学習率 1e-4)を基準にした,同じ seed・同じ fold どうしの common macro F1 の差.

条件EfficientNet-B0(1e-3)ResNet-50(1e-3)ViT-Small(1e-4)
除外−0.015 ± 0.070(5/15)+0.045 ± 0.059(12/15)−0.012 ± 0.060(6/15)
込み−0.013 ± 0.063(5/15)+0.005 ± 0.102(8/15)+0.038 ± 0.067(9/15)

(括弧内は ConvNeXt-Tiny を上回った fold の数)

  • 「除外」では ResNet-50(1e-3)が最良(common macro F1 0.637)で,ConvNeXt-Tiny を 15 fold 中 12 で上回った.ただし下記「学習率について」の偏りがあるため,確定的な順位とは言えない
  • それ以外のモデル間の差は fold 間のばらつき(約 0.06)の範囲に収まる

学習率について (Learning Rate)

  • 全モデル共通の学習率 1e-4 では,ResNet-50 が学習不足になった(学習損失の下がりが遅く,最良エポックが上限の 40 近くまで遅れる).学習データが少ない「除外」では多数派クラス(淡紅・暗赤紅)しか予測しない状態で止まり,紫の再現率が 0.00 になった.timm の ResNet-50 の既定の重みは微調整に大きめの学習率が要ることが知られている
  • そこで BatchNorm を持つ CNN の 2 モデル(ResNet-50・EfficientNet-B0)を学習率 1e-3 でも回し,どちらも改善した
  • 注意: この学習率は交差検証の結果を見てから選んでいるため,1e-3 の結果はやや楽観的になりうる(評価データへの合わせ込み).また ConvNeXt-Tiny・ViT-Small は 1e-4 の 1 点しか試しておらず,モデルごとに調整の手間が揃っていない.公平なモデル比較には,全モデルで同じ候補から,評価とは別の検証データで学習率を選ぶ必要がある

所要時間 (Timing)

モデル学習率条件1 エポック(秒)回ったエポック数1 本(5 fold)の所要(秒)パラメータ数
ConvNeXt-Tiny1e-4込み1.4419.717027.8M
ConvNeXt-Tiny1e-4除外1.0922.914727.8M
EfficientNet-B01e-3込み1.5319.31634.0M
EfficientNet-B01e-3除外1.1123.11424.0M
ResNet-501e-4込み1.1634.622323.5M
ResNet-501e-3込み1.1618.313323.5M
ResNet-501e-3除外0.8424.411923.5M
ViT-Small1e-4込み0.9919.111421.7M
ViT-Small1e-4除外0.7122.710021.7M
  • どのモデルも 5-fold 交差検証 1 本が 2〜4 分で終わる(RTX A6000・画像をメモリに載せた状態・混合精度).画像の読み込み(レターボックス化)は 1 本あたり約 8 秒
  • 計算時間はボトルネックではない.実験の数を増やす(seed・学習率・対策の組み合わせ)余地が大きい

分かったこと (Findings)

  1. 現状の到達点: 共通部分(あり・淡紅)で macro F1 0.58〜0.64・正解率 0.71〜0.75(ややあり除外で学習した場合).all(ややあり込み全体)では macro F1 0.50 前後
  2. 「ややあり」を学習から外すと,共通部分の性能が上がる(4 組中 3 組で 11〜14/15 fold).外したモデルは「ややあり」の約半数を淡紅と予測し,臨床の知見と整合する
  3. 紫と淡白が弱い(再現率 0.24〜0.59).どちらも枚数が少なく,平均色も他グループと重なる(TEST_02)
  4. モデル間の差は小さく,ばらつきの範囲に収まるものが多い.ResNet-50(学習率 1e-3)が「除外」で最良だが,学習率の選び方に偏りがある

次の一手 (Next Steps)

PLAN_02 の Step 7(実験反復)で扱う.

  • 学習率を公平に選ぶ: 全モデルで同じ候補(例: 3e-5・1e-4・3e-4・1e-3)を,各 fold の内側の検証データで選ぶ(入れ子の交差検証)
  • クラス不均衡への対策: 紫・淡白の再現率を上げるため,クラス重み付き損失やサンプリングを独立した実験として試す(SPEC_02「クラス不均衡」)
  • 入力解像度: 224 → 320・384 で細かな色むらが効くかを見る
  • 「ややあり」の扱いの結論: 今回の結果からは「学習から外す」方が共通部分の性能は高い.ただし運用時に来る境界例をどう出力すべきか(淡紅と出してよいか)は臨床側の判断が要る
  • ベースライン比較(Step 6): 同じ held_out で TIASjudge のルールベースと並べる

サーバの容量について (Disk Usage)

  • 今夜の 36 本の重み(runs/*/checkpoints/fold<k>.pt.約 12 GB)が Archimedes の共用ディスク(/home.残り 40 GB・使用率 98%)を圧迫していたため,2026-09-28 にユーザーの判断で全て削除した(削除後の空き 52 GB.runs/ は 22 MB)
  • 予測(predictions.csv)・分割(split.json)・指標・図・ログは残してある.誤分類の分析などは重みが無くてもサーバ上でやり直せる
  • 重みが必要になったら同じ設定ファイルで tias-train cv を回し直せば数分で作れる.ただしビット単位では同じ重みにならず,指標も上表からばらつきの範囲でずれる(SPEC_02「再現性」)
  • 今後は重みを保存するかを設定で選べるようにする(例: train.save_checkpoints).Step 7 で扱う

実験 ID (Run IDs)

手元の runs/ に回収済み(.gitignore 対象).サーバ上にも同名で残っている(重みは削除済み.上記「サーバの容量について」).

20260928-003803_cv_with_mild_9445436
20260928-003817_cv_without_mild_9445436
20260928-004230_cv_effb0_with_mild_b17fcc9-dirty
20260928-004245_cv_effb0_without_mild_b17fcc9-dirty
20260928-004437_cv_resnet50_without_mild_b17fcc9-dirty
20260928-004551_cv_resnet50_with_mild_b17fcc9-dirty
20260928-004658_cv_vits_without_mild_b17fcc9-dirty
20260928-004834_cv_without_mild_s43_b17fcc9-dirty
20260928-004944_cv_vits_with_mild_b17fcc9-dirty
20260928-005106_cv_without_mild_s44_b17fcc9-dirty
20260928-005133_cv_with_mild_s43_b17fcc9-dirty
20260928-005332_cv_effb0_without_mild_s43_b17fcc9-dirty
20260928-005451_cv_with_mild_s44_b17fcc9-dirty
20260928-005555_cv_effb0_without_mild_s44_b17fcc9-dirty
20260928-005731_cv_effb0_with_mild_s43_b17fcc9-dirty
20260928-005825_cv_resnet50_without_mild_s43_b17fcc9-dirty
20260928-010038_cv_effb0_with_mild_s44_b17fcc9-dirty
20260928-010055_cv_resnet50_without_mild_s44_b17fcc9-dirty
20260928-010255_cv_vits_without_mild_s43_b17fcc9-dirty
20260928-010353_cv_resnet50_with_mild_s43_b17fcc9-dirty
20260928-010443_cv_vits_without_mild_s44_b17fcc9-dirty
20260928-010735_cv_resnet50_with_mild_s44_b17fcc9-dirty
20260928-011122_cv_vits_with_mild_s43_b17fcc9-dirty
20260928-011330_cv_vits_with_mild_s44_b17fcc9-dirty
20260928-011834_cv_resnet50_with_mild_lr1e-3_3983c2a
20260928-011847_cv_resnet50_without_mild_lr1e-3_3983c2a
20260928-012047_cv_resnet50_with_mild_lr1e-3_s43_3983c2a
20260928-012049_cv_resnet50_without_mild_lr1e-3_s43_3983c2a
20260928-012253_cv_resnet50_without_mild_lr1e-3_s44_3983c2a
20260928-012300_cv_resnet50_with_mild_lr1e-3_s44_3983c2a
20260928-012457_cv_effb0_without_mild_lr1e-3_3983c2a
20260928-012525_cv_effb0_with_mild_lr1e-3_3983c2a
20260928-012716_cv_effb0_without_mild_lr1e-3_s43_3983c2a
20260928-012822_cv_effb0_with_mild_lr1e-3_s43_3983c2a
20260928-012950_cv_effb0_without_mild_lr1e-3_s44_3983c2a
20260928-013114_cv_effb0_with_mild_lr1e-3_s44_3983c2a