Giới thiệu dự án
Bối cảnh ngành và thực trạng y tế
Theo các báo cáo y tế toàn cầu và thống kê từ Tổ chức Y tế Thế giới (WHO), các bệnh lý liên quan đến hệ cơ xương khớp, đặc biệt là cột sống (thoái hóa, trượt đốt sống, xẹp đốt sống, hẹp ống sống/khe đĩa đệm), là một trong những nguyên nhân hàng đầu gây tàn tật và giảm năng suất lao động. Tại Việt Nam, tỷ lệ người trưởng thành mắc các bệnh lý thoái hóa cột sống thắt lưng và cổ ngày càng gia tăng và có xu hướng trẻ hóa.
Chụp X-quang kỹ thuật số là kỹ thuật chẩn đoán hình ảnh phổ biến nhất nhờ chi phí hợp lý, thời gian thực hiện nhanh và khả năng bao quát toàn diện cấu trúc xương. Tuy nhiên, khối lượng phim X-quang khổng lồ đặt ra áp lực nặng nề lên đội ngũ bác sĩ chẩn đoán hình ảnh:
- Thời gian đào tạo một bác sĩ chẩn đoán hình ảnh đọc phim cơ xương khớp thành thạo kéo dài từ 5 đến 10 năm.
- Tỷ lệ chẩn đoán sót hoặc sai lệch do quá tải công việc (overload fatigue) tại các bệnh viện tuyến trung ương dao động từ 15% đến 25% đối với các tổn thương nhỏ hoặc giai đoạn sớm.
- Tình trạng phân bổ nguồn lực y tế không đồng đều giữa các bệnh viện tuyến trung ương và tuyến địa phương khiến việc chẩn đoán sớm gặp nhiều rào cản.
QUY TRÌNH CHẨN ĐOÁN LÂM SÀNG VỚI HỆ THỐNG AI
+------------------+ +-------------------+ +----------------------+
| Bệnh nhân chụp | ---> | Ảnh DICOM / X-Q | ---> | Trích xuất đặc trưng |
| X-quang Cột Sống| | VinDr-SpineXR | | (ResNet-152 + FPN) |
+------------------+ +-------------------+ +----------------------+
|
v
+------------------+ +-------------------+ +----------------------+
| Bác sĩ duyệt & | <--- | Ứng dụng Web | <--- | Phát hiện & Phân loại|
| Kê đơn điều trị | | (Django + React) | | (Faster R-CNN / FCOS)|
+------------------+ +-------------------+ +----------------------+
Vấn đề cụ thể cần giải quyết (Problem Statement)
Đề tài "Xây dựng ứng dụng web phát hiện bất thường trên ảnh X-quang cột sống" của tác giả Phạm Nguyễn Thanh Bình (Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin - ĐHQG-HCM, 2023) giải quyết bài toán: Tự động hóa quá trình định vị (localization via bounding box) và phân loại (classification) các tổn thương/bất thường cấu trúc trên ảnh X-quang cột sống, hỗ trợ bác sĩ giảm thiểu thời gian đọc phim và nâng cao độ chính xác chẩn đoán.
Các điểm nghẽn (pain points) lớn nhất cần vượt qua:
- Thiếu hụt dữ liệu chuẩn hóa y khoa: Việc gán nhãn chính xác bounding box trên ảnh X-quang đòi hỏi nhiều bác sĩ chuyên khoa sâu cùng hội chẩn và kiểm định chéo.
- Mất cân bằng dữ liệu trầm trọng (Severe Class Imbalance): Tỷ lệ xuất hiện giữa các bệnh lý phổ biến (gai xương - Osteophytes) và bệnh lý ít gặp hơn (kết hợp xương - Surgical implant, xẹp đốt sống - Vertebral collapse) có sự chênh lệch lớn.
- Hiện tượng dịch chuyển miền (Domain Shift Problem): Thiết bị chụp X-quang từ các hãng khác nhau (Siemens, GE, Philips) với thông số liều chiếu (kVp, mAs), độ phân giải và độ tương phản khác nhau tạo ra biến thiên hình ảnh lớn giữa các cơ sở y tế.
Mục tiêu dự án
- Mục tiêu 1: Phân tích, tiền xử lý và xây dựng pipeline trích xuất dữ liệu từ bộ dữ liệu y tế quy mô lớn VinDr-SpineXR (10.469 ảnh X-quang cột sống chuẩn DICOM).
- Mục tiêu 2: Triển khai, tối ưu hóa và thực nghiệm so sánh các kiến trúc mạng nơ-ron tích chập sâu (Deep Convolutional Neural Networks) tiên tiến gồm cả hai hướng tiếp cận: One-Stage Detector (RetinaNet, FCOS) và Two-Stage Detector (Faster R-CNN) với các mạng backbone khác nhau (VGG16, ResNet50, ResNet101, ResNet152 kết hợp Feature Pyramid Network - FPN).
- Mục tiêu 3: Xây dựng ứng dụng web hoàn chỉnh trên nền tảng Django phục vụ môi trường khám chữa bệnh thực tế, cung cấp chức năng chẩn đoán tự động, điều chỉnh ngưỡng tin cậy (confidence threshold) theo thời gian thực và quản lý dự án gán nhãn, hội chẩn đa bác sĩ.
Phương pháp tiếp cận và kết quả kỳ vọng
- Phương pháp: Sử dụng Transfer Learning từ các trọng số tiền huấn luyện (ImageNet pre-trained weights), tích hợp các kỹ thuật tăng cường dữ liệu đặc thù y khoa (contrast adjustment, elastic transform, horizontal flip), áp dụng hàm mất mát Focal Loss và cơ chế Centerness để xử lý mất cân bằng lớp và dự đoán không cần anchor box (anchor-free).
- Kết quả kỳ vọng: Đạt mAP@0.5 vượt trội trên tập kiểm thử cho 7 nhóm tổn thương chính (gai xương, trượt đốt sống, hẹp khe khớp, xẹp đốt sống, hẹp lỗ liên hợp, kết hợp xương và bất thường khác); độ trễ xử lý suy luận (inference latency) dưới 1,5 giây/ảnh trên GPU tiêu chuẩn; hệ thống web trực quan, đáp ứng tiêu chuẩn cộng tác y khoa.
Phạm vi và giới hạn
- Phạm vi dữ liệu: Tập trung vào 10.469 hình ảnh X-quang cột sống thuộc bộ dữ liệu VinDr-SpineXR được gán nhãn bởi các bác sĩ thuộc Bệnh viện Đại học Y Hà Nội và Bệnh viện Trung ương Quân đội 108.
- Giới hạn kỹ thuật: Xử lý hình ảnh X-quang 2D dạng tĩnh; chưa tích hợp xử lý chuỗi cắt lớp 3D (CT Scan/MRI) và các ca phẫu thuật phức tạp có dị tật cấu trúc bẩm sinh hiếm gặp.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
So sánh các giải pháp thương mại và học thuật hiện nay
Trên thị trường quốc tế, nhiều hệ thống AI y tế đã được Cục Quản lý Thực phẩm và Dược phẩm Hoa Kỳ (FDA) cấp phép hoặc triển khai lâm sàng. Dưới đây là bảng phân tích so sánh:
| Giải pháp |
Công nghệ cốt lõi |
Phạm vi ứng dụng |
Ưu điểm |
Nhược điểm |
| IDx-DR |
Deep CNN (Phân loại tự động) |
Võng mạc mắt (Tiểu đường) |
FDA chấp thuận đầu tiên (2018), độ tự động hóa hoàn toàn |
Chuyên biệt 1 loại bệnh, không định vị bounding box |
| Aidoc |
3D Deep CNNs |
CT/X-quang cấp cứu (Đột quỵ, gãy xương) |
Tích hợp sâu vào PACS/RIS, cảnh báo real-time |
Chi phí bản quyền đắt đỏ, là hệ thống đóng (closed source) |
| Lunit INSIGHT |
ResNet Backbone + Attention |
X-quang lồng ngực (Phổi) |
Độ nhạy cao (>95%), bản đồ nhiệt Heatmap trực quan |
Tối ưu riêng cho bệnh lý phổi, chưa chuyên sâu về cột sống |
| InferVISION |
Multi-task Deep Learning |
X-quang & CT phổi/tim mạch |
Tốc độ quét nhanh, độ chính xác phát hiện nốt mờ cao |
Khả năng mở rộng cho tổn thương xương khớp bị giới hạn |
| Giải pháp đề tài (VinDr-SpineXR Web) |
Faster R-CNN / FCOS + FPN |
X-quang cột sống (13 nhãn tổn thương) |
Chuyên sâu cột sống, mã nguồn mở, hỗ trợ hội chẩn đa bác sĩ |
Phụ thuộc vào chất lượng phân giải của ảnh X-quang đầu vào |
Ma trận yêu cầu người dùng (MoSCoW Prioritization)
- Must-have (Bắt buộc phải có):
- Tải lên file ảnh định dạng y tế DICOM hoặc định dạng tiêu chuẩn (PNG, JPEG).
- Tự động phát hiện vị trí tổn thương (bounding box) kèm nhãn bệnh lý và điểm số tin cậy (confidence score).
- Khả năng điều chỉnh ngưỡng lọc xác suất (Confidence Threshold Slider) từ 0.0 đến 1.0 để bác sĩ kiểm soát tỷ lệ dương tính giả/âm tính giả.
- Should-have (Nên có):
- Hệ thống phân quyền: Quản trị viên (Admin) và Bác sĩ chuyên khoa (Doctor).
- Phân công dự án gán nhãn và kiểm định kết quả chẩn đoán chéo giữa các bác sĩ.
- Could-have (Có thể có):
- Xuất báo cáo kết quả chẩn đoán định dạng PDF chuẩn bệnh án.
- Tích hợp công cụ đo đạc góc Cobb, khoảng cách xẹp đốt sống trực tiếp trên giao diện web.
- Won't-have (Chưa triển khai trong giai đoạn này):
- Tự động đồng bộ hóa hai chiều với hệ thống HIS/EMR của bệnh viện qua chuẩn HL7/FHIR.
Thiết kế hệ thống
Kiến trúc tổng thể hệ thống
Hệ thống được thiết kế theo mô hình Client-Server phân tầng (Tiered Architecture), tách biệt giữa tầng giao diện người dùng, tầng xử lý nghiệp vụ/API và tầng suy luận mô hình học sâu (Inference Engine).
+------------------------------------------------------------------------+
| CLIENT TIER (Frontend) |
| - Web Browser / UI (HTML5, JavaScript, CSS3, Bootstrap 5) |
| - Canvas Render Engine: Bounding Box & Pathology Viewer |
| - Interactive Confidence Threshold Controller |
+-----------------------------------^------------------------------------+
| HTTPS / RESTful API (JSON)
+-----------------------------------v------------------------------------+
| APPLICATION TIER (Backend - Django) |
| - Authentication & RBAC Service (Admin vs Doctor) |
| - DICOM Image Processor (pydicom, OpenCV, Windowing/VOI LUT) |
| - Project & Annotation Management Workflow |
| - Asynchronous Task Queue (Celery Worker + Redis Cache) |
+-----------------------------------^------------------------------------+
| PyTorch C++ Bridge / TorchScript
+-----------------------------------v------------------------------------+
| DEEP LEARNING INFERENCE ENGINE |
| - Model Zoo: Faster R-CNN (ResNet152-FPN), RetinaNet, FCOS |
| - Post-processing: Non-Maximum Suppression (NMS), IoU Filtering |
| - Hardware Acceleration: CUDA 11.8 / cuDNN on NVIDIA Tensor Core |
+------------------------------------------------------------------------+
Ngăn xếp công nghệ chi tiết (Technology Stack)
- Hệ điều hành môi trường triển khai: Ubuntu 22.04 LTS x86_64.
- Ngôn ngữ lập trình cốt lõi: Python 3.10.12, JavaScript (ES6+).
- Deep Learning Frameworks: PyTorch v2.0.1, Torchvision v0.15.2, CUDA Toolkit 11.8.
- Thư viện xử lý ảnh và khoa học dữ liệu:
pydicom v2.4.2 (Đọc và phân tích siêu dữ liệu DICOM).
opencv-python v4.8.0 (Tiền xử lý, cân bằng độ sáng, resize).
albumentations v1.3.1 (Tăng cường dữ liệu huấn luyện y khoa).
numpy v1.24.3, pandas v2.0.3, matplotlib v3.7.2.
- Web Backend Framework: Django Framework v4.2.4 (Python Web Framework).
- Cơ sở dữ liệu: SQLite3 (môi trường phát triển thử nghiệm) / PostgreSQL v15.3 (môi trường sản xuất).
- Công cụ hầm truyền tải & Web Server: Nginx v1.24.0, Gunicorn v21.2.0, Ngrok (cho môi trường thử nghiệm từ xa).
Thiết kế giao diện lập trình ứng dụng (RESTful API Specification)
Hệ thống cung cấp các Endpoint chuẩn RESTful:
POST /api/v1/diagnosis/predict/:
- Header:
Authorization: Bearer <Token>, Content-Type: multipart/form-data
- Payload:
file (ảnh X-quang DICOM/PNG), threshold (float, mặc định 0.5), model_type (faster_rcnn_resnet152 | fcos_resnet50).
- Response (200 OK):
{
"status": "success",
"inference_time_ms": 342.5,
"image_dimensions": {"width": 2048, "height": 2048},
"predictions": [
{
"class_id": 1,
"class_name": "Osteophytes",
"confidence": 0.894,
"bbox": {"xmin": 450, "ymin": 820, "xmax": 580, "ymax": 910}
},
{
"class_id": 3,
"class_name": "Disc space narrowing",
"confidence": 0.762,
"bbox": {"xmin": 430, "ymin": 930, "xmax": 610, "ymax": 1020}
}
]
}
Thiết kế bảo mật và tuân thủ dữ liệu y tế (Security & Compliance)
- Khử định danh dữ liệu y tế (De-identification): Mọi file DICOM tải lên hệ thống đều được tự động loại bỏ các thẻ dữ liệu cá nhân (Patient Name -
0010,0010, Patient ID - 0010,0020, Patient Birth Date - 0010,0030) trước khi lưu trữ hoặc chuyển vào mô hình suy luận, đảm bảo tính bảo mật theo chuẩn HIPAA.
- Kiểm soát truy cập theo vai trò (Role-Based Access Control - RBAC): Phân tách quyền nghiêm ngặt giữa Bác sĩ (chỉ xem và chẩn đoán ca bệnh được chỉ định) và Quản trị viên (quản lý người dùng, mô hình và toàn bộ dự án).
Phương pháp luận (Methodology)
Quy trình phát triển dự án tuân thủ theo mô hình Agile/Scrum rút gọn trong thời gian 16 tuần (27/02/2023 - 17/06/2023):
- Giai đoạn 1 (Tuần 1 - 4): Thu thập, khảo sát dữ liệu VinDr-SpineXR; giải mã định dạng DICOM; xây dựng data loader; tiền xử lý và tăng cường dữ liệu.
- Giai đoạn 2 (Tuần 5 - 10): Thiết kế, huấn luyện và tinh chỉnh (fine-tuning) các mô hình Faster R-CNN, RetinaNet, FCOS trên GPU clusters.
- Giai đoạn 3 (Tuần 11 - 13): Đánh giá thực nghiệm qua các chỉ số mAP, phân tích biểu đồ nhiệt, biểu đồ phân bố kích thước tổn thương và lựa chọn mô hình tối ưu.
- Giai đoạn 4 (Tuần 14 - 16): Phát triển ứng dụng web Django, tích hợp pipeline suy luận, kiểm thử chức năng và đóng gói tài liệu tốt nghiệp.
Implementation và kết quả
Quá trình phát triển và chi tiết thuật toán
1. Mô hình hai giai đoạn: Faster R-CNN với Feature Pyramid Network (FPN)
Faster R-CNN sử dụng mạng đề xuất vùng (Region Proposal Network - RPN) để tạo ra các hộp ứng viên (RoIs). Kết hợp với FPN, mô hình có khả năng trích xuất các đặc trưng đa quy mô từ tầng thấp (độ phân giải cao, ngữ nghĩa thấp) đến tầng cao (độ phân giải thấp, ngữ nghĩa cao).
Hàm mất mát đa nhiệm (Multi-task Loss) của RPN được xác định:
$$\mathcal{L}{\text{RPN}}({p_i}, {t_i}) = \frac{1}{N{\text{cls}}} \sum_{i} \mathcal{L}{\text{cls}}(p_i, p_i^*) + \lambda \frac{1}{N{\text{reg}}} \sum_{i} p_i^* \mathcal{L}_{\text{reg}}(t_i, t_i^*)$$
Trong đó:
- $i$ là chỉ số của anchor box.
- $p_i$ là xác suất dự đoán anchor $i$ chứa vật thể; $p_i^$ là nhãn thực tế ($p_i^ = 1$ nếu là đối tượng, $p_i^* = 0$ nếu là nền).
- $t_i = (t_x, t_y, t_w, t_h)$ biểu diễn 4 tham số tọa độ hộp bao dự đoán; $t_i^*$ là tọa độ ground-truth.
- $\mathcal{L}{\text{cls}}$ là Binary Cross-Entropy Loss; $\mathcal{L}{\text{reg}}$ là Smooth L1 Loss:
$$\text{Smooth}_{L1}(x) = \begin{cases} 0.5 x^2 & \text{nếu } |x| < 1 \ |x| - 0.5 & \text{ngược lại} \end{cases}$$
2. Mô hình một giai đoạn: RetinaNet với Focal Loss
RetinaNet giải quyết tình trạng mất cân bằng cực đoan giữa mẫu tiền cảnh (foreground) và hậu cảnh (background) bằng cách thay thế hàm Cross Entropy thông thường bằng Focal Loss:
$$\text{FL}(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)$$
Trong đó $p_t$ là xác suất dự đoán của mô hình cho lớp chính xác, $\gamma$ là hệ số tập trung (focusing parameter, thường chọn $\gamma = 2.0$), $\alpha_t$ là hệ số cân bằng trọng số lớp. Mẫu dễ phân loại ($p_t \to 1$) sẽ có hệ số điều chế $(1 - p_t)^\gamma \to 0$, triệt tiêu đóng góp gradient của các mẫu âm tính dễ, giúp mô hình tập trung vào các tổn thương xương khó nhận biết.
3. Mô hình không dùng Anchor: FCOS (Fully Convolutional One-Stage)
FCOS loại bỏ hoàn toàn các anchor box cố định, dự đoán trực tiếp tọa độ hộp giới hạn và nhãn tại từng vị trí pixel $(x, y)$ trên feature map. Để loại bỏ các bounding box chất lượng thấp nằm xa tâm đối tượng, FCOS giới thiệu nhánh Centerness:
$$\text{Centerness}^* = \sqrt{\frac{\min(l^, r^)}{\max(l^, r^)} \times \frac{\min(t^, b^)}{\max(t^, b^)}}$$
Trong đó $l^, r^, t^, b^$ lần lượt là khoảng cách từ điểm đang xét đến 4 cạnh (trái, phải, trên, dưới) của ground-truth bounding box.
# Trích đoạn PyTorch triển khai hàm mất mát Focal Loss và Centerness
import torch
import torch.nn as nn
import torch.nn.functional as F
class SigmoidFocalLoss(nn.Module):
def __init__(self, alpha: float = 0.25, gamma: float = 2.0, reduction: str = 'mean'):
super(SigmoidFocalLoss, self).__init__()
self.alpha = alpha
self.gamma = gamma
self.reduction = reduction
def forward(self, logits: torch.Tensor, targets: torch.Tensor) -> torch.Tensor:
p = torch.sigmoid(logits)
ce_loss = F.binary_cross_entropy_with_logits(logits, targets, reduction="none")
p_t = p * targets + (1 - p) * (1 - targets)
loss = ce_loss * ((1 - p_t) ** self.gamma)
if self.alpha >= 0:
alpha_t = self.alpha * targets + (1 - self.alpha) * (1 - targets)
loss = alpha_t * loss
if self.reduction == "mean":
return loss.mean()
elif self.reduction == "sum":
return loss.sum()
return loss
def compute_centerness_loss(pred_centerness: torch.Tensor,
targets_bbox: torch.Tensor,
locations: torch.Tensor) -> torch.Tensor:
"""
Tính toán Binary Cross Entropy cho nhánh Centerness trong FCOS
locations: tọa độ (x, y) trên feature map
targets_bbox: (l, t, r, b)
"""
l, t, r, b = targets_bbox[:, 0], targets_bbox[:, 1], targets_bbox[:, 2], targets_bbox[:, 3]
left_right = torch.stack([l, r], dim=-1)
top_bottom = torch.stack([t, b], dim=-1)
centerness_targets = torch.sqrt(
(left_right.min(dim=-1)[0] / left_right.max(dim=-1)[0].clamp(min=1e-6)) *
(top_bottom.min(dim=-1)[0] / top_bottom.max(dim=-1)[0].clamp(min=1e-6))
)
return F.binary_cross_entropy_with_logits(pred_centerness, centerness_targets)
Thử nghiệm và đánh giá kết quả
Cấu hình môi trường huấn luyện
- Phần cứng: 1x NVIDIA Tesla V100 GPU (16GB VRAM), CPU Intel Xeon 8 cores, 32GB RAM.
- Siêu tham số (Hyperparameters):
- Optimizer: Stochastic Gradient Descent (SGD) với Momentum = 0.9, Weight Decay = $10^{-4}$.
- Learning Rate: Khởi tạo $0.005$, áp dụng chiến lược Warmup 1000 bước đầu kết hợp Cosine Annealing Learning Rate Scheduler.
- Batch Size: 4 (cho ảnh độ phân giải gốc $1024 \times 1024$ pixel).
- Epochs: 30 epochs trên toàn bộ tập dữ liệu huấn luyện.
Tiêu chuẩn đánh giá (Evaluation Metrics)
Đánh giá độ chính xác thông qua chỉ số Intersection over Union (IoU) và Mean Average Precision (mAP) tại ngưỡng IoU 0.5 (mAP@0.5) sử dụng kỹ thuật nội suy 101 điểm (101-point interpolation):
$$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}}$$
$$\text{mAP} = \frac{1}{N_{\text{classes}}} \sum_{k=1}^{N_{\text{classes}}} \text{AP}_k$$
Bảng so sánh kết quả thực nghiệm giữa các kiến trúc
| Mô hình phát hiện |
Mạng trích xuất đặc trưng (Backbone) |
Kích thước ảnh đầu vào |
mAP@0.5 (%) |
mAP@[0.5:0.95] (%) |
Tốc độ suy luận (FPS) |
| RetinaNet |
ResNet-50 + FPN |
$800 \times 800$ |
28.4% |
14.2% |
28.5 |
| FCOS (Anchor-free) |
ResNet-50 + FPN |
$800 \times 800$ |
31.6% |
16.8% |
26.2 |
| Faster R-CNN |
VGG-16 |
$800 \times 800$ |
32.1% |
17.5% |
14.0 |
| Faster R-CNN |
ResNet-50 + FPN |
$1024 \times 1024$ |
38.2% |
21.4% |
18.2 |
| Faster R-CNN |
ResNet-101 + FPN |
$1024 \times 1024$ |
41.5% |
23.9% |
14.5 |
| Faster R-CNN (Tối ưu) |
ResNet-152 + FPN |
$1024 \times 1024$ |
44.8% |
26.1% |
11.8 |
Hiệu suất chi tiết trên từng loại bất thường của mô hình tối ưu (Faster R-CNN ResNet-152 FPN):
- Gai xương (Osteophytes): $\text{AP} = 56.4%$ (Dạng tổn thương phổ biến, đặc trưng cạnh viền rõ nét).
- Dụng cụ phẫu thuật/Kết hợp xương (Surgical implant): $\text{AP} = 72.1%$ (Độ tương phản kim loại rất cao so với mô xương).
- Trượt đốt sống (Spondylolisthesis): $\text{AP} = 48.3%$.
- Hẹp khe khớp/đĩa đệm (Disc space narrowing): $\text{AP} = 42.7%$.
- Xẹp đốt sống (Vertebral collapse): $\text{AP} = 39.5%$.
- Hẹp lỗ liên hợp (Foraminal stenosis): $\text{AP} = 31.2%$ (Cấu trúc giải phẫu hẹp, khó định vị ở góc chụp nghiêng).
- Các bất thường khác (Other lesions): $\text{AP} = 23.5%$.
Đổi mới và đóng góp
Các cải tiến kỹ thuật cụ thể
- Tối ưu hóa đa tầng phân giải với ResNet-152 + FPN: Việc nâng cấp backbone từ các mạng truyền thống (VGG16) lên ResNet-152 kết hợp FPN đã giúp tăng chỉ số mAP@0.5 thêm 12.7% (từ 32.1% lên 44.8%). Các skip connection trong Residual Block giúp khắc phục triệt để hiện tượng triệt tiêu đạo hàm (vanishing gradient) khi mô hình đạt độ sâu 152 lớp.
- Kỹ thuật tiền xử lý Windowing và Auto-Enhancement cho ảnh X-quang: Xây dựng thuật toán chuyển đổi giá trị mật độ quang học Hounsfield Unit (HU) và áp dụng CLAHE (Contrast Limited Adaptive Histogram Equalization) tối ưu hóa riêng cho cấu trúc xương cột sống, giúp tăng độ tương phản của bờ viền gai xương và khoảng hẹp đĩa đệm.
- Môi trường hội chẩn phân tán (Multi-doctor Annotation & Consensus System): Thiết kế module cho phép nhiều bác sĩ cùng xem xét một ca chụp, vẽ và đề xuất các vùng nghi vấn độc lập. Quản trị viên y tế có thể tổng hợp các vùng đề xuất (consensus heatmap) để đưa ra kết luận chẩn đoán chính xác nhất.
SO SÁNH ĐỘ CHÍNH XÁC mAP@0.5 GIỮA CÁC MÔ HÌNH
50% +-----------------------------------------------------------------------+
| |
40% | [ Faster R-CNN ] |
| (ResNet-152 FPN: 44.8%)|
30% | [ FCOS ] [ Faster R-CNN ] |
| [ RetinaNet ] (ResNet-50: 31.6%) (ResNet-50 FPN: 38.2%) |
20% | (ResNet-50: 28.4%) |
| |
10% +-----------------------------------------------------------------------+
RetinaNet FCOS Faster R-CNN (R50) Faster R-CNN (R152)
Đóng góp cho cộng đồng nghiên cứu và công nghiệp
- Cung cấp một bộ benchmark toàn diện, khách quan giữa các dòng mô hình Object Detection hiện đại (One-Stage vs Two-Stage, Anchor-based vs Anchor-free) trên bộ dữ liệu X-quang cột sống Việt Nam VinDr-SpineXR.
- Xây dựng một ứng dụng web hoàn chỉnh có tính ứng dụng thực tiễn cao, có khả năng làm mẫu (boilerplate) cho các nghiên cứu triển khai AI trong y tế tại các trường đại học và viện nghiên cứu trong nước.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng trong quy trình lâm sàng (Clinical Workflow)
- Tiếp nhận ca bệnh: Kỹ thuật viên chụp X-quang tải file DICOM trực tiếp lên hệ thống web của bệnh viện.
- Hệ thống AI xử lý nền (Background Processing): Module Django tiếp nhận ảnh, giải mã DICOM, đưa qua pipeline tiền xử lý và chuyển tới GPU Server chạy mô hình Faster R-CNN ResNet-152 FPN.
- Hiển thị kết quả sơ bộ: Trong vòng chưa đầy 1 giây, hệ thống trả về ảnh X-quang có đánh dấu các khung màu tương ứng với từng loại tổn thương, kèm xác suất tin cậy.
- Bác sĩ xem xét và tương tác: Bác sĩ điều chỉnh thanh trượt Confidence Threshold:
- Khi cần tầm soát diện rộng (screening): Giảm ngưỡng xuống
0.3 để không bỏ sót bất kỳ nguy cơ nào.
- Khi cần chẩn đoán xác định chính xác: Tăng ngưỡng lên
0.7 để loại bỏ hoàn toàn các dương tính giả.
- Ký số và xuất kết quả: Bác sĩ xác nhận kết quả chẩn đoán và hệ thống tự động xuất phiếu kết quả chẩn đoán hình ảnh.
Hướng dẫn triển khai hệ thống (Deployment Architecture)
[ Internet / Intranet Bệnh viện ]
|
+-----v-----+
| Nginx | (Reverse Proxy, SSL Termination, Static Files)
+-----+-----+
|
+-----v-----+
| Gunicorn | (WSGI Application Server, 4 Workers)
+-----+-----+
|
+-----v------------------------------------+
| Django Backend (Core) |
+-----+------------------------------+-----+
| |
+-----v------+ +------v-------+
| PostgreSQL | (Database) | Redis Cache | (Broker Queue)
+------------+ +------+-------+
|
+------v-------+
| Celery Worker| (GPU Inference)
+--------------+
Yêu cầu phần cứng máy chủ (Server Hardware Requirements)
- CPU: Intel Xeon Silver 4210R (10 Cores, 2.40 GHz) hoặc AMD EPYC 7302P.
- RAM: Tối thiểu 32GB DDR4 ECC.
- GPU: NVIDIA RTX A4000 (16GB VRAM) hoặc NVIDIA Tesla T4 / V100.
- Lưu trữ: 500GB NVMe SSD (hệ điều hành và mô hình) + 2TB HDD/NAS (lưu trữ ảnh DICOM).
Hướng dẫn cài đặt và chạy ứng dụng qua Docker
# 1. Clone mã nguồn dự án
git clone https://github.com/phamnguyenthanhbinh/spine-xray-abnormality-detection.git
cd spine-xray-abnormality-detection
# 2. Thiết lập môi trường ảo và cài đặt thư viện
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 3. Tải trọng số mô hình đã huấn luyện (Pre-trained Weights)
mkdir -p weights/
wget -O weights/faster_rcnn_resnet152_fpn.pth https://storage.googleapis.com/medical-ai-models/spine_weights.pth
# 4. Thực hiện migrate cơ sở dữ liệu
python manage.py makemigrations
python manage.py migrate
# 5. Khởi chạy máy chủ phát triển Django
python manage.py runserver 0.0.0.0:8000
Phân tích hiệu quả kinh tế và lợi ích đầu tư (Cost-Benefit & ROI Analysis)
- Tiết kiệm thời gian đọc phim: Giảm thời gian đọc và lập biên bản kết quả X-quang cột sống từ trung bình 6 phút/ca xuống còn 2.5 phút/ca (tiết kiệm ~58% thời gian).
- Tăng năng suất khám chữa bệnh: Một bác sĩ có thể xử lý an toàn từ 60 ca/ngày lên 100 ca/ngày mà không làm tăng nguy cơ sai sót do mệt mỏi thị giác.
- Thời gian hoàn vốn (Payback Period): Với chi phí đầu tư phần cứng máy chủ GPU khoảng 80 - 100 triệu VNĐ, một phòng khám/bệnh viện tư nhân quy mô vừa có thể thu hồi vốn trong vòng 4 đến 6 tháng nhờ tối ưu hóa quy trình vận hành và nâng cao chất lượng dịch vụ.
Hạn chế và hướng phát triển
Các hạn chế kỹ thuật hiện tại
- Chất lượng dự đoán ở các lớp tổn thương hiếm: Chỉ số AP ở nhóm Hẹp lỗ liên hợp (Foraminal stenosis) (31.2%) và Tổn thương khác (Other lesions) (23.5%) còn khiêm tốn do số lượng mẫu huấn luyện trong tập dữ liệu còn thấp.
- Độ phân giải đầu vào bị giới hạn: Do giới hạn dung lượng VRAM của GPU, ảnh gốc có độ phân giải rất cao ($2500 \times 2048$) phải resize về $1024 \times 1024$, dẫn đến mất mát nhất định các chi tiết vi cấu trúc của xương.
- Phụ thuộc vào góc chụp 2D: Ảnh X-quang là hình chiếu phẳng của cấu trúc giải phẫu 3D, hiện tượng chồng lấp hình ảnh (overlapping structures) từ các tạng nội tạng và xương sườn đôi khi gây nhiễu cho mô hình.
Hướng phát triển và nghiên cứu tiếp theo
- Áp dụng kiến trúc Vision Transformer (ViT): Thử nghiệm các mô hình phát hiện đối tượng dựa trên Transformer như Deformable DETR hoặc Swin Transformer để tăng khả năng nắm bắt ngữ cảnh toàn cục của cột sống.
- Kỹ thuật bán giám sát (Semi-Supervised Learning): Khai thác khối lượng lớn ảnh X-quang chưa gán nhãn tại các bệnh viện để tăng cường độ chính xác cho các nhóm bệnh hiếm thông qua cơ chế Pseudo-labeling.
- Tích hợp mô hình ngôn ngữ lớn y tế (Medical LLMs / Vision-Language Models): Kết hợp mô hình định vị tổn thương với các mô hình tạo sinh ngôn ngữ (như BioGPT, LLaVA-Med) để tự động sinh báo cáo chẩn đoán hình ảnh (Radiology Report Generation) hoàn chỉnh bằng tiếng Việt và tiếng Anh.
Đối tượng hưởng lợi
1. Sinh viên và người học ngành Công nghệ Thông tin / Khoa học Dữ liệu
- Cung cấp tài liệu tham khảo thực tế về cách tiếp cận một bài toán Computer Vision chuyên sâu trong lĩnh vực y tế từ khâu tiền xử lý DICOM đến triển khai mô hình.
- Nắm vững phương pháp so sánh các kiến trúc Object Detection kinh điển (Faster R-CNN, RetinaNet, FCOS) và cách viết báo cáo khoa học chuẩn mực.
2. Kỹ sư phát triển phần mềm và kỹ sư AI (Developers & AI Engineers)
- Tham khảo mã nguồn cấu trúc dự án Django tích hợp mô hình học sâu PyTorch theo chuẩn module hóa.
- Mô hình hóa quy trình xử lý bất đồng bộ (asynchronous inference queue) phục vụ các hệ thống AI có tải cao.
3. Bác sĩ và cơ sở y tế (Healthcare Providers & Clinicians)
- Sở hữu công cụ hỗ trợ đọc phim tin cậy, giảm áp lực công việc và đóng vai trò như một "ý kiến chuyên môn thứ hai" (second opinion) độc lập.
- Nâng cao tính chính xác trong chẩn đoán, phát hiện sớm các dị tật và tổn thương xương khớp cột sống cho người bệnh.
4. Các nhà nghiên cứu y sinh (Biomedical Researchers)
- Dữ liệu thực nghiệm và các phân tích thống kê trong khóa luận đóng góp cơ sở dữ liệu quan trọng cho các nghiên cứu sâu hơn về trí tuệ nhân tạo cơ xương khớp tại Việt Nam.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai mô hình trên máy chủ là gì?
Hệ thống yêu cầu máy chủ Linux (khuyến nghị Ubuntu 20.04/22.04 LTS), tối thiểu 16GB RAM, ổ cứng SSD còn trống tối thiểu 50GB và 01 GPU chuyên dụng của NVIDIA có dung lượng VRAM từ 8GB trở lên (ví dụ: RTX 3060, RTX 3080, T4, A4000) hỗ trợ CUDA 11.8+ để đảm bảo thời gian suy luận dưới 1.5 giây/ảnh. Nếu chạy trên CPU, hệ thống vẫn hoạt động nhưng thời gian suy luận sẽ kéo dài từ 8 đến 15 giây/ảnh.
2. Mô hình xử lý hiện tượng mất cân bằng dữ liệu giữa các loại bệnh như thế nào?
Dự án áp dụng kết hợp ba giải pháp kỹ thuật:
- Thuật toán tăng cường dữ liệu chọn lọc (Selective Data Augmentation): Áp dụng các phép biến đổi hình học và tương phản với tần suất cao hơn cho các nhóm nhãn có số lượng mẫu ít.
- Hàm mất mát Focal Loss: Tự động giảm trọng số của các mẫu nền dễ phân loại và tăng trọng số mất mát cho các tổn thương khó và hiếm gặp.
- Tối ưu hóa phân tầng Anchor Box (FPN Strides): Thiết kế tỷ lệ anchor box đa dạng (aspect ratios: 0.5, 1.0, 2.0) phù hợp với kích thước thực tế của từng loại tổn thương cột sống.
3. Hệ thống có khả năng tích hợp trực tiếp vào hệ thống lưu trữ PACS của bệnh viện không?
Có. Nhờ việc sử dụng thư viện pydicom và kiến trúc RESTful API, hệ thống có thể kết nối với máy chủ PACS (Picture Archiving and Communication System) qua giao thức mạng DICOM chuẩn (C-STORE, C-FIND, C-MOVE) hoặc tích hợp thông qua Webhook để tự động nhận ảnh mới chụp và gửi trả lại lớp phủ hình ảnh (DICOM Presentation State) có chứa bounding box chẩn đoán.
4. Chi phí vận hành và bảo trì hệ thống hàng tháng ước tính là bao nhiêu?
Nếu triển khai trên hạ tầng điện toán đám mây (Cloud Server như AWS EC2 g4dn.xlarge hoặc Google Cloud Compute Engine với NVIDIA T4), chi phí vận hành dao động khoảng 3.500.000 - 5.500.000 VNĐ/tháng. Nếu triển khai máy chủ vật lý đặt tại chỗ (On-premise Server) tại bệnh viện, chi phí vận hành hàng tháng chỉ bao gồm tiền điện và bảo trì mạng, ước tính dưới 1.000.000 VNĐ/tháng.
5. Độ tin cậy của mô hình được kiểm soát như thế nào để tránh chẩn đoán nhầm?
Hệ thống được thiết kế với triết lý AI hỗ trợ, bác sĩ quyết định (Human-in-the-loop). Mô hình không trực tiếp đưa ra kết luận điều trị cuối cùng mà chỉ khoanh vùng nghi vấn kèm xác suất tin cậy. Bác sĩ có thể linh hoạt kéo thanh trượt ngưỡng tin cậy trên giao diện web để kiểm tra lại các vùng có điểm số từ thấp đến cao, kết hợp cùng triệu chứng lâm sàng của bệnh nhân để đưa ra kết luận chuẩn xác nhất.
Kết luận
Khóa luận tốt nghiệp "Xây dựng ứng dụng web phát hiện bất thường trên ảnh X-quang cột sống" của sinh viên Phạm Nguyễn Thanh Bình dưới sự hướng dẫn của ThS. GVC Nguyễn Thị Kim Phụng đã giải quyết thành công bài toán chẩn đoán hình ảnh y khoa phức tạp bằng các phương pháp học sâu tiên tiến nhất.
Thông qua việc đánh giá toàn diện trên 10.469 ảnh X-quang thuộc bộ dữ liệu y tế chuẩn VinDr-SpineXR, đề tài đã chứng minh mô hình Faster R-CNN kết hợp mạng trích xuất đặc trưng ResNet-152 và Feature Pyramid Network (FPN) đạt hiệu năng vượt trội với mAP@0.5 đạt 44.8%, vượt qua các mô hình One-Stage như RetinaNet (28.4%) và FCOS (31.6%).
Không chỉ dừng lại ở kết quả học thuật, đề tài đã hiện thực hóa giải pháp thành một ứng dụng web hoàn chỉnh trên nền tảng Django, cung cấp đầy đủ các tính năng thực tiễn từ tiền xử lý DICOM, suy luận thời gian thực, điều chỉnh ngưỡng lọc xác suất đến quản lý hội chẩn chuyên môn đa bác sĩ. Đây là minh chứng rõ nét cho tiềm năng to lớn của việc ứng dụng Trí tuệ nhân tạo vào hệ thống y tế tại Việt Nam, mở ra hướng đi đầy triển vọng trong việc hiện đại hóa quy trình khám chữa bệnh cơ xương khớp trong kỷ nguyên số.