Voriacare · Edge Cardiac-CT

Pipeline EAT: từ Label → Training → Inference

Quy trình đo mỡ quanh tim (Epicardial Adipose Tissue) tự động, on-device trên Jetson AGX Orin
📅 2026-07-09🔬 Dataset: ImageCAS ×200 🧠 nnU-Net + TensorRT FP16 🖼 Gallery 3D Thuật toán 📄 Trạng thái

Nguyên tắc cốt lõi: ML định vị vùng (ROI), phép tính HU deterministic ra con số. Model chỉ khoanh vùng màng ngoài tim (pericardium); giá trị EAT là phép đếm voxel mỡ trong vùng đó — hoàn toàn audit được, model không "đoán" ra số.

1 · Data
DICOM/CT → HU
verify HU đúng
2 · Label
Silver ROI
TotalSegmentator + hull
3 · Train
nnU-Net
Dice 0.96–0.97
4 · Optimize
TensorRT FP16
parity 0.9997
5 · Inference
EAT (mL)
deterministic HU

1Data & HU verification

Đọc chuỗi CT, dựng volume 3D với giá trị Hounsfield Unit (HU) đúng. HU đúng là điều kiện sống còn — mỡ nằm trong dải HU −190…−30, nên sai HU là sai toàn bộ downstream. Ta cross-check độc lập (SimpleITK vs pydicom) để đảm bảo.

Kết quả: 200/200 volume ImageCAS đạt HU chuẩn (air = −1024 đồng nhất, có xương/cản quang), 0 bất thường.

2Silver labeling — tạo nhãn pericardium

Chưa có nhãn pericardium do người vẽ, nên ta bootstrap nhãn "silver": TotalSegmentator khoanh vùng tim (whole-heart) → dựng ROI khoang màng ngoài tim xấp xỉ = convex-hull theo lát cắt + nới 3mm.

BướcCông cụĐầu ra
Localize timTotalSegmentator (GPU)heart mask
Dựng ROI pericardiumconvex-hull + dilation EDTsilver mask (200 ca)
Đo EAT (baseline)đếm HU −190…−30EAT median 98 mL
Minh bạch: ROI silver hơi rộng hơn màng ngoài tim thật (over-inclusive) → EAT ở giai đoạn này là proxy tham chiếu, dùng để huấn luyện model và phát triển pipeline, chưa dùng cho chẩn đoán lâm sàng.

3Training — nnU-Net segmenter pericardium

Huấn luyện model học khoanh pericardium từ 200 nhãn silver, thay cho chuỗi heuristic. Đánh giá trên 40 ca held-out (không dùng khi train).

ModelHeld-out DiceInference/caGhi chú
3d_fullres (250 epoch)0.9596~100 sđộ phân giải gốc
3d_lowres (100 epoch)0.9716~32 sROI thô, ~3× nhanh hơn

Dice = độ trùng khớp vùng (1.0 là hoàn hảo). Lowres đạt Dice cao hơn vì pericardium là vùng lớn/mượt, model coarse ít overfit chi tiết biên.

4Optimize — TensorRT FP16 (edge)

Chuyển model sang engine TensorRT FP16 để chạy nhanh, self-contained trên Jetson. Kiểm chứng độ chính xác không đổi:

Parity FP16 vs FP32 (ca thật): Dice 0.9997, sai lệch EAT < 0.11 mL → FP16 an toàn cho production. Engine 63 MB, chạy ~123 ms/patch.
ONNX export  →  onnx.checker OK, argmax vs torch 99.996%
TensorRT     →  trtexec --fp16  →  pericardium_fp16.plan
Verify       →  Dice(TRT, torch) = 0.9997 trên ca held-out

5Inference & đo EAT — ảnh tham khảo

Trên ca mới: CT → model khoanh pericardium (cyan) → đếm voxel mỡ (đỏ, HU −190…−30) trong vùng → EAT (mL). Con số hoàn toàn deterministic từ HU.

Pericardium ROI (model dự đoán) Epicardial fat (voxel HU −190…−30)
case 154
Ca 154 — EAT 63.6 mL, mean HU −77.4 · Dice 0.978 (ca khớp tốt nhất). Ít mỡ quanh tim.
case 114
Ca 114 — EAT 125.9 mL, mean HU −77.8. Mỡ vừa phải, phân bố quanh vành & rãnh.
case 76
Ca 76 — EAT 194.2 mL, mean HU −84.0. Nhiều mỡ thượng tâm mạc (nhìn rõ vùng đỏ trong rãnh & quanh buồng tim).
case 33
Ca 33 — EAT 92.7 mL, mean HU −83.9 · Dice 0.896 (ca khó nhất trong held-out). ROI vẫn bám sát tim.
Mỗi ảnh gồm 4 khung: CT gốc · CT + đường viền pericardium · CT + mỡ EAT (đỏ) · lát cắt coronal. Đây là đầu ra thật của model trên các ca held-out (không dùng khi huấn luyện).

6Hình 3D — phân bố mỡ trong không gian

Dựng lại 3D từ mask: vỏ pericardium (cyan, trong suốt) bao ngoài, mỡ EAT (đám mây điểm đỏ) bên trong, nhìn từ 3 góc. Thấy rõ mỡ tập trung ở rãnh vành & quanh buồng tim, và so sánh trực quan lượng mỡ giữa các ca.

Vỏ pericardium (model) Mỡ EAT (voxel HU −190…−30)
case 76 3D
Ca 76 — EAT 194.2 mL: mỡ dày, phủ gần kín (nhiều mỡ thượng tâm mạc).
case 114 3D
Ca 114 — EAT 125.9 mL: mỡ mức trung bình.
case 154 3D
Ca 154 — EAT 63.6 mL: mỡ thưa (đỏ ít hơn hẳn) — đối lập trực quan với ca 76.
case 33 3D
Ca 33 — EAT 92.7 mL.
3D dựng bằng marching-cubes trên mask đã làm mượt (Gaussian): mỡ EAT = mặt vàng có đổ bóng, màng pericardium = vỏ trong suốt. 👉 Xem Gallery 10 ca kiểm chứng (kèm phân tích over-inclusion).

Tóm tắt cho báo cáo

Hạng mụcTrạng thái
Pipeline end-to-end (data → EAT)Chạy được
Model pericardium (nnU-Net)Dice held-out 0.96–0.97
Tối ưu edge (TensorRT FP16)parity 0.9997, ~32 s/ca (lowres)
Chạy on-device (Jetson AGX Orin)không gửi dữ liệu ra ngoài
Giới hạn & hướng nâng cấp: EAT hiện là proxy (nhãn silver hơi rộng). Để đạt độ chính xác lâm sàng cần nhãn gold do bác sĩ vẽ để tinh chỉnh & kiểm định. Đây là bước tiếp theo được khuyến nghị.