Newer
Older
MDPI / drafts / ja / 3_method.md

Method(アウトライン・メモ)

sections/3_method.tex に対応。1セクションずつ書いていく方針のため,まずは構成と使える事実だけをメモしておく(本文はまだ書いていない)。 事実の出典は各行末に記載。 Notion=AI in Medicineページ, Notion:西先生=西先生からの回答|No reflowの処置, config=/home/nlab/IVUS/Config/ 内のYAML, code=/home/nlab/IVUS/ 内のコード, tool=/home/nlab/ivus-complication-annotation-tool, result=D:\Research\Result\2026_09_18_ai_in_medicine 内の保存結果, user=ユーザー(金子)の口頭情報.

確定した方針(2026-10-12時点)

  • 主張:IVUS画像・臨床情報・プラーク特徴を入力とする比較手法(ResNet-34+LSTM,USCNet)の中で, 2Dフレーム単位の処理+フレーム間処理を持つKSCNetが平均AUC・F1とも最も高く,3Dモデル(USCNet)を上回った Notion
  • 統計的検定は実施しない方針(2026-10-12)user. 差は,観察された平均値とfold別の勝敗数の記述にとどめ,「有意」「統計的に優れる」等の表現は使わない
  • 書ける主張(記述的な事実):KSCNetは,医師3名の目視読影(平均AUC 0.637)および先行研究の減衰プラーク角度スコア(0.649)を 上回る平均AUC(0.717)を示した(fold別では,それぞれ4/5,5/5 foldで上回る). ResNet-LSTM(E4',平均AUC 0.696)とは「同程度」と記述する(差は+0.020,AUCで上回るのは1/5 fold)
  • 書かない主張:「IVUS画像が予測に有効」「画像の寄与」(入力に臨床変数・プラーク特徴を含み,画像の寄与は切り分けていない), 範囲を限定しない「最良モデル」,E4'に対する「優れる」,「3D一般に劣る」(3DはUSCNetのみ)Notion
  • Limitationsに記載:fold 5での性能低下,面積特徴(13フレーム)と画像入力(32フレーム)の範囲の違い. 検定を実施していない点は,Limitationsには書かない user
  • 論文に載せる学習済みモデルは,Class weightなし・batch size 4に揃えたもののみ. 元の実験(Class weightあり・batch size 8〜16)は載せない user
  • 入力Ablation(副表)は載せない.本文では画像のみ→画像+臨床+プラーク特徴のAUCの変化に1文触れる程度 user
  • LightGBMなどの表形式の機械学習手法は使用せず,比較にも含めない user
  • 医師の読影はMethodに含める.経験年数は具体的な数字を書かない user

3.1 Dataset

  • 287例,陽性(No reflow / Slow flow)68例(23.7%),陰性(Normal)219例(76.3%). 病型(STEMI/NSTEMI/UA)の内訳は書かない Notion
  • IVUS取得デバイス:Terumo VIEW IT(40MHz)またはAltaView(60MHz)のみを書く. デバイス別の症例数は把握できていないため書かない user
  • アノテーション:血管腔・血管壁(Vessel/Lumen)領域,プラーク角度(減衰・石灰化方向). プラークアノテーションがあるのは1症例あたり13フレーム Notion
  • 5-fold CV(症例単位の分割,per-fold平均),閾値はvalidation Youden index. 全手法が同一287症例・同一foldで評価されていることを,case_idレベルで確認済み Notion

3.2 Data Preprocessing / Annotations

画像入力

  • 前処理:元画像 → 極座標変換(Pixel Spacing考慮)→ プローブ境界除去(30 pixel) code: preprocess_all.py, config
  • 入力サイズ:224×224,フレーム数:32 config
  • フレーム選択:症例ごとに約1 mm間隔の20枚(sparse)を基準に,隣接フレーム間を補間して96枚のdense集合を作り, そこから等間隔に32枚を抽出 code: dense_extraction.md, dense_frame_selection
  • KSCNet,USCNet,ResNet-34+LSTMは同一の32フレーム入力 config

臨床変数(47次元) code: PatientFeatureProcessor, config

  • 連続変数17:Age, BW, HT, sBP, HR, LVEF, Cre, BS, HbA1c, PLT, T-chol, HDL-C, LDL-C, TG, BNP, TnI, CK-MB
  • カテゴリ変数13:Men, DM, HTN, DL, Smoking, HD, OMI, HF_history, TnElevation, Diagnosis, Killip, ST_deviation, CA
  • 前処理:連続変数はtrain foldの平均・標準偏差でZ-score化(欠損は除外して算出),欠損は0.0に補完し, 変数ごとに欠損フラグ(is_missing)を追加.カテゴリ変数は欠損を-1としてそのまま入力(正規化なし)
  • 次元数:連続17×2(値+欠損フラグ)+カテゴリ13=47
  • 略称の正式名称(暫定.医師に確認予定)user:
    • 連続変数:Age(年齢),BW(体重),HT(身長),sBP(収縮期血圧),HR(心拍数), LVEF(左室駆出率),Cre(クレアチニン),BS(血糖値),HbA1c,PLT(血小板数), T-chol(総コレステロール),HDL-C(HDLコレステロール),LDL-C(LDLコレステロール), TG(中性脂肪),BNP(脳性ナトリウム利尿ペプチド),TnI(トロポニンI),CK-MB(CK-MB)
    • カテゴリ変数:Men(男性),DM(糖尿病),HTN(高血圧),DL(脂質異常症), Smoking(喫煙),HD(血液透析),OMI(陳旧性心筋梗塞),HF_history(心不全既往), TnElevation(トロポニン上昇),Diagnosis(病型),Killip(Killip分類), ST_deviation(ST偏位),CA(心停止)
    • 値の定義(Diagnosisの区分,Killipの範囲,ST_deviation・TnElevationの基準, BSの採血時点,Smokingの区分)は未確認.CAは心停止と解釈(要確認)

プラーク面積特徴(4次元) code: plaque_area.py, handcraft_features.py

  • 使用:減衰プラークの面積に関する4統計量(total / max / min / std). 石灰化プラークの面積も算出されているが,config上は使用していない
  • フレームごとの面積の算出: 医師が付与した減衰プラーク角度の扇形(中心・始点・終点で定義)と, 血管領域から血管腔を除いた領域(Vessel − Lumen)の共通部分のピクセル数を数える. 同一フレーム内に複数の扇形がある場合は和集合とする
  • 単位換算:面積mm² = ピクセル数 × pixel_spacing(行)× pixel_spacing(列). pixel spacingは症例ごとにDICOMタグから取得
  • Vesselアノテーションのないフレーム:アノテーション済みフレームから, 血管中心と放射方向距離を線形補間してVessel輪郭を補完. 補間に必要なアノテーションが2フレーム未満の場合など,補間に失敗したときは処理を停止
  • 症例レベルへの集約:中心フレームの前後6枚(計13フレーム)のフレーム別面積に対して,合計・最大・最小・標準偏差(母標準偏差)を算出. プラークアノテーションが存在するのが13フレームのため Notion. 画像入力(32フレーム)と範囲が異なる点は,Methodに事実として記載し,Limitationsでも触れる(再実験は行わない)user
  • 角度が不完全なプラークアノテーションを含む症例は,面積算出の対象から除外される設計(EXCLUDED_CASE_IDS). 287例との関係は未確認.要確認
  • 注意:cnn_handcraft.yamlのコメントには「プラーク面積 pixel」とあるが,コード上はmm². コメントが古いものと判断(case_features_13.csvの値の大きさもmm²と整合)
  • 特徴量のZ-score化(train fold基準)はconfigのコメント記載のみで,コード側は未確認

3.3 Proposed Architecture: KSCNet

  • KSCNetはUSCNet(3D原型)の2D適応 Notion
  • Stage1:フレーム単位2D KSCNet(PatchEmbed→ViT→UNETR,重み共有)→ f_i(CEA用),s_i(SMA用),seg_i
  • Stage2:臨床情報+プラーク特徴を追加トークン化し,位置Embedding+種別Embeddingを付与してフレーム間Transformer(self-attention)
  • Stage3:セグメンテーション由来の特徴(S)をqueryにしたcross-attentionで症例レベル特徴を集約
  • Stage4:分類ヘッド(d→256→BN→ReLU→Dropout→1)
  • 損失:Dynamic Loss.セグメンテーションのDice損失,症例分類のBCE損失とFocal損失(α=0.25,γ=2)の3項の重み付き和. 重みはvalidationのS_Diceに応じてepochごとに更新 code: M_Classification/src/utils/loss.py. クラス重み(pos_weight)は使用しない.Focal損失のαはラベルによらず一定の0.25倍(クラス間の重み付けではない)
  • config上の値:hidden_size 384,patch_size 16,num_heads 12,mlp_dim 3072,feature_size 16, frame_transformer_layers 2,dynamic_loss_lambda 0.1,dropout 0.0 config: kscnet_ivus.yaml
  • セグメンテーションと合併症予測を,単一モデルで同時に解く(Dice 0.816)Notion

3.4 Baseline and Comparison Methods

比較手法は5つ(Notionの主表の行番号:0, 1, 2', 4', 5, 6).

  1. 医師3名の目視読影(下記)
  2. 先行研究の減衰プラーク角度スコア(非DL)
  3. ResNet-34+LSTM(画像のみ,Class weightなし・batch size 4)
  4. ResNet-34+LSTM(画像+臨床変数+プラーク面積特徴,Class weightなし・batch size 4)
  5. USCNet(3D原型.画像+臨床変数+プラーク面積特徴,Class weightなし・batch size 4)

提案手法:KSCNet(画像+臨床変数+プラーク面積特徴). LightGBMなどの表形式の機械学習手法は,使用せず,比較にも含めない. 臨床情報のみ・プラーク特徴なしのResNet-34+LSTM(E3)も,論文には載せない.

医師による読影(Method内に含める.使用可と確認済み:2026-10-01 Notion)

  • 読影者:3名の循環器内科医.十分な経験年数を有する.経験年数の具体的な数値は書かない user
  • 使用ツール:Streamlit製の自作アノテーションツール(ローカルWebアプリ)tool
  • 提示内容:1症例あたり約20フレームのIVUS画像をスライダーで前後に閲覧できる tool: README. ツール上に臨床情報の入力・表示欄は確認できない(画像のみの読影.要確認)
  • 入力:確信度(0〜100%). 50以上を陽性(No reflow / Slow flow あり),49以下を陰性として自動判定. 判断根拠(石灰化プラーク多/少,減衰プラーク多/少,その他)と自由記述も記録 tool
  • 評価:全287例について,3名が独立に予測 Notion. モデルと同じ5-foldのtest症例に対して,fold別に評価し,平均±標準偏差を算出. AUCは確信度を0〜1に正規化したスコアで算出し, Accuracy・Precision・Recall・F1・Specificityは確信度≥50を陽性として算出 (モデルと異なり,閾値にYouden indexは使用しない)code: annotation_analysis.py
  • 3名の結果の扱い:主表は3名の平均(fold別に算出してから平均). 個別の結果は別表とし,ROC上に3点として置く案がある Notion: Todo
  • 医師間の一致度(Fleissのκ,全会一致率など):本論文では副次的所見として扱う Notion

3.5 Evaluation Protocol

  • 主指標はAUC,副指標はF1.Accuracy・Specificityは主張に使わない Notion. AUC, Accuracy, Precision, Recall, F1, Specificity,Dice(Vessel+Lumen領域のSegmentation用)を算出
  • 5-fold CVのfoldごとに算出してから平均(pooledは使用しない),平均±標準偏差で報告 code: environment_constraints.md
  • 2値の指標の閾値:モデルはvalidationのYouden index,医師は確信度50 Notion
  • 比較の設計意図:
    • 3 vs 4:入力の追加(画像のみ→画像+臨床+プラーク)の変化.観察のみ(個別の寄与は主張しない)
    • 4 vs 5:2D+系列処理と3Dの比較(入力・Class weight・batch sizeは同一.損失とdropoutはアーキテクチャごとに異なる)
    • 4 vs KSCNet:アーキテクチャの違い(入力・Class weight・batch sizeは同一.損失とdropoutは異なる)
    • 5 vs KSCNet:3D原型と2D適応の比較
    • 1(医師)vs 3:入力条件が同じ(画像のみ)の比較
    • 2(先行研究スコア)vs 全て:先行研究のスコアを上回るか
    • 注意:4,5,KSCNetは臨床変数・プラーク面積特徴も使う点を,本文で明記する必要あり
  • 手法間の統計的検定は実施しない(2026-10-12). 差の記述は,平均±標準偏差とfold別の勝敗数にとどめる(Notion Todoの「検定」項目は,方針に合わせて要整理)

3.6 Implementation Details

  • 計算環境:NVIDIA RTX A6000(48 GB)1枚.Python 3.10.12,PyTorch 2.4.1(CUDA 12.1),timm 0.4.12. archimedes・newtonのいずれも同一構成.再実験(E4')はarchimedesで実行(memo.txt記載)result
  • 学習:Adam,最大200エポック,early stopping(patience 20), 学習率スケジューラ(ReduceLROnPlateau型:factor 0.5,patience 10,min_lr 1e-7),シード42,5-fold CV config
  • ハイパーパラメータ探索:各foldでランダムサーチ20試行, validation AUCが最大の試行を最良モデルとして採用 code: random_search.py, analyzer.py
    • 学習率:10⁻³〜10⁻⁵を対数一様に抽出
    • Adamのβ₁:0.90〜0.99(1 − 10⁻ˣ,xは1〜2の一様乱数)
    • バッチサイズ:全モデルで4
    • weight decayはAdamのため0(使用しない)
    • 探索の乱数はシードと試行番号で決まるため,同じ試行番号では全手法で学習率・β₁が一致する code
  • Class weight:全モデルで使用しない config(保存済みの全YAMLで確認)
  • ResNet-34+LSTM固有:LSTM 2層,隠れ層256,dropout 0.4,損失はCross Entropy config: cnn_handcraft.yaml
  • KSCNet・USCNet:損失はDice+BCE+Focalの動的重み付き和,dropout 0.0.3.3参照
  • USCNet(3D原型):入力が深さ32の3Dボリューム.KSCNetとの差はframe_transformer_layersの有無と入力次元 config: kscnet_ivus_3d.yaml. 結果は 3DUSCNet_ver1 のフォルダのみを使用 user
  • 評価対象:USCNetも,2Dと同じ287例(fold別58, 58, 58, 57, 56)の予測が保存されている result

未解決・要相談

  • 3.2:略称の正式名称は暫定名称を記載済み.医師に確認する(特にCA,各変数の値の定義)user
  • 3.2:EXCLUDED_CASE_IDSと287例の関係
  • 3.2:極座標変換後のサイズ.preprocess_all.pyの既定は(254, 224),configのimg_sizeは224×224. どの段階で224×224になるか未確認
  • 3.2:特徴量のZ-score化(train fold基準)をコード側で確認
  • 3.4:医師の読影時の提示情報(画像のみか)の確認
  • 3.4:Notion主表の医師のAUC「0.636 ± 0.08」は,医師3名の平均表のStd 0.087(0.087239)と表記が異なる.確認
  • 3.6:batch size 4の理由の記載.config上は下限が4に固定される仕様.GPUメモリの制約と書く前に, KSCNetをbatch size 8で動かしてメモリ不足になるか,確認する
  • 3.6:USCNetのmemo.txtにある「seg maskのあるフレームがない7症例を除外」の意味 (予測は287例分あるため,学習時のみの除外か,別の処理か)
  • 3.6:E2'のmemo.txtが空.実行したサーバーとコミットの記録