| 元件 | 任務 | 資訊方向 | 主要層 |
|---|---|---|---|
| SharedEncoder | 影像 → 特徵 + 類別圖 | 壓縮 | ResNet-18(Conv2d + BatchNorm) |
| PrivateEncoder | 影像 → 8 個「風格」數字 | 壓縮 | Conv2d ×6 |
| PrivateDecoder | 編碼 → 重繪成影像 | 還原 | ConvTranspose2d ×3 |
| Discriminator ×2 | 影像 → 真 / 假 | 壓縮 | Conv2d ×5 |
| DomainClassifier ×2 | 類別圖 → 來源 / 目標 | 壓縮 | Conv2d ×5 |
sys1 中,光看「病灶周圍的背景亮度」就能完美分開正負(AUC 1.000;正 55.7 vs 負 80.3)。 正常組織不該因良惡性而系統性變亮 → 這是影像整體亮度/機器增益的差異,不是生理訊號。
sys1 與 sys2 有 18 / 23 位病人是同一批人(換機器掃描)。sys3 的 6 人也全在 sys1 內。 → 所謂「跨域」其實是同一批病人的不同機器,不是新病人。
StratifiedGroupKFold, groups = 病人)。為何不用 accuracy:73% 的 ROI 是負 → 全部猜「負」就有 73% 準確率,卻毫無用處。
| 模型 + 輸入(皆只有病灶內部) | 訓練樣本 每 ROI 取 60 張 | TRAIN | VAL 樣本 | 差距 |
|---|---|---|---|---|
| ResNet-18 + 20×20 patch | 22,920 | 0.998 | 0.680 | 0.317 |
| ResNet-18 + 32×32 patch | 22,920 | 1.000 | 0.665 | 0.335 |
| SmallCNN + 20×20 patch | 22,920 | 0.949 | 0.616 | 0.332 |
| SmallCNN + 32×32 patch | 22,920 | 0.999 | 0.700 | 0.299 |
| SmallCNN + 整顆 ROI(不切) | 382 | 0.971 | 0.671 | 0.301 |
| SmallCNN + stride-1 全網格(841 張 / ROI) | 321,262 | 0.999 | 0.657 | 0.342 |
| SmallCNN + 整顆 ROI + 周圍組織 | 382 | 0.999 | 0.910 | 0.089 |
| 同一模型,只換視野 | 只有病灶 | + 周圍組織 | 提升 |
|---|---|---|---|
| ResNet-18 | 0.643 | 0.842 | +0.199 |
| SmallCNN | 0.691 | 0.910 | +0.219 |
| 過擬合差距(SmallCNN) | 0.293 | 0.089 | 砍掉 2/3 |
| 相同流程,只換模型 | ResNet-18 18 層 · 11.7M | SmallCNN 4 層 · 23.6k | 差異 |
|---|---|---|---|
| VAL 樣本(只有病灶) | 0.643 ±0.068 | 0.691 ±0.072 | +0.048 |
| VAL 樣本(+周圍組織) | 0.842 ±0.060 | 0.910 ±0.028 | +0.068 |
| 過擬合差距 | 0.352 / 0.157 | 0.293 / 0.089 | 更小 |
| 跨種子穩定度 | ±0.060 | ±0.028 | 更穩 |
| batch size 5 seeds · 病人 5-fold · 40 epochs |
每 fold 梯度更新 | TRAIN | VAL 樣本 | VAL 病人 | 差距 |
|---|---|---|---|---|---|
| 16 | 784 | 1.000 ±0.000 | 0.886 ±0.031 | 0.965 ±0.023 | 0.114 |
| 32 | 400 | 1.000 ±0.000 | 0.902 ±0.027 | 0.966 ±0.025 | 0.098 |
| 64 | 208 | 1.000 ±0.000 | 0.898 ±0.069 | 0.934 ±0.062 | 0.102 |
| 128 | 120 | 1.000 ±0.000 | 0.924 ±0.037 | 0.968 ±0.031 | 0.076 |
| 256 ← 我們用的 | 80 | 0.999 ±0.001 | 0.915 ±0.020 | 0.974 ±0.021 | 0.084 |
| epoch 5 seeds · batch 256 · 無 early stopping |
TRAIN | VAL 樣本 | VAL 病人 | 差距 |
|---|---|---|---|---|
| 1 | 0.754 ±0.041 | 0.640 ±0.123 | 0.740 ±0.149 | 0.113 |
| 2 | 0.877 ±0.041 | 0.690 ±0.077 | 0.753 ±0.098 | 0.186 |
| 5 | 0.873 ±0.060 | 0.674 ±0.042 | 0.671 ±0.073 | 0.200 |
| 10 | 0.900 ±0.065 | 0.744 ±0.106 | 0.795 ±0.084 | 0.156 |
| 20 | 0.988 ±0.011 | 0.858 ±0.092 | 0.942 ±0.061 | 0.130 |
| 30 | 0.998 ±0.001 | 0.892 ±0.030 | 0.966 ±0.022 | 0.107 |
| 40 ← 我們用的 | 0.999 ±0.001 | 0.915 ±0.021 | 0.975 ±0.022 | 0.085 |
| 60 | 0.999 ±0.001 | 0.879 ±0.049 | 0.941 ±0.057 | 0.120 |
| 80 | 1.000 ±0.001 | 0.912 ±0.034 | 0.976 ±0.017 | 0.088 |
| 120 | 1.000 ±0.000 | 0.921 ±0.034 | 0.987 ±0.018 | 0.079 |
| 輸入 參數量固定 23,650 |
感受野 /邊長 | 有效感受野 組織像素 |
TRAIN | VAL 樣本 | 差距 |
|---|---|---|---|---|---|
| 20² | 110% | 45.9 px | 1.000 | 0.932 ±0.027 | 0.068 |
| 24² | 92% | 38.2 px | 1.000 | 0.924 ±0.029 | 0.075 |
| 32² ← 我們用的 | 69% | 35.4 px | 0.999 | 0.916 ±0.019 | 0.083 |
| 40² | 55% | 23.0 px | 0.997 | 0.906 ±0.033 | 0.092 |
| 48² | 46% | 23.6 px | 0.996 | 0.896 ±0.036 | 0.100 |
| 64² | 34% | 17.7 px | 0.987 | 0.864 ±0.066 | 0.123 |
① 切成 patch:無效 60× 資料量,VAL 不動、差距不動。
② 更淺的模型:+0.06 在種子雜訊內;但差距更小、更穩定。
③ 加入周圍組織:+0.21 唯一顯著的槓桿,差距 0.30 → 0.09。
SmallCNN(4 層 · 23,650 參數) + 整顆 ROI + 14px 周圍 → 縮放 32×32
VAL 樣本 0.911 ±0.021 · 過擬合差距 0.087 · 病人層級 0.971
誠實下限:gain 不變特徵 ≈ 0.80;跨掃描儀尚未測試。