メラノーマ判定モデル競作ベンチ
公開データセット HAM10000(11,700枚・7クラス)で3つのCNNをマルチエージェントで競作し、
同一の train/val/test 分割で比較した実測ベンチ。生ログとコードは全公開。
結果(test 1,170枚・共通スプリット)
| 候補 | arch | balanced acc | macro F1 | macro AUC | size | score |
|---|---|---|---|---|---|---|
| 🥇 B | DeiT3-S ViT | 0.9248 | 0.9181 | 0.9932 | 86.8MB | 89.7 |
| 🥈 C | MobileNetV3(蒸留) | 0.8095 | 0.7935 | 0.9679 | 16.2MB | 84.1 |
| 🥉 A | EfficientNet-B3 @384 | 0.8552 | 0.8434 | 0.9838 | 43.3MB | 82.4 |
スコア = balanced_accuracy 60% + macro F1 20% + macro AUC 10% + 効率(速度/サイズ) 10%。
Aは512pxでOOMしたため384pxに降格して実測。Cはバッチ1で4.1ms(RTX 4090実測)。
競作の方法
① 共通ハーネス(train.py)とtrain/val/test固定分割を先に確定 → ② 3つの独立エージェントが別アプローチで実装(A: 高解像度EffNet / B: ViT系・focal loss / C: 軽量モデルへの知識蒸留)→ ③ RTX 4090で同一条件のフル学習 → ④ 共通テストセットで機械採点。
学習データ: HAM10000 train 8,190枚 / val 2,340枚 / test 1,170枚。総GPU費は実費 $0.74(予算上限$200に対し0.4%)。
学び
・データ量が1万枚規模のとき、強Aug+focal lossを合わせた小さめViTがEffNet高解像度を上回った(val_bacc 0.93 vs 0.86)。
・軽量蒸留モデルCは16MBでbacc 0.81 — エッジ展開なら実用線。
・OOMは「512px一発」ではなく段階的にフォールバックする設計にすべきだった(Aの初走は512pxでOOM)。
生データ
学習ログ・metrics JSON・全コード: GitHub(後日公開)
データセット: HAM10000 (hawking32/ham10000_ttv、非gated)
ハーネス: train.py / train_a.py / train_b.py / train_c.py — 同一の評価関数・同一分割を強制
Shitate LAB — 2026-10-27 実測。このページの数値はすべて実ファイルから生成した実測値です。