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=ユーザー(金子)の口頭情報.
- 主張: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
- 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
- 連続変数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統計量(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のコメント記載のみで,コード側は未確認
- 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
比較手法は5つ(Notionの主表の行番号:0, 1, 2', 4', 5, 6).
- 医師3名の目視読影(下記)
- 先行研究の減衰プラーク角度スコア(非DL)
- ResNet-34+LSTM(画像のみ,Class weightなし・batch size 4)
- ResNet-34+LSTM(画像+臨床変数+プラーク面積特徴,Class weightなし・batch size 4)
- USCNet(3D原型.画像+臨床変数+プラーク面積特徴,Class weightなし・batch size 4)
提案手法:KSCNet(画像+臨床変数+プラーク面積特徴).
LightGBMなどの表形式の機械学習手法は,使用せず,比較にも含めない.
臨床情報のみ・プラーク特徴なしのResNet-34+LSTM(E3)も,論文には載せない.
- 読影者: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
- 主指標は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の「検定」項目は,方針に合わせて要整理)
- 計算環境: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が空.実行したサーバーとコミットの記録