Voriacare · Edge Cardiac-CT · Tài liệu

Hướng dẫn chi tiết — Pipeline EAT & CCTA

Từng bước xử lý, kèm ảnh 2D/3D tham khảo và phương pháp tính (công thức + ảnh minh họa có chú thích).
📅 2026-07-14🖥 DGX Spark GB10 · arm64🔬 ImageCAS ×1000

Nguyên tắc xuyên suốt: ML định vị vùng (ROI) — phép tính deterministic ra con số. Model chỉ khoanh vùng; giá trị (EAT mL, Dice) là phép đếm/đo tường minh trên vùng đó → audit được, model không "đoán" ra số.

Mục lục
  1. Tổng quan 2 phase (EAT · CCTA)
  2. Bước chung — Ingest & HU
  3. Phase 1 · EAT — định vị ROI (silver)
  4. Phase 1 · EAT — cách tính EAT (công thức + ảnh)
  5. Phase 1 · EAT — train nnU-Net + TensorRT
  6. Phase 2 · CCTA — segment mạch vành (gold)
  7. Phase 2 · CCTA — cách đánh giá (Dice/IoU + ảnh)
  8. Tổng hợp công thức & metric

1Tổng quan 2 phase

PhaseNhiệm vụNhãnĐầu raKết quả
1 · EATĐo mỡ thượng tâm mạc (Epicardial Adipose Tissue)SILVER (proxy)Thể tích mỡ (mL)Dice ROI ~0.96 · EAT proxy
2 · CCTAPhân đoạn lòng động mạch vànhGOLD (thật)Mask mạch vànhDice held-out 0.799
1 · Data
CT → HU
2 · Nhãn
Silver/Gold ROI
3 · Train
nnU-Net
4 · Optimize
TensorRT
5 · Đo/Đánh giá
EAT mL · Dice

2Bước chung — Ingest & HU verification

Đọc chuỗi CT → dựng volume 3D với giá trị Hounsfield Unit (HU) đúng. HU sai là sai toàn bộ downstream (mỡ nằm trong dải HU rất hẹp).

HU = pixel_lưu_trữ × RescaleSlope + RescaleIntercept
// air ≈ −1000, nước ≈ 0, mỡ ≈ −190…−30, cơ ≈ +40, xương/cản-quang > +300
Kiểm chứng độc lập: đọc 1 lát bằng pydicom, tự áp Rescale, so voxelwise với SimpleITK → bắt bug "rescale không áp". 200/200 volume đạt HU chuẩn (air = −1024 đồng nhất).

3Phase 1 · EAT — định vị ROI màng ngoài tim (silver) proxy

ImageCAS không có nhãn màng ngoài tim → tạo nhãn silver (bootstrap):

a
TotalSegmentator
whole-heart
b
Convex hull
từng lát
c
Dilation EDT
~3mm
d
ROI pericardium
Hạn chế đã biết: ROI ≈ 1.6× thể tích tim (hull bắc cầu qua lõm mạch lớn + dilation đồng nhất) → over-inclusive → EAT hơi cao. Đây là lý do EAT là proxy, cần gold label để chuẩn lâm sàng.

4Phase 1 · EAT — CÁCH TÍNH EAT (deterministic)

Trong ROI, đếm voxel có HU thuộc dải mỡ, nhân thể tích voxel:

V_voxel = sx · sy · sz  (mm³, spacing của ảnh)
N_mỡ = số voxel thỏa: (voxel ∈ ROI) (−190 ≤ HU ≤ −30)
EAT (mL) = N_mỡ × V_voxel ÷ 1000
Cách tính EAT
Minh họa tính EAT (Case 107). A: lát CT (HU thật). B: ML định vị ROI màng ngoài tim (viền xanh). C: voxel mỡ (HU −190…−30) trong ROI được tô vàng — đây chính là N_mỡ được đếm. Công thức + kết quả (90.4 mL) ghi ở tiêu đề.
EAT 2D case 107
Tham khảo 2D — CT · +ROI · +EAT · coronal (Case 107).
EAT 3D case 107
Tham khảo 3D — vỏ pericardium + mỡ vàng (Case 107).
Phép tính này không có model regress ra số — chỉ đếm voxel HU. Test phantom: chính xác tuyệt đối (1000 voxel × 0.25 mm³ = đúng 0.25 mL).

5Phase 1 · EAT — train nnU-Net + TensorRT

Train segmenter nnU-Net trên nhãn silver để thay chuỗi hull heuristic bằng 1 forward pass (exportable). Rồi export ONNX → TensorRT.

BướcKết quả
nnU-Net 3d_fullres (early-stop @604)EMA pseudo-Dice 0.9747 · held-out 0.9549
STU-Net-S (transfer)held-out 0.9585 — thắng nhẹ, 2× ít param, 15× ít epoch (xem tab So sánh)
ONNX → TensorRTparity argmax 99.98% vs torch (xem tab Trạng thái)
Trung thực: Dice ~0.96 nghĩa model học lại đúng hull proxy — không sửa over-inclusion. EAT đúng lâm sàng vẫn cần gold pericardium label.

6Phase 2 · CCTA — segment động mạch vành (gold) gold

Khác EAT: ImageCAS có nhãn vàng động mạch vành do chuyên gia → supervised thật. Train nnU-Net 3d_fullres, fold_0.

Đặc điểmGiá trị
NhãnBinary (0=nền, 1=vành), foreground ~0.15% (mất cân bằng cực đoan)
TrainnnU-Net 3d_fullres · 500 epoch
Held-out Dice0.799 (100-ep: 0.743) — đúng dải benchmark ImageCAS

7Phase 2 · CCTA — CÁCH ĐÁNH GIÁ (Dice / IoU)

So mask Prediction (P) với Gold (G) theo độ chồng khớp:

TP = |P ∩ G|   FP = |P \ G|   FN = |G \ P|
Dice = 2·|P ∩ G| ÷ (|P| + |G|) = 2·TP ÷ (2·TP + FP + FN)
IoU = |P ∩ G| ÷ |P ∪ G| = TP ÷ (TP + FP + FN)
Cách đánh giá CCTA
Minh họa đánh giá CCTA (Case 642). A: lát CTA cản quang. B: viền GOLD (vàng) vs Prediction (đỏ). C: chồng khớp — xanh = TP (đúng), đỏ = FP (thừa), vàng = FN (thiếu). Dice = 0.888, IoU = 0.799.
CCTA 3D gold vs pred
Tham khảo 3D — cây động mạch vành: GOLD vs Prediction (Case 1, Dice 0.875). Xem tab CCTA 3D để xoay/zoom.

8Tổng hợp công thức & metric

MetricCông thứcDùng cho
HUpixel × slope + interceptChuẩn hóa cường độ CT
EAT (mL)N_mỡ × V_voxel ÷ 1000Thể tích mỡ (Phase 1)
Dice2·TP ÷ (2·TP+FP+FN)Độ trùng mask (cả 2 phase)
IoUTP ÷ (TP+FP+FN)Độ trùng (nghiêm hơn Dice)
EAT MAE / biasmean|E₁−E₂| / mean(E₁−E₂)So EAT giữa 2 model
Wilcoxon pkiểm định paired (per-case Dice)Chênh lệch có ý nghĩa TK?
Xem thêm: kết quả trực quan ở Gallery 3D / 3D tương tác (EAT) và CCTA / CCTA 3D. So sánh model ở tab So sánh. Chi tiết kỹ thuật ở Thuật toán.