Model độc lập

VC Heart — model tách tim riêng, thay thế TotalSegmentator

Mục tiêu không phải tăng độ chính xác EAT (nút thắt là màng ngoài tim, không phải tim), mà là tự chủ: bỏ phụ thuộc TotalSegmentator lúc chạy, license sạch cho cả thương mại, và nhanh hơn ở bước chậm nhất của quy trình.

Dữ liệu TotalSegmentator dataset (CC BY 4.0) Kiến trúc nnU-Net v2 · 3d_fullres Nhãn heart (1 lớp)
Nội dung
  1. Vì sao tự train — và vì sao KHÔNG phải để tăng EAT
  2. License: chỗ nào sạch, chỗ nào vướng
  3. Dữ liệu & cách dựng nhãn
  4. Trạng thái huấn luyện
  5. Đánh giá đối chiếu với TotalSegmentator

AVì sao tự train

ĐƯỢC

Tự chủ + tốc độ

  • Không phụ thuộc TotalSegmentator lúc chạy.
  • License sạch (CC BY 4.0, chỉ cần ghi nguồn).
  • Nhanh hơn: TS chạy model 117 cấu trúc rồi mới lấy tim; model này chỉ học 1 nhãn.
KHÔNG ĐƯỢC

Không tăng độ chính xác EAT

  • Đo thực tế: clip theo tim chỉ đổi EAT ~5%.
  • Nút thắt vẫn là ranh giới màng ngoài tim → cần nhãn gold.
  • Không tách được từng buồng tim (bộ này chỉ có 1 nhãn "heart").

BLicense — chỗ nào sạch, chỗ nào vướng

Thành phầnLicenseThương mại
Code TotalSegmentatorApache-2.0✅ Được
Weights task total (cái ta dùng để tách tim)Apache-2.0✅ Được
heartchambers_highres, tissue_typesFree non-commercial⚠️ Phải mua
Dataset 1228 CT (Zenodo)CC BY 4.0✅ Được (ghi nguồn)
Cách dùng hiện tại (task="total") vốn đã sạch license. Việc tự train là để bỏ phụ thuộc runtimetăng tốc, không phải để gỡ rối pháp lý.

CDữ liệu & cách dựng nhãn

Nguồn: TotalSegmentator dataset v2.0.1 — 1228 CT thường quy toàn thân, 117 cấu trúc, CC BY 4.0.

Sàng lọcSố caGhi chú
Tổng subject1228CT toàn thân, nhiều ca không chụp tới tim
Nhãn tim rỗng / quá nhỏ329loại
Có tim thật (>2000 voxel)899trung vị 533 mL — khớp phép đo của ta (541 mL)
CT lỗi direction cosines (ITK từ chối)72loại (nnU-Net đọc bằng SimpleITK)
Dùng để train827Dataset501_Heart
Hai trục trặc kỹ thuật đã xử lý: (1) một số file NIfTI có direction cosines không trực chuẩn khiến ITK báo lỗi — đọc nhãn bằng nibabel rồi gắn geometry từ chính file CT; (2) trục mảng khác nhau (nibabel x,y,z vs SimpleITK z,y,x) — đã chuyển trục. Kiểm chứng: mean HU trong vùng nhãn = 66–123 HU (máu/cơ tim) → nhãn khớp CT, không lệch.

DTrạng thái huấn luyện

1
Tải dataset
23.6 GB
2
Dựng Dataset501
827 ca
3
Preprocess
nnU-Net
4
Train
3d_fullres · 250 ep
5
Đánh giá
vs TotalSeg

Trạng thái: HOÀN TẤT

Hạng mụcKết quả
Epoch250 / 250 · 89 s/epoch · ~6 h 15 m
Pseudo dice (epoch cuối)0.9665
EMA best0.9641
Validation 166 ca hold-outDice 0.9484 · IoU 0.9139

Diễn biến: 0.858 (ep12) → 0.938 (ep55) → 0.956 (ep130) → 0.9665 (ep250). Val bám sát train suốt quá trình — không overfit.

EĐánh giá đối chiếu với TotalSegmentator

Phép so đầu-đối-đầu: cùng ca, cùng máy, cùng GPU, chạy trên hai bộ dữ liệu độc lập — và cả hai đều KHÔNG nằm trong tập train.

Chỉ sốImageCAS
15 ca · CT tim gated
CCTA nội bộ
44 ca · lát mỏng
Dice vs TotalSegmentator0.96970.9707 ± 0.0033
Dice thấp nhất0.96560.9624
Chênh thể tích−0.7%+0.3%
Thời gian / ca — VC model6.8 s9.3 s
Thời gian / ca — TotalSegmentator26.2 s25.3 s
Tăng tốc3.9×2.7×
Ca chạy được15/1544/44 · 0 lỗi
Kết luận: model tái lập TotalSegmentator ở mức Dice ~0.97 trên cả hai bộ, chênh thể tích dưới 1%, và nhanh hơn 2.7–3.9×. Độ lệch chuẩn 0.0033 → ổn định trên mọi ca, không ca nào hỏng. Đủ điều kiện thay TotalSegmentator ở Bước 3.

Hình 3D so sánh

🖱 Xem 3D tương tác toàn bộ 44 ca (xoay/zoom, bật-tắt từng model): mở trình xem 3D →

Chọn hiển thị các ca Dice THẤP NHẤT (không chọn ca đẹp) để thấy đúng điểm yếu.

Lưới 3D 8 ca: bề mặt tim VC model chồng lên TotalSegmentator
Tổng quan 8 ca. Xanh = VC model chồng lên cam = TotalSegmentator. Hai bề mặt gần như trùng khít ở mọi ca.
So sánh chi tiết ca CCTA-11, Dice 0.9624
CCTA-11 — ca Dice thấp nhất (0.9624). A lát axial: viền liền = VC model, nét đứt = TotalSegmentator — gần như trùng. B/C bề mặt 3D từng model (362 vs 366 mL). D chồng hai bề mặt. Ngay ca tệ nhất, khác biệt cũng chỉ là lớp vỏ mỏng ở rìa.
So sánh chi tiết ca CCTA-14
CCTA-14 — ca Dice thấp thứ hai (0.9640).
🔒 Quyền riêng tư: dữ liệu CCTA là bệnh nhân thật. Toàn bộ chỉ dùng mã CCTA-01…CCTA-44; bảng ánh xạ tên lưu ngoài repo, không commit và không đưa lên web. Hình chỉ hiện bề mặt tim, không có thông tin định danh.
⚠️ Cách đọc Dice ở đây: TotalSegmentator là mốc tham chiếu (thứ ta đang thay thế), không phải chân lý giải phẫu. Dice cao nghĩa là model tái lập được TS — chứ không có nghĩa cả hai đều đúng tuyệt đối.
Giới hạn đã biết: dữ liệu train là CT thường quy toàn thân, không phải CT tim gated. Model sẽ tổng quát tốt nhưng có thể chưa sắc bằng trên CT tim chuyên dụng → bước nâng cấp tự nhiên tiếp theo là fine-tune trên chính ImageCAS. Đây không phải thiết bị y tế.