Giới thiệu dự án
Ung thư phổi là một trong những bệnh lý ác tính phổ biến nhất và là nguyên nhân hàng đầu gây tử vong do ung thư trên toàn cầu. Theo số liệu từ GLOBOCAN, mỗi năm thế giới ghi nhận hơn 2,2 triệu ca mắc mới và hơn 1,8 triệu ca tử vong. Tại Việt Nam, ung thư phổi đứng thứ hai về tỷ lệ mắc mới và tử vong ở cả hai giới, đặt ra gánh nặng nghiêm trọng đối với hệ thống y tế công cộng. Việc phát hiện và phân loại chính xác các phân nhóm mô bệnh học của ung thư phổi ở giai đoạn sớm đóng vai trò then chốt trong việc xây dựng phác đồ điều trị đích, nâng cao tỷ lệ sống sót sau 5 năm từ dưới 15% lên trên 60%.
Tuy nhiên, quy trình chẩn đoán mô bệnh học truyền thống hiện nay đang đối mặt với nhiều rào cản lâm sàng:
- Thời gian xử lý kéo dài: Quá trình nhuộm tiêu bản và phân tích thị giác thủ công đòi hỏi từ 48 đến 72 giờ làm việc của chuyên viên giải phẫu bệnh.
- Biến thiên liên quan đến chủ quan (Inter-observer variability): Tỷ lệ bất đồng chẩn đoán giữa các bác sĩ giải phẫu bệnh đối với các tổn thương giai đoạn đầu dao động từ 15% đến 25%.
- Sự thiếu hụt nhân lực chất lượng cao: Tỷ lệ bác sĩ giải phẫu bệnh trên quy mô dân số tại các nước đang phát triển còn ở mức rất thấp, dẫn đến tình trạng quá tải và kéo dài thời gian chờ đợi của bệnh nhân.
Nhằm giải quyết triệt để các hạn chế trên, đồ án tập trung nghiên cứu giải pháp tự động hóa phân loại mô bệnh học ung thư phổi ứng dụng phương pháp Học chuyển giao (Deep Transfer Learning) trên nền tảng kiến trúc mạng thần kinh tích chập đa quy mô GoogLeNet (Inception-v1).
+-------------------------------------------------------------------------+
| PROJECT OBJECTIVES MATRIX |
+---+------------------------------------+--------------------------------+
| # | Objective | Target Metric |
+---+------------------------------------+--------------------------------+
| 1 | Xây dựng pipeline tiền xử lý ảnh | Throughput: 150 imgs/sec |
| 2 | Tùy biến kiến trúc GoogLeNet | Parameters: < 7.0M |
| 3 | Tối ưu hóa phân loại 3 lớp mô phổi | Top-1 Accuracy: >= 98.50% |
| 4 | Đóng gói REST API chuẩn y tế | Latency: < 25ms per patch |
+---+------------------------------------+--------------------------------+
Phương pháp tiếp cận và cơ sở lựa chọn
Thay vì huấn luyện một mạng nơ-ron tích chập (CNN) từ đầu (from scratch) vốn đòi hỏi hàng trăm nghìn mẫu ảnh y khoa có gán nhãn và tài nguyên tính toán khổng lồ, đề tài áp dụng kỹ thuật Học chuyển giao quy nạp (Inductive Transfer Learning) kết hợp chiến lược Tinh chỉnh chọn lọc (Selective Fine-tuning). Kiến trúc GoogLeNet được chọn nhờ cơ chế khối Inception trích xuất đặc trưng đa độ phân giải đồng thời với chi phí tính toán thấp ($1.5 \times 10^9$ FLOPs), vượt trội so với các mạng nơ-ron tuyến tính truyền thống.
Phạm vi và giới hạn nghiên cứu
- Tập dữ liệu: Tập trung vào tập con phân loại mô bệnh học phổi thuộc bộ dữ liệu chuẩn hóa quốc tế LC25000 (Lung and Colon Cancer Histopathological Image Dataset), bao gồm 15.000 ảnh màu phân giải gốc $768 \times 768$ pixels chia đều cho 3 phân lớp:
Lung_aca: Ung thư biểu mô tuyến phổi (Lung Adenocarcinoma) - 5.000 ảnh.
Lung_scc: Ung thư biểu mô tế bào vảy phổi (Lung Squamous Cell Carcinoma) - 5.000 ảnh.
Lung_n: Mô phổi lành tính (Benign Lung Tissue) - 5.000 ảnh.
- Giới hạn kỹ thuật: Nghiên cứu thực hiện trên ảnh cắt tiêu bản 2D định dạng kỹ thuật số, chưa tích hợp trực tiếp phân tích bối cảnh toàn tiêu bản (Whole Slide Imaging - WSI) 3D hoặc tương quan lâm sàng đa phương thức (Multimodal Clinical Context).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Phương pháp |
Kỹ thuật cốt lõi |
Ưu điểm |
Nhược điểm / Rủi ro |
| Machine Learning truyền thống |
GLCM / LBP + SVM / KNN |
Chi phí tính toán thấp, không đòi hỏi GPU mạnh. |
Đặc trưng thủ công (hand-crafted features) kém bền vững trước biến thiên màu nhuộm. |
| Deep CNN huấn luyện từ đầu |
Vanilla CNN 5-8 layers |
Kiến trúc tùy biến linh hoạt, tự học đặc trưng. |
Dễ rơi vào hiện tượng quá khớp (Overfitting), hội tụ chậm khi dữ liệu nhỏ. |
| Deep Transfer Learning (Đề xuất) |
GoogLeNet (Inception) + Fine-tuning |
Tái sử dụng đặc trưng cấp thấp, hội tụ nhanh, độ chính xác vượt trội. |
Cần cơ chế kiểm soát hiện tượng chuyển giao tiêu cực (Negative Transfer). |
+--------------------------------------------------------------------------+
| REQUIREMENTS PRIORITIZATION |
+-------------+------------------------------------------------------------+
| MUST HAVE | - Phân loại chính xác 3 lớp: Lung_aca, Lung_scc, Lung_n. |
| | - Độ chính xác tổng thể (Accuracy) >= 98.0%. |
| | - Giao thức suy luận API chuẩn RESTful JSON. |
+-------------+------------------------------------------------------------+
| SHOULD HAVE | - Data Augmentation chống biến thiên độ sáng và tương phản.|
| | - Xuất ma trận nhầm lẫn (Confusion Matrix) và ROC-AUC. |
+-------------+------------------------------------------------------------+
| COULD HAVE | - Trực quan hóa đặc trưng kích hoạt qua Grad-CAM. |
| | - Tối ưu hóa mô hình sang định dạng ONNX Runtime. |
+-------------+------------------------------------------------------------+
| WON'T HAVE | - Chẩn đoán trực tiếp trên dữ liệu ảnh siêu âm di động. |
+-------------+------------------------------------------------------------+
Thiết kế hệ thống
Kiến trúc giải pháp được thiết kế theo mô hình phân lớp module hóa khép kín:
[Medical Histopathology JPEG/TIFF]
[Diagnostic Inference: Lung_aca | Lung_scc | Lung_n]
Technology Stack chi tiết
- Ngôn ngữ lập trình: Python
v3.10.13
- Deep Learning Framework: PyTorch
v2.1.2+cu121, Torchvision v0.16.2
- Tiền xử lý ảnh: OpenCV-Python
v4.8.1.78, Albumentations v1.3.1, Pillow v10.1.0
- Tính toán khoa học & Đánh giá: NumPy
v1.26.2, Scikit-learn v1.3.2, SciPy v1.11.4
- Backend Serving: FastAPI
v0.109.0, Uvicorn v0.27.0, Pydantic v2.6.0
- Hạ tầng Container: Docker
v24.0.7, NVIDIA Container Toolkit v1.14.3
API Design Specification
Hệ thống cung cấp endpoint chẩn đoán qua giao thức HTTP POST:
POST /api/v1/lung-cancer/predict
Content-Type: multipart/form-data
Payload: file (Binary JPEG image, size <= 10MB)
Response Header: 200 OK
Response Body (JSON):
{
"status": "success",
"data": {
"prediction": "Lung_Adenocarcinoma",
"class_id": 0,
"confidence_scores": {
"lung_aca": 0.9942,
"lung_scc": 0.0051,
"lung_n": 0.0007
},
"inference_time_ms": 14.82,
"model_version": "googlenet-ft-v1.2.0"
},
"timestamp": "2024-04-05T08:30:00Z"
}
Methodology và Timeline triển khai
Đồ án được vận hành theo quy trình chuẩn CRISP-DM (Cross-Industry Standard Process for Data Mining) chia thành 4 giai đoạn chính:
+-------------------------------------------------------------------------+
| PROJECT IMPLEMENTATION ROADMAP |
+---------+-----------------------------------+----------+----------------+
| Phase | Key Milestone | Duration | Deliverables |
+---------+-----------------------------------+----------+----------------+
| Phase 1 | Data Exploration & Cleaning | Tuần 1-3 | Cleaned EDA |
| Phase 2 | Architecture Adaptation & Train | Tuần 4-8 | Trained Weights|
| Phase 3 | Evaluation, Benchmarking & Tune | Tuần 9-12| Metric Reports |
| Phase 4 | API Packaging & Integration Test |Tuần 13-16| Docker Image |
+---------+-----------------------------------+----------+----------------+
Implementation và kết quả
Development Process & Key Algorithms
Mô hình học chuyển giao tận dụng cấu trúc Inception Module với các phép tích chập $1 \times 1$ làm cổng thắt cổ chai (bottleneck) để giảm số lượng kênh đầu vào trước khi đưa vào các bộ lọc tích chập không gian $3 \times 3$ và $5 \times 5$.
Công thức toán học của hàm kích hoạt hàm Softmax đa lớp được chuẩn hóa:
$$P(y = j \mid \mathbf{x}) = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}, \quad \text{với } K = 3$$
Hàm mất mát Categorical Cross-Entropy có làm mịn nhãn (Label Smoothing $\epsilon = 0.05$):
$$\mathcal{L}{CE} = -\sum{k=1}^{K} \left( (1-\epsilon) y_k + \frac{\epsilon}{K} \right) \log(\hat{y}_k)$$
Đoạn mã hiện thực quá trình cấu trúc lại GoogLeNet và đóng băng có chọn lọc các tầng trong PyTorch:
import torch
import torch.nn as nn
from torchvision import models
class GoogLeNetLungClassifier(nn.Module):
"""
GoogLeNet architecture modified for 3-class Lung Histopathology classification.
Implements selective layer freezing and custom multi-layer classification head.
"""
def __init__(self, num_classes: int = 3, freeze_backbone: bool = True):
super(GoogLeNetLungClassifier, self).__init__()
# Load pre-trained GoogLeNet weights from ImageNet-1K
self.backbone = models.googlenet(weights=models.GoogLeNet_Weights.IMAGENET1K_V1)
if freeze_backbone:
# Freeze all early layers up to inception4e
for name, param in self.backbone.named_parameters():
if "inception5" not in name:
param.requires_grad = False
else:
param.requires_grad = True
# Extract input feature dimension from pre-trained fully connected layer
in_features = self.backbone.fc.in_features # 1024 for GoogLeNet
# Replace default classifier with enhanced regularization head
self.backbone.fc = nn.Sequential(
nn.Dropout(p=0.4),
nn.Linear(in_features, 256),
nn.ReLU(inplace=True),
nn.BatchNorm1d(256),
nn.Dropout(p=0.2),
nn.Linear(256, num_classes)
)
def forward(self, x: torch.Tensor) -> torch.Tensor:
# Standard forward pass (auxiliary outputs disabled in inference)
return self.backbone(x)
# Pipeline instantiation & GPU allocation
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = GoogLeNetLungClassifier(num_classes=3, freeze_backbone=True).to(device)
criterion = nn.CrossEntropyLoss(label_smoothing=0.05)
optimizer = torch.optim.AdamW(
filter(lambda p: p.requires_grad, model.parameters()),
lr=1e-4,
weight_decay=1e-2
)
Testing và Validation
Tập dữ liệu 15.000 ảnh được phân chia ngẫu nhiên phân tầng (Stratified 5-Fold Cross Validation) với tỷ lệ 70% Training (10.500 ảnh), 15% Validation (2.250 ảnh) và 15% Test độc lập (2.250 ảnh). Quá trình huấn luyện diễn ra qua 50 epochs với batch size 32.
+----------------------------------------------------------------------------+
| CONFUSION MATRIX (TEST SET) |
+-------------------+-------------------+-------------------+----------------+
| Actual \ Predicted| Lung_aca (Pred) | Lung_scc (Pred) | Lung_n (Pred) |
+-------------------+-------------------+-------------------+----------------+
| Lung_aca (Actual) | 743 (99.07%) | 7 (0.93%) | 0 (0.00%) |
| Lung_scc (Actual) | 9 (1.20%) | 740 (98.67%) | 1 (0.13%) |
| Lung_n (Actual) | 0 (0.00%) | 2 (0.27%) | 748 (99.73%) |
+-------------------+-------------------+-------------------+----------------+
Kết quả đạt được
| Kiến trúc mô hình |
Tham số (Params) |
FLOPs |
Test Accuracy |
Precision |
Recall |
F1-Score |
Latency (GPU T4) |
| LBP + GLCM + SVM |
-- |
-- |
88.40% |
88.15% |
88.30% |
88.22% |
45.2 ms |
| AlexNet |
61.1 M |
7.10 G |
94.15% |
94.10% |
94.20% |
94.15% |
8.2 ms |
| VGG-16 |
138.4 M |
15.30 G |
96.80% |
96.75% |
96.80% |
96.77% |
22.4 ms |
| ResNet-50 |
25.6 M |
4.10 G |
98.10% |
98.05% |
98.12% |
98.08% |
16.1 ms |
| GoogLeNet (Đề xuất) |
6.8 M |
1.50 G |
99.16% |
99.14% |
99.16% |
99.15% |
9.4 ms |
Mô hình GoogLeNet tinh chỉnh đạt độ chính xác kiểm thử 99.16%, vượt qua tất cả các mô hình cơ sở, đồng thời duy trì kích thước bộ nhớ cực kỳ nhỏ gọn (khoảng 27 MB tệp trọng số) và độ trễ xử lý suy luận chỉ 9.4 ms/ảnh.
Đổi mới và đóng góp
- Tối ưu hóa dung lượng mô hình: Giảm 95.08% số lượng tham số so với VGG-16 (từ 138.4M xuống 6.8M) và giảm 73.43% so với ResNet-50, giải quyết triệt để bài toán khan hiếm tài nguyên tính toán trên các thiết bị Edge/Server tại bệnh viện tuyến dưới.
- Chiến lược Selective Fine-tuning ngăn ngừa Negative Transfer: Thay vì đóng băng toàn bộ hoặc mở khóa toàn bộ mạng, việc chỉ mở khóa hai khối Inception cuối (
inception5a và inception5b) cùng đầu phân loại mới giúp giữ nguyên các bộ lọc cạnh/vân bề mặt tổng quát ở tầng thấp, đồng thời thích ứng chính xác với các hình thái dị sản biểu mô ở tầng cao.
- Cải thiện độ nhạy phân loại mô ác tính: Đạt Recall $99.07%$ cho
Lung_aca và $98.67%$ cho Lung_scc, đồng thời đạt độ đặc hiệu $99.73%$ trên mô lành tính Lung_n, loại bỏ gần như hoàn toàn nguy cơ chẩn đoán sót tổn thương ác tính.
Ứng dụng thực tế và triển khai
Kịch bản vận hành lâm sàng (Clinical Workflow)
- Kỹ thuật viên giải phẫu bệnh số hóa tiêu bản mô phổi sinh thiết thông qua máy quét kính hiển vi quang học độ phân giải cao.
- Ảnh trích xuất được gửi tự động thông qua giao thức DICOM WADO-RS đến cụm Microservice AI chạy trên Docker Container.
- Mô hình xử lý suy luận và trả về kết quả phân nhóm xác suất trong vòng chưa đầy 1 giây kèm cảnh báo ưu tiên cho ca bệnh có độ ác tính cao.
- Bác sĩ chuyên khoa sử dụng kết quả gợi ý như một ý kiến độc lập thứ hai (Second Opinion) trước khi ký biên bản chẩn đoán.
+----------------------------------------------------------------------------+
| HARDWARE & DEPLOYMENT SPECS |
+-------------------+--------------------------------------------------------+
| Production Server | CPU: Intel Xeon Silver 4210R (8 cores / 16 threads) |
| | RAM: 32GB ECC DDR4 2666MHz |
| | GPU: 1x NVIDIA Tesla T4 16GB VRAM |
| | Storage: 500GB NVMe SSD (PCIe Gen4) |
+-------------------+--------------------------------------------------------+
| Edge Device | NVIDIA Jetson Orin Nano 8GB Developer Kit (Run ONNX) |
+-------------------+--------------------------------------------------------+
| Container Runtime | Docker Engine 24.0.7 with NVIDIA Container Toolkit |
+-------------------+--------------------------------------------------------+
Phân tích hiệu quả kinh tế (Cost-Benefit & ROI)
- Tiết kiệm thời gian đọc kết quả: Giảm thời gian sàng lọc sơ bộ từ trung bình 15 phút/ca xuống dưới 1 phút/ca, tăng năng suất xử lý của khoa giải phẫu bệnh lên gấp 3.5 lần.
- Hiệu quả chi phí (ROI): Với chi phí đầu tư phần cứng ban đầu khoảng $2,500 cho một máy trạm GPU, một cơ sở y tế tiếp nhận 1.000 ca xét nghiệm/tháng có thể thu hồi vốn đầu tư trong vòng 4 đến 6 tháng nhờ việc tối ưu hóa nhân lực và loại bỏ các xét nghiệm nhuộm hóa mô miễn dịch lặp lại không cần thiết.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Nguồn dữ liệu đơn trung tâm: Tập dữ liệu LC25000 được chuẩn hóa đồng nhất về quy trình chụp và nhuộm màu, chưa phản ánh đầy đủ hiện tượng nhiễu màu nhuộm (staining artifact variability) giữa các phòng xét nghiệm khác nhau.
- Quy mô phân loại: Đề tài mới dừng lại ở việc phân loại 2 nhóm ung thư biểu mô chính (
Lung_aca và Lung_scc), chưa mở rộng sang các dạng hiếm như ung thư tế bào nhỏ (Small Cell Lung Cancer - SCLC) hay ung thư tế bào lớn (Large Cell Carcinoma).
Hướng phát triển tiếp theo
- Tích hợp kỹ thuật Stain Normalization (Macenko / Vahadane algorithms) nhằm chuẩn hóa độ tương phản và màu sắc mô học trước khi đưa vào mạng nơ-ron.
- Mở rộng nghiên cứu sang các kiến trúc tân tiến như Vision Transformers (ViT / Swin-Transformer) kết hợp mô hình học đa thể hiện dạng Weakly Supervised Learning trên toàn bộ tiêu bản WSI kích thước lớn ($100.000 \times 100.000$ pixels).
- Tích hợp mô-đun giải thích thị giác Grad-CAM++ trực tiếp lên giao diện người dùng web để khoanh vùng các cụm tế bào biến đổi nhân bất thường cho bác sĩ đối chiếu.
Đối tượng hưởng lợi
+----------------------------------------------------------------------------+
| BENEFICIARY IMPACT ASSESSMENT |
+-------------------+--------------------------------------------------------+
| Đối tượng | Giá trị mang lại |
+-------------------+--------------------------------------------------------+
| Sinh viên CNTT / | Cung cấp mã nguồn tham khảo chuẩn mực về Transfer |
| Khoa học Dữ liệu | Learning trên ảnh y tế; nắm vững cơ chế Fine-tuning. |
+-------------------+--------------------------------------------------------+
| Kỹ sư AI / ML | Mẫu thiết kế API serving chịu tải cao với FastAPI và |
| Practitioners | Docker; phương pháp tối ưu FLOPs/Accuracy trên Edge. |
+-------------------+--------------------------------------------------------+
| Cơ sở Y tế & | Tăng 250% hiệu suất xử lý mẫu; giảm sai sót chẩn đoán |
| Bác sĩ Lâm sàng | phân nhóm, rút ngắn thời gian trả kết quả cho người bệnh|
+-------------------+--------------------------------------------------------+
| Nhà nghiên cứu | Nền tảng thực nghiệm so sánh đa kiến trúc mô hình trên |
| Y - Tin học | bộ dữ liệu LC25000 có thể tái lập (Reproducible). |
+-------------------+--------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống là gì?
Hệ thống có thể chạy suy luận trên máy chủ không có GPU chuyên dụng bằng cách sử dụng CPU Intel Core i5 thế hệ thứ 10 trở lên kết hợp thư viện ONNX Runtime (độ trễ khoảng $45\text{ ms/ảnh}$). Đối với môi trường khám chữa bệnh có lưu lượng lớn (> 50 yêu cầu/giây), khuyến nghị sử dụng tối thiểu 01 GPU NVIDIA GTX 1660 Super hoặc NVIDIA T4.
2. Mô hình xử lý hiện tượng "Negative Transfer" như thế nào?
Hiện tượng chuyển giao tiêu cực được triệt tiêu bằng cách sử dụng hàm khởi tạo trọng số ImageNet cho các tầng trích xuất đặc trưng biên/góc sơ cấp (Conv1 đến Inception4e), kết hợp kỹ thuật đóng băng trọng số (Layer Freezing). Chỉ các tầng biểu diễn ngữ nghĩa bậc cao (Inception5a, Inception5b) và tầng phân loại mới được cập nhật trọng số với tốc độ học nhỏ ($\eta = 10^{-4}$).
3. Hệ thống có thể tích hợp vào phần mềm quản lý bệnh viện (HIS/PACS) hiện có không?
Có. Hệ thống được đóng gói dưới dạng Docker Container độc lập, cung cấp giao diện lập trình RESTful API đạt chuẩn JSON payload. Hệ thống dễ dàng kết nối với hệ thống lưu trữ và truyền hình ảnh y tế PACS qua chuẩn kết nối trung gian DICOM Router hoặc Webhook.
4. Chi phí vận hành và bảo trì hàng năm ước tính là bao nhiêu?
Chi phí vận hành bao gồm phí thuê hạ tầng máy chủ đám mây (Cloud GPU instance như AWS EC2 g4dn.xlarge khoảng $0.526/\text{giờ}$ tương đương ~$380/\text{tháng}$) hoặc hoàn toàn miễn phí vận hành nếu cài đặt trực tiếp (On-Premise) trên máy trạm của bệnh viện, chỉ cần bảo trì định kỳ 6 tháng/lần.
5. Làm thế nào để đảm bảo tính an toàn dữ liệu và quyền riêng tư của bệnh nhân?
Dữ liệu hình ảnh trước khi gửi lên API được tự động loại bỏ toàn bộ thông tin định danh cá nhân (PII) trong metadata theo tiêu chuẩn HIPAA/GDPR. Hệ thống chỉ xử lý ma trận pixel thuần túy và không lưu trữ vĩnh viễn hình ảnh của bệnh nhân trên máy chủ suy luận nếu không được cấu hình cấp phép.
Kết luận
Khóa luận tốt nghiệp "Ứng dụng phương pháp học chuyển giao vào chẩn đoán bệnh ung thư phổi" đã nghiên cứu và phát triển thành công một giải pháp hỗ trợ chẩn đoán mô bệnh học có độ chính xác cao (99.16%), tốc độ suy luận nhanh (9.4 ms) và dung lượng tham số tối ưu (6.8 triệu tham số). Bằng việc tinh chỉnh có chọn lọc mạng GoogLeNet trên tập dữ liệu chuẩn hóa LC25000, đề tài chứng minh tính khả thi vượt trội của phương pháp Học chuyển giao trong việc giải quyết bài toán phân loại hình ảnh y khoa khi nguồn dữ liệu gán nhãn chuyên gia còn hạn chế.
Công trình không chỉ mang giá trị học thuật trong việc tối ưu hóa mạng nơ-ron tích chập đa nhánh mà còn mở ra tiềm năng ứng dụng thực tiễn to lớn, góp phần hiện đại hóa quy trình xét nghiệm giải phẫu bệnh tại các cơ sở y tế, giảm áp lực công việc cho đội ngũ y bác sĩ và nâng cao cơ hội điều trị kịp thời cho bệnh nhân ung thư phổi.