👻

Kaggleコンペ: RSNA2024 Lumbar Spine Degenerative Classification 上位解法まとめ

2024/12/20に公開

0. はじめに

はじめまして、株式会社松尾研究所にてインターンをしております、石川清之助と申します。
インターンシップ活動の一環として、Kaggleの医療画像診断AIコンペティションRSNA 2024 Lumbar Spine Degenerative Classificationの上位解法をまとめました。コンペの概要に加えて、上位チームの解法分析を通して得られた学びを共有します。
本記事は、松尾研究所 Advent Calendar 2024の記事です。

1. コンペティションの概要

1.1 課題の焦点

このコンペティションの目的は、放射線科医のように腰椎MRI画像を用いて変性脊椎疾患を検出・分類するAIモデルを開発することです。 これは、腰痛の主な原因である脊椎症の診断を支援し、世界的に多くの人々が苦しむ腰痛問題の解決に貢献することを目指しています。
私自身が医療分野、また画像分析に興味があったため、このコンペを選びました。

以下の5つの腰椎変性疾患について評価するモデル作成を目標とします。

  • 右/左 神経孔狭窄(neural foraminal narrowing, NFN)
  • 右/左 椎間関節下狭窄(subarticular stenosis, SS)
  • 脊柱管狭窄症(spinal canal stenosis, SCS)

このコンペでは脊椎の骨と骨の間にある椎間板にフォーカスしています。
椎間板は挟んでいる両側の脊椎の名前を取ってL1/L2と表します。
椎間板や、その画像診断についてはこのサイトが参考になりました。

さらに、これらの疾患をL1/L2からL5/S1までの5つの各椎間板レベルごとに、その重症度を以下の3段階で分類する必要があります。

  • 正常/軽度(Normal/Mild)

  • 中等度(Moderate)

  • 重度(Severe)

  • 椎間板について

評価は、本コンペ特有の重症度に応じて重み付けされた、RSNA Lumbar Metricにより行われます。
重み付けlog_lossの平均と、臨床的に重要な症例の見逃しを防ぐことを目的とし、重度の脊柱管狭窄症の検出能力を評価する、本コンペ特有のany_severe_spinalメトリックからなります。

詳しくは以下の通り

RSNA Lumbar Metric
  1. 脊柱管狭窄症、椎間孔狭窄症、関節下狭窄症の3つの状態について、予測と実際のラベルを比較してlog-lossを計算。
  2. 脊柱管狭窄症については、「重度の症例が1つでもあるか」という追加の指標も計算。具体的には各症例(study_id)ごとに「重度」カテゴリで最大値を取得し、予測とのlog-lossを計算。
  3. 3段階の重症度に応じて、以下のように重み付けを行い、それらの加重平均を最終スコアとして返す
    正常/軽度:1.0
    中等度:2.0
    重度:4.0

そのため、分類タスクではあるものの、最終的な出力は、5疾患×5箇所の25種のラベルそれぞれにつき、3段階の分類、計75種の値になります。

1.2 データセットについて

  • Study_idが患者に振り分けられます。

画像

  • 撮影の種類は、以下の3種類
    • Sagittal T2/STIR
    • Sagittal T1
    • Axial T2
  • 撮影方向について、複数枚z軸をスライスして、画像が撮られており、1つのseriesを構成
撮影方法について
  • T1強調画像
    脂肪組織が白く見え、水分は黒く見える
    腫瘍はやや黒く見え、身体の解剖学的な構造が見やすい
  • T2強調画像
    脂肪組織だけでなく、水分も白く見える。
    腫瘍はやや白く見え、病変の存在を知ることができる
  • STIR画像
    脂肪抑制T2強調画像の一種、T2より脂肪が黒く見え、
    病変が強調される
  • 撮影方向

    画像引用元: https://www.teramoto.or.jp/teramoto_hp/kousin/sinryou/gazoushindan/case/case162/index.html
    Mayo JR. CT evaluation of diffuse infiltrative lung disease: dose considerations and optimal technique. J Thorac Imaging. 2009;24:252-259.

