Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RSNA2024振り返り

nanachi
February 15, 2025

 RSNA2024振り返り

第3回 関東Kaggler会に使用した資料です.
- 一部時間の都合上非表示にしていたスライドを再表示しました.
- "1st stage: モデルの構造と訓練 その2"のスライドについて, モデル構造からsigmoidが抜けていたので修正しました.

第3回 関東Kaggler会: https://connpass.com/event/341085/

nanachi

February 15, 2025
Tweet

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前: 和田孝喜(Twitter/Kaggle: ななち /NANACHI) • Tier: Competitions Master

    • 学生時代はNTKとかNNの汎化バウン ドとか • IceCubeでたまたまメダル取れてから kaggleが楽しくなり継続
  2. 本日の発表について • RSNA2024の1st placeの解法を発表! ✓discussionの解法に書いたこと ✓discussionの解法に書ききることができな かった詳細 ✓各種モデルに対してどのような気持ちを込め て作ったか •

    この発表で特に伝えたいこと ✓パイプラインコンペで意識するべきこと ✓モデルの気持ちを考えることの重要性 ✓面倒くさがらず実装することの重要性 RSNA2025にきっと役立つ!! 聞いた人全員金メダル!!
  3. RSNA2024概要(タスクとラベル) タスク 腰椎のMR画像から各患部のseverityを3つに分類 - 1人あたり5つの椎間板 L1/L2, L2/L3, …, L5/S1 -

    1つの椎間板当たり5つのラベル - Spinal Canal Stenosis (SCS) - (left/right) Neural Foraminal Narrowing (NFN) - (left/right) Subarticular Stenosis (SS) - クラス Normal/Mild, ModerateおよびSevere 6 L1/L2 L2/L3 L3/L4 L4/L5 L5/S1 右画像出典: /https://miamineurosciencecenter.com/en/conditions/herniated-disc/ 各椎間板の位置 椎間板ごとのラベル位置 ラベル
  4. RSNA2024概要(データ) 一人当たり3種類のMR画像 - Sagittal T2/STIR - Sagittal T1 - Axial

    T2 画像出典: https://www.lecturio.com/concepts/computed-tomography-ct/ MR画像 患部の位置を特定するための補助ラベル その他 患者ID MR画像のID MR画像のZ軸 ラベル種類 椎間板種類 XY座標 これをチェックすることでannotatorが どこを見てラベルをつけたかわかる train_label_coordinates.csv
  5. 基本的なアプローチ アプローチ 患部の位置予測=>severity予測(過去のRSNAを参考) - 1st. 各levelのinstance number予測 - SCSとNFNは3D-CNNで予測 -

    SSはSCSのinstance numberとdicomのメタ データから計算 - 2nd. XY座標予測(2D-CNN) - 3rd. Severity予測(2.5D-CNN) - SCSはSagittal T2とAxial T2で予測 - NFNはSagittal T1とAxial T2で予測 - SSはAxial T2のみで予測 詳細 Sag T2 Sag T1 Z予測(NFN) Ax T2 Z予測(SCS) Z計算(SS) XY予測(SS) XY予測(SCS) XY予測(NFN) severity(SCS) severity(NFN) severity(SCS) 推論パイプライン
  6. タイムライン baseline 2-stage(早めにやっておくか…) - 3D-CNNでxyz座標予測 - 予測したxyzを中心に患部Crop - 2D-CNNでseverity予測 Private

    LB: ~200th New baseline 3-stage(めんどくさがらずにやるぞ!) - 3D-CNNでZ予測(SSはSCSから計算) - 予測したZ座標に対応するMR画像から xyを予測. 患部Crop - 3chの2D-CNNでseverity予測 Private LB: ~19th 2D=>2.5D 3-stage(かっこいいことするぞ!) - 3chCNNから2.5Dに切り替え(エンコー ドされた特徴はAttention Poolingでま ぜまぜ) - Aux loss追加(後述) Private LB: 8th Final 3-stage(モデルガチャガチャするの楽しい!) - Attention Poolの前にbi-LSTM追加 - Ensemble (ConvNext&efficientnet-v2) - その他細かい調整 Private LB: 1st 6月18日 8月20日 9月1日(コンペ終了40日前) 9月27日(コンペ終了2週間前)
  7. 1st stage: データの前処理 MR画像を読み込んで順番通りにスタック 基本 1. Meta dataに従って順番通りにスタック 2. 画像を384

    × 384にreshape 3. スタックした画像を 0, 1 に正規化 4. 𝑍 = 32にそろえるためにzero padding 32に揃えたのはscs(nfn)のMR画像の枚数が32を 超えず, またキリが良かったから. 詳細
  8. 1st stage : モデルの構造と訓練 その1 - 3D ConvNeXt Encoder -

    Global Average Pooling - level毎にinstance numberを予測するヘッド (SCSは5個, NFNは10個) ※NFNはleftとrightが存在するため10個のヘッド モデル構造 - 損失関数: CE Loss - 32クラス分類問題として訓練(𝑍 = 32なので) 訓練 3D ConvNeXt Encoder Global Average Pooling 3D L3/L4 Head L2/L3 Head L1/L2 Head L4/L5 Head L5/S1 Head CE Loss CE Loss CE Loss CE Loss CE Loss
  9. 1st stage: モデルの構造と訓練 その2 - 基本は前と同じ - ただしヘッドは3次元(XYZを回帰で予測) モデル構造 -

    損失関数: L1 Loss - 3dimの回帰問題として訓練(XYZ) - ラベルはそれぞれ Τ 𝑋 𝑊𝑖𝑑𝑡ℎ, Τ 𝑌 𝐻𝑒𝑖𝑔ℎ𝑡, Τ 𝑍 32 を使用 - XYは補助ロスとして機能(ZだけでなくXYも わかったほうがモデル君うれしいはず!) 訓練 3D ConvNeXt Encoder Global Average Pooling 3D L3/L4 Head L2/L3 Head L1/L2 Head L4/L5 Head L5/S1 Head L1 Loss L1 Loss L1 Loss L1 Loss L1 Loss sigmoid sigmoid sigmoid sigmoid sigmoid
  10. 1st stage 小ネタ(cls head vs reg head) - 基本的に分類ヘッドのほうが全体的には良い傾向 -

    ただし, 回帰ヘッドは分類ヘッドに比べて大きく外す確率が低 い傾向 アンサンブルして大きく外す確率を(気持ち)下げた ※+-1, 2くらいのずれならリカバリーできる範囲だが, それ以上 外されるとしんどいので気持ちだけでも下げるのは重要! Head error=+-0 error=+-1 error=+-2 error>=+-3 cls head 71.08% 27.04% 1.43% 0.44% reg head 67.48% 30.59% 1.61% 0.31%
  11. 1st stage 小ネタ(ConvNeXtの実装) ConvNeXtは, - 強い! - 速い! - 実装しやすく拡張も容易!

    のでベースラインでは一旦これ使っとけば良いと思ってます! RSNA2024をやってるときにめちゃくちゃお世話になったrepo https://github.com/FrancescoSaverioZuppichini/ConvNext ResNetから少しずつConvNeXtに変えていくのでわかりやすい!
  12. 2nd stage: データの前処理 instance number を用いて3chにする 基本 1. L1/L2~L5/S1までのinstance numberの中央

    値をとり, それを中心に前後1枚のMR画像を スタック 2. 画像を512 × 512にreshape 3. スタックした画像を 0, 1 に正規化 詳細
  13. 2nd stage : モデルの構造と訓練 - 2D encoder (ConvNeXt & efficientnet-v2)

    - Global Average Pooling - level毎にXY座標を予測するヘッド モデル構造 - 損失関数: L1 Loss - 2dimの回帰問題として訓練(XY) - ラベルはそれぞれ Τ 𝑋 𝑊𝑖𝑑𝑡ℎ, Τ 𝑌 𝐻𝑒𝑖𝑔ℎ𝑡を使用 訓練 2D Encoder Global Average Pooling 3D L3/L4 Head L2/L3 Head L1/L2 Head L4/L5 Head L5/S1 Head sigmoid sigmoid sigmoid sigmoid sigmoid L1 Loss L1 Loss L1 Loss L1 Loss L1 Loss
  14. 3rd stage: データの前処理 instance numberとXYを用いてCrop 基本 1. 画像を512 × 512にreshape

    2. instance number を中心に前後2枚までス タック(5ch) 3. スタックした画像を 0, 1 に正規化 4. XY座標をもとにCrop Cropの範囲はMR画像を眺めながら決定 詳細
  15. 3rd stage: データの前処理 Crop(SCS) MRImage Left right upper Lower sagt2

    96 32 40 40 axial 96 96 96 96 - AxialのCropにはleft/right SSのXY座標を用いて中 心点を計算 - SagittalからL5/S1をCropする際には少しだけ Cropの範囲を下にずらした(L5/S1は角度が急だっ たため)
  16. 3rd stage: Augmentation + Aux Loss 2.5D採用時点でロバスト性の向上は確認できたが, 更にエラーに 対して頑健にしたい instance

    numberを確率的にずらすdata augmentation (確率 は1st ステージのエラー率を用いて決める) Head error=+-0 error=+-1 error=+-2 error>=+-3 cls head 71.08% 27.04% 1.43% 0.44% reg head 67.48% 30.59% 1.61% 0.31% ズレ無し: 65% +-1ズレ: 30% +-2ズレ: 5%
  17. 3rd stage: Augmentation + Aux Loss サブタスク: (メインの分類とは別に)instance numberを予測させる 気持ち:

    アノテータが注目していたMR画像を理解し, そのcontextを集約時に使えるようになれ! Aux Loss Attention Pooling時に計算したattention scoreを 直接CE Lossに渡し, instance numberに対応する scoreを直接上げる方法  性能悪化 instance numberだけに注目すればよいわけで はない?instance numberのラベル自体が悪い? 初手 2D Encoder vec3 vec4 vec5 vec2 vec1 bi-LSTM Attn score計算 集約 Cls head Aux CE Loss attention score
  18. 3rd stage: Augmentation + Aux Loss サブタスク: (メインの分類とは別に)instance numberを予測させる 気持ち:

    アノテータが注目していたMR画像を理解し, そのcontextを集約時に使えるようになれ! Aux Loss 集約用のattention score計算とは別にinstance number予測用のattention scoreを計算 気持ち) bi-LSTMの出力する特徴量にannotator のcontextを含ませて, そのうえで分類のための attention scoreを計算していただく  著しく性能向上 Best 2D Encoder vec3 vec4 vec5 vec2 vec1 bi-LSTM (集約用)Attn score計算 集約 Cls head Aux CE Loss (aux用)Attn score計算
  19. 3rd stage: モデルの構造と訓練 - 2D encoder (ConvNeXt & efficientnet-v2) -

    bi-LSTMで特長量まぜまぜ - 集約用attention score計算 - 集約&concat - 分類用ヘッド メインタスク 2D Encoder & GAP bi-LSTM (agg)Attn score 集約 concatenate Aux CE Loss (aux)Attn score Sagittal T2 bi-LSTM (agg)Attn score 集約 (aux)Attn score Axial T2 main head CE Loss Aux CE Loss sub head sub head Aux CE Loss Aux CE Loss 2D Encoder & GAP - instance number予測用のattention score計算 &CE Loss - concatせず入力ごとに分類タスクを解くサブ ヘッド&CE Loss サブタスク
  20. 3rd stage小ネタ Aux Lossの有無とCVへの影響度は 以下の通り(SCS) Aux Lossの有無 2D Encoder &

    GAP bi-LSTM (agg)Attn score 集約 concatenate Aux CE Loss (aux)Attn score Sagittal T2 bi-LSTM (agg)Attn score 集約 (aux)Attn score Axial T2 main head CE Loss Aux CE Loss sub head sub head Aux CE Loss Aux CE Loss 2D Encoder & GAP fold without Aux with Aux 0 0.254 0.240 1 0.283 0.254 2 0.267 0.254 3 0.264 0.252 4 0.244 0.261 mean 0.2624 0.2522 大きく改善する!