目次
前回までに、コンペの概要と Kaggleの作法を扱いました。 ここからは中身の話です。参加しない方にとっても、現実の医療データで何が起きるのかを知る材料になると思います。
課題の構造を3行で
まず全体像を押さえます。
入力:1回の膝MRI検査(複数シリーズ・3方向)+ 読影レポート(学習時のみ)
出力:12の所見それぞれの確率(マルチラベルの2値分類)
評価:macro ROC-AUC。提出はコード形式で、実行は9時間以内
ここで大事なのは「マルチラベル」という点です。 12個から1つを選ぶ問題ではありません。12個それぞれについて、あるか・ないかを独立に答える問題です。 半月板の異常と関節液の貯留は同時に存在しえますし、何も無いこともあります。
実装上は、出力層にsoftmaxではなくsigmoidを使い、損失関数は各ラベルの2値交差エントロピー(PyTorchなら BCEWithLogitsLoss)を用いるのが基本形です。
このあたりはE資格の出題範囲とも重なります。
⚠️ softmaxを付けてしまう事故
マルチラベルの課題にsoftmaxを使うと、12個の確率の合計が1になるという誤った制約がかかります。 「半月板も関節液も陽性」という状態が表現できなくなり、学習は進んでいるのにスコアが伸びない、という状況に陥ります。 最初に確認すべきポイントです。
12のラベルは何か
参加者が公開しているデータ解析によると、対象となる12の所見は次の構成とされています。 (正式な定義はコンペの公式ページでご確認ください。以下は公開情報にもとづく整理です)
| グループ | 所見 | 性質 |
|---|---|---|
| 靭帯 | 前十字靭帯(ACL)/内側側副靭帯(MCL) | 部位が限定的 |
| 半月板 | 内側半月板/外側半月板 | 左右で別ラベル |
| 変形性変化 | 内側/外側/膝蓋大腿の3区画 | 区画ごとに独立 |
| その他 | 関節液貯留/滑膜炎/ベーカー嚢腫/骨挫傷/骨折 | 広がり方がさまざま |
この構成から読み取れることが2つあります。
ひとつは、ラベルに「部位」の情報が埋め込まれていることです。内側と外側、3つの区画が別ラベルになっています。 つまりモデルは「異常があるか」だけでなく、それが膝のどちら側で起きているかを区別する必要があります。 画像を左右反転させるデータ拡張を素朴に適用すると、内側と外側のラベルが入れ替わってしまう——という罠がここにあります。
もうひとつは、所見によって見えるべき断面が違うことです。 関節液の貯留のように広い範囲に現れるものと、靭帯のように限定された部位を見るものでは、必要な情報の粒度が異なります。 12ラベルを1つのモデルで一律に扱うか、グループごとに分けるか。ここが設計の分かれ目になります。
第一の壁:正解ラベルがほとんど無い
このコンペの性格を決定づけているのが、ここです。 参加者が公開している解析によると、学習用の4,407検査のうち、公式の完全な2値ラベルが付いているのはごく一部で、 残りの大多数には読影レポートの文章しか付いていないとされています。
つまりこれは、見た目こそコンピュータビジョンの課題ですが、実態は弱教師あり学習(weak supervision)の課題です。 「正解が与えられた画像を大量に学習する」のではなく、正解を自分で作るところから始まります。
💡 弱教師あり学習とは
正確なラベルが十分に用意できないとき、不正確だが大量に得られる情報を教師信号として使う枠組みです。 今回でいえば、読影レポートから機械的に取り出したラベルがそれにあたります。 ノイズを含むことを前提に、量でカバーするという考え方です。
さらに重要な報告があります。公開されている検証では、レポートから作ったラベルと、画像を見て付けられた正解ラベルの一致率は8割程度にとどまり、 しかもその不一致はランダムではなく系統的だとされています。
なぜ系統的なズレが生じるのか。評価用の正解は、複数の専門医が画像そのものを見て、 重症度の基準を決めたうえで判定し、判断に迷うものは陰性側に寄せるという手順で作られていると報告されています。 一方でレポートは、そのとき臨床的に意味があると判断されたことが書かれる文書です。 軽微な変化はわざわざ記載されないこともありますし、逆に経過観察のために念のため触れられることもあります。
この差は、機械学習の言葉でいえばラベルノイズが偏っている状態です。 レポート由来のラベルをそのまま信じて学習すると、モデルは「レポートの書かれ方」を学習してしまい、評価用の基準とはズレた方向に最適化されます。
⚠️ ここが順位を分けるところ
多くの参加者は、まずレポートからラベルを作り、それで画像モデルを学習させます。 そこから先で差がつくのは、ノイズの偏りをどう補正するかです。 少数の正確なラベルを使った再調整(ファインチューニング)、擬似ラベルの反復、損失の重み付け——このあたりが勝負どころになります。
第二の壁:3方向×複数シリーズをどう入れるか
医用画像コンペの共通課題ですが、今回は特に重めです。公開されている解析によると、データはおおむね次のような構造です。
- 1検査あたり3〜14のシリーズ(中央値5前後)
- 矢状断・冠状断・軸位断の3方向がすべての検査に含まれる
- 1シリーズあたりのスライス枚数は11〜320枚と幅が大きい(中央値30枚前後)
素朴に全部を入力すると計算量が破綻します。かといって適当に間引くと、必要な断面を落とします。 現実的な選択肢は3つです。
| 方式 | 中身 | 長所・短所 |
|---|---|---|
| 2D | スライスを1枚ずつ処理し、後で集約 | 軽い。ただし前後のつながりを見られない |
| 2.5D | 連続する数枚をチャンネル方向に重ねて2Dモデルへ | 事前学習済みモデルを使える。定番 |
| 3D | 3次元畳み込みでそのまま扱う | 立体構造に強いが重く、事前学習の資産が少ない |
医用画像コンペで2.5Dが定番になっている理由は、ImageNetなどで学習済みの2次元モデルをそのまま流用できる点にあります。 医療データは量が限られるため、事前学習済みの重みを使えるかどうかが精度に直結します。実行時間の制限とも相性が良い方式です。
そのうえで、今回は「どのシリーズを使うか」という選択そのものが設計要素になります。 シリーズ数が検査ごとに違うため、「必ずこの3つを使う」という固定はできません。 断面の向きと撮像の種類をメタ情報から判定し、方向ごとに代表シリーズを選ぶという前処理が必要になります。 ここはDICOMのタグを読む知識が直接効いてくる部分です。
医用画像の前処理を手を動かして学ぶ
ブラウザだけで動くPython学習プラットフォームを公開しています。NumPyでの配列操作から機械学習まで、環境構築なしで進められます。PyTorchの実装コードを読み解くコースも無料です。
第三の壁:多言語レポートからラベルを作る
第一の壁で触れたとおり、学習用ラベルの供給源はレポートの文章です。しかもそれが約12の言語にまたがります。 ここで必要になるのは画像処理ではなく、自然言語処理の作業です。
アプローチは大きく3つ
- 翻訳してから処理する……全レポートを英語などに寄せてから、ルールやモデルでラベル化する。処理は単純になるが、翻訳の質が上限になる
- 多言語モデルで直接処理する……多言語に対応した言語モデルで、翻訳を挟まずラベルを推定する。表現の機微を保ちやすい
- 言語ごとに個別対応する……主要な言語だけ丁寧に作り込み、少数言語は割り切る。実務的だが手間が大きい
どの方法をとるにせよ、避けて通れないのが否定と不確実性の処理です。 読影レポートは「無いこと」を明示的に書く文書でもあります。
⚠️ キーワード検索が通用しない典型例
「半月板断裂は認めない」——この文に「半月板断裂」という語は含まれています。
単純な文字列一致でラベルを付けると、陰性の記述が陽性のラベルになります。
「断裂を否定できない」——これは陽性でしょうか、陰性でしょうか。判断基準を自分で決める必要があります。
こうした処理は否定検出(negation detection)と呼ばれ、医療テキスト処理では古くからの主要テーマです。
そして厄介なのは、この判断基準そのものが、評価用の正解の作り方と合っているかどうかが問われる点です。 評価側は「迷うものは陰性」という方針で作られていると報告されています。 であれば、レポートの曖昧表現をどちらに倒すかは、単なる好みではなくスコアに直結する設計判断になります。
macro ROC-AUCという評価指標の意味
評価はmacro ROC-AUCで行われます。12の所見それぞれでAUCを計算し、単純に平均する方式です。 この「単純に平均する」という部分に、戦略上の意味があります。
症例数が多い所見も、めったに出ない所見も、平均への寄与は同じ1/12です。 よく出る所見だけを正確に当てても、全体のスコアはさほど上がりません。 出現の少ない所見をどれだけ拾えるかが、そのまま順位を決めます。
💡 だからクラス不均衡への対処が要になる
希少な所見は、そのまま学習させると「すべて陰性」と答えるモデルに収束しがちです。
損失の重み付け、サンプリングの調整、所見ごとに閾値を分けるといった対処が必要になります。
なお、AUCは順位づけの良さを測る指標なので、閾値の選び方そのものはスコアに影響しません。
確率の絶対値より、陽性と陰性を正しく並べられるかが問われます。ここは実務での運用と大きく違う点です。
評価指標が変われば、最適な戦略も変わります。 感度・特異度・AUCの関係については医療AIの「精度95%」をどう読むかで図解しています。 ROC曲線を動かせるシミュレータも公開していますので、感覚を掴みたい方はそちらもどうぞ。
9時間とインターネット遮断
このコンペはコード提出形式で、実行時間は9時間以内、実行中はインターネットに接続できません。 さらに今回は、効率性を評価する賞が新設されています。
この制約は、設計に次のような形で跳ね返ってきます。
- 学習と推論は必ず分ける……学習済みの重みをデータセットとして保存し、提出用は推論のみ
- 事前学習済みモデルは事前に持ち込む……実行中にダウンロードできないため、重みをアップロードしておく
- 入力解像度とスライス数がコストに直結する……精度との交換になるので、早い段階で見積もる
- アンサンブルの本数に上限が生まれる……時間内に収まる範囲でしか重ねられない
制限時間を超えると、どれだけ精度が高くても提出そのものが失敗します。 締切間際に「時間切れで提出できなかった」というのは、Kaggleでは珍しくない事故です。 推論時間の計測は、精度の改善より先に済ませておくべき作業だと思います。
最初の1週間で何をするか
締切は2026年10月22日です。これから始める場合、最初の1週間の使い方で見通しが大きく変わります。順序としてはこうなります。
| 日数 | やること | 目的 |
|---|---|---|
| 1〜2日目 | 公開されているEDAノートブックを読む | データ構造の把握を短縮する |
| 3日目 | ベースラインをそのまま提出してみる | 提出の仕組みを先に通す |
| 4〜5日目 | 検証(CV)の枠組みを自分で作る | Public LBに振り回されない土台 |
| 6〜7日目 | レポートからのラベル生成を試す | 今回の勝負どころに早く着手する |
3日目の「まず提出を通す」が、意外に大事です。 精度を上げてから提出しようとすると、締切直前に提出の仕組みで詰まります。 スコアがどれだけ低くても、一度パイプラインを最後まで通しておく。これが安全な進め方です。
まとめ
膝MRIコンペの構造を整理します。
- 12所見のマルチラベル分類。softmaxではなくsigmoidを使う
- 内側・外側が別ラベルのため、安易な左右反転の拡張は危険
- 正解ラベルは限られており、実態は弱教師あり学習。レポート由来のラベルには系統的なズレがある
- 3方向×複数シリーズは2.5D+シリーズ選択で捌くのが現実的
- 多言語レポートは否定と曖昧表現の扱いが要。評価側の基準に寄せる
- macro ROC-AUCなので希少な所見が順位を分ける
- 9時間・インターネット遮断。推論時間の見積もりを最優先で
こうして並べると、このコンペが「画像認識の課題」という枠に収まらないことが分かります。 現実の医療データを扱うときに必ず出てくる問題——正解が曖昧であること、記録が文章であること、計算資源に限りがあること——が、そのまま競技になっています。
本連載は次回、歴代のRSNAチャレンジを振り返る回を予定しています。 そして結果が出る11月には、上位解法から何が学べたかをまとめます。
実装を読み解く力を、資格対策から
マルチラベル分類、損失関数の選び方、評価指標——この記事で出てきた論点は、そのままE資格の出題範囲と重なります。コード特化模試は実装の読解に絞って全52問。理論の総仕上げには理論模試もあります。🔥 随時セール開催中。
📚 出典と補足(2026年8月22日時点)
※本記事は、RSNAの公開情報およびKaggleのコンペティションページ、ならびに参加者が公開している解析やノートブックにもとづく整理です。 ラベルの定義・データ件数・評価方法などの数値は、公式の一次情報と異なる場合があります。参加にあたっては必ず コンペ公式ページで最新かつ正式な仕様をご確認ください。 また、所見に関する記述は課題の構造を説明するためのもので、診断・治療についての助言ではありません。