データ

  • Studyごとの各疾患各椎間板の重症度

  • 重症度判別に使用された画像群(series_id)
  • シリーズ内での画像番号(instance_number)
  • 疾患の箇所の2次元座標(key_point) ※trainデータセットのみ

画像はRSNA 2024 Lumbar Spine Degenerative Classification - Datasetをもとに加工

2. 上位チームの共通アプローチ

本コンペティション特有の課題に対し、上位チームは様々なアプローチを展開しました。ここでは、主要な課題とその解決策の中でも多くのチームに共通したものについて解説します。

マルチモデル

単一モデルで全ての処理を行おうとすると、以下のような複数のタスクを同時に処理する必要があります。

  • 適切な画像シリーズの選択
  • 3Dスタックからの必要な椎間板画像の抽出
  • 椎間板レベル(5レベル)の判別
  • 左右の判別
  • 疾病の重症度(15ラベル)の分類

この複雑さに対応するため、ほとんどのチームは以下のようなマルチステージアプローチを採用しています

  • 第1段階 : 関心領域(ROI)抽出(キーポイント予測、セグメンテーションなど)
  • 第2段階 : 重症度分類(抽出されたROIに基づく疾患の分類と重症度評価)

このアプローチにより、ROI抽出後に椎間板レベルや左右の情報を整理することで、実質的にデータ量を5倍から10倍に増やすことが可能となり、効果的なデータ拡張としても機能しています。

データ拡張

  1. 基本的な画像拡張

    • 回転・反転・拡大縮小
    • 明るさ・コントラストの調整
    • ノイズの付加
    • 複数のクロッピングパターンの適用

    また、Test-Time Augmentation(TTA)のほか、先程挙げたセグメンテーション後の画像の活用も行われています。

  2. 外部データの活用
    多くのチームが、あるユーザーが作成したMRI腰椎画像データセットを学習に取り入れていました。このデータセットはコンペで提供されているデータに加え、4種類の外部リソースが含まれており、大幅なデータ量の増加につながっています。また、有効な椎間板を含む画像の選別、座標データの誤りの修正に加え、jpg形式への変換など基本的な前処理も施されており、すぐに学習に使用できる状態で提供されていました。

データクリーニング

早い段階で、Discussionにて公式から提供されたデータセットのキーポイントの座標に多くの誤りがあり、大きな足枷となっていることが明らかになりました。
そこで、多くのチームが高品質なデータセットの重要性を認識し、対策を行っています。

  • 手動によるラベル修正
  • モデルを使用して、損失の大きいラベルを除外

Attention機構やLSTMの活用

画像の重要な特徴に注目するためのAttentionや、時系列データの処理に適したLSTM(RNNの一種で、長期依存関係を学習する能力を持つ)を2段階目の重症度予測モデルに使用したチームが多数いました。
異なる種類で撮影された画像や、連続画像を入力としたときに、それぞれの依存関係の補足が目的なのではないかと思われます。

3. 1位チームの解法

アーキテクチャと手法

  • 2段階アプローチ
    • Stage 1: インスタンス数予測(3D ConvNeXt)と座標予測(2D ConvNeXt)
      • インスタンス数予測:画像スタックの中で一番予測に適している一枚の画像を選択
      • 座標予測:選択した一枚の画像から、各椎間板間の位置を特定
    • Stage 2: ConvNeXt-small/Efficientnet-v2-s + bi-LSTM + Attention-based MIL

データ処理とトレーニング

  • インスタンス予測: 0-1正規化、32でパディング
  • 座標予測: 512x512リサイズ、L1〜S1の中央値で画像選択
  • データ拡張: RandomBrightnessContrast、ShiftScaleRotate
  • 回帰(L1 Loss)と分類(Cross Entropy Loss)の両タスクを使用
  • インスタンス数予測の誤差確率に基づくシフト確率調整

工夫点

bi-LSTMとAttention-based MILの組み合わせが、このチームの解法の中心となっています。分類と回帰の両方のタスクを使うことで予測の安定性を高め、補助損失を加えることで学習の効率を上げました。ConvNeXtとEfficientNetという異なるモデルを並列に組み合わせている点、インスタンス数予測の誤差確率を使ってデータ拡張を調整している点は個人的に面白いと感じました。

4. 2位チームの解法

メンバー1(@yujiariyasu)

アーキテクチャと手法

  • 2段階アプローチ
    • Stage 1: YOLOXによる椎間板の領域推定
    • Stage 2: ConvNeXt Smallによる分類

データ処理とトレーニング

  • 脊椎予測: YOLOXの推定領域をそのまま使用
  • 非脊椎予測: 画像を左右に分割して処理
  • 複数のT2シリーズがある場合は両方を使用

メンバー2(@Ian Pan)

アーキテクチャと手法

  • 三段階アプローチ
    • Stage 1a: CNN-transformerによるスライス特定(距離予測と分類スコア)
    • Stage 1b: キーポイント座標予測
    • Stage 2: 複数の異なるモデルを使用
      • 単純な2D CNN
      • Attention poolingモデル
      • MILモデル
      • バックボーン: maxvit, coatnet, NFNet, CSN-ResNet101

データ処理とトレーニング

  • 座標を使用したクロップ
  • 3チャンネル画像(中心スライスと前後)を使用
  • 一部のモデルでは5チャンネル画像も使用
  • スライスオフセットと空間オフセットによる27パターンのクロップ生成

メンバー3(@brendanartley)

アーキテクチャと手法

  • 2段階アプローチ
    • Stage 1: 2Dバックボーン + Attentionヘッドで椎間板位置推定
    • Stage 2: エンコーダー + LSTM + Attention poolingによる分類

データ処理とトレーニング

  • Sagittalのみを使用
  • 各シーケンスの中央24フレームを使用
  • 強力なデータ拡張を適用
    • シーケンス順序の反転
    • 左右の組み合わせ
    • Manifold mixup
  • 9回の回転によるTTA
  • ラベル付きデータと疑似ラベルを50:50で使用

工夫点

チームメンバーそれぞれが異なるアプローチを取り、それらをアンサンブルしています。学習データについて予測値との差が大きいサンプルを除外するノイズ除去により、大きく改善につながっています。また、重度の予測値を1.25倍にするという単純な後処理により点数が向上したという点には驚きました。

5. 3位チームの解法

アーキテクチャと手法

2段階アプローチ

  • Stage 1: CenterNetベースの検出器(EfficientNetB6/B4 + FPN)
  • Stage 2: 2D-Encoder + Attention(Center/Side Classifier)

データ処理とトレーニング

  • 複数のクロップ設定採用
  • Split LR処理による左右データの活用
  • AdamW + OneCycleLR
  • 多様なデータ拡張(Blur、Distortion等)
  • 手動でのラベル修正と疑似ラベル使用

工夫点

このチームは、複雑な処理を避け、シンプルな手法を選択しています。椎間板レベルや左右の違いを区別せずに扱うことで、学習を単純化するとともに、データ拡張につながっています。また、手動でのラベル修正と疑似ラベルを組み合わせることで、データの質を確保している点も特徴です。

5. まとめ

本記事ではRSNA2024 Lumbar Spine Degenerative Classificationの上位解法についてまとめました。このコンペはMRIの3D画像を使用していることもありタスク自体が非常に複雑であったため、画像の前処理に工夫を凝らした多種多様な解法が見られました。
また、同一のタスクに対して最先端の複数のSolutionを詳しく得ることができるKaggleコンペは技術のキャッチアップに最適だと感じました。
解法の解釈違いなどあるかもしれませんので、誤りを見つけた際は適宜ご指摘頂ければ幸いです。

松尾研究所テックブログ

Discussion