Hệ thống chẩn đoán và sàng lọc bệnh da liễu thông minh, kết hợp hình ảnh da soi và mô tả triệu chứng lâm sàng. Tích hợp công nghệ giải thích mô hình (Explainable AI - XAI) với Grad-CAM.
- 1. Tổng quan Dự án
- 2. Công nghệ Áp dụng
- 3. Cấu trúc Dự án
- 4. Kiến trúc Hệ thống
- 5. Luồng Hoạt Động
- 6. Mô tả Dữ liệu Căn bản
- 7. Kiến trúc Mô hình Giải thích
- 8. Đánh giá và Kết quả
- 9. Hướng dẫn Cài đặt & Vận hành
- 10. Khai thác API Dịch vụ
- 11. Thông tin Tác giả
Bệnh ung thư da và các cấu trúc tổn thương thường rất dễ nhầm lẫn. Hệ thống này được phát triển để hỗ trợ các bác sĩ và bệnh nhân sàng lọc, phân tích 7 loại bệnh da liễu phổ biến nhất với độ tin cậy được bóc tách bởi vùng giải thích Grad-CAM.
Tính năng nổi bật:
- Nhận diện Tự động: Phân tích độ chính xác trên 7 nhóm tổn thương (HAM10000 dataset).
- Hỗ trợ Triệu chứng: Bổ sung dữ liệu lâm sàng giúp quá trình phán đoán có cơ sở.
- Explainable AI (Grad-CAM): Trực quan hóa vùng tập trung của mô hình (Heatmap) trên da mô bệnh học.
- UI Y tế Tối ưu: Giao diện người dùng trực quan, Side-by-Side thân thiện.
Dự án là sự kết hợp giữa các framework xử lý Deep Learning tiên tiến và công nghệ web API hiện đại:
- Ngôn ngữ Lập trình: Python (Backend/AI), JavaScript, HTML5, CSS3 (Frontend).
- Trí tuệ Nhân tạo & Xử lý Dữ liệu:
- PyTorch: Framework Deep Learning chính vận hành và huấn luyện mô hình.
- Torchvision: Khởi tạo và kế thừa trọng số cấu trúc EfficientNet-B0.
- Scikit-learn: Đánh giá và phân tách bộ dữ liệu ( rain_test_split).
- Pandas / Pillow: Kiểm soát luồng Metadata (CSV) và thao tác với ảnh ma trận.
- Grad-CAM: Giải thuật Explainable AI ứng dụng làm rõ vùng quyết định của nơ-ron sâu nhất.
- Web Backend & Deployment:
- FastAPI: Kiến tạo RESTful API server tốc độ cao, gen doc tự động (Swagger).
- Uvicorn: ASGI server phục vụ endpoint cho dự án.
- Phát triển & Huấn luyện (Môi trường):
- Jupyter Notebook / Google Colab: Đào tạo mô hình và thực nghiệm (EDA).
BTL-Xulyanh/
├── app/ # Source code hệ thống
│ ├── backend/ # Mã nguồn API Gateway & xử lý mô hình
│ │ ├── main.py # FastAPI config & endpoints
│ │ ├── model.py # Kiến trúc và helper load PyTorch model
│ │ └── requirements.txt # Dependencies cho Server
│ ├── frontend/ # Giao diện chẩn đoán web
│ │ ├── index.html # HTML Layout
│ │ ├── app.js # Xử lý logic gọi API, render Grad-CAM
│ │ └── styles.css # CSS Grid
│ ├── train.py # Script huấn luyện mô hình chuẩn
│ ├── Untitled0.ipynb # Notebook dùng để phân tích EDA/Thử nghiệm
│ └── requirements-train.txt# Dependencies (PyTorch, Pandas, v.v) cho quá trình Train
├── Data/ # Dữ liệu HAM10000 (Ảnh + metadata)
├── DataTest/ # Dữ liệu ảnh để test độc lập
└── model/ # Chứa trọng số và label sau khi train
├── best_model.pth # Model Weights
└── labels.json # File ánh xạ Index - Label
- Frontend: Thiết kế dạng Single Page Application thuần túy với CSS3 Grid Layout, Vanilla JavaScript.
- Backend API: FastAPI được sử dụng làm API Gateway (cung cấp khả năng xử lý nhanh, gen tài liệu Swagger UI/ReDoc tự động).
- Inference Engine: PyTorch (Sử dụng pre-trained weights từ
torchvision). - Môi trường Huấn luyện: Google Colab.
-
Người Dùng / Bác Sĩ (Client):
- Tải hình ảnh vùng da tổn thương lên giao diện Web Frontend.
- (Tùy chọn) Chọn các cấu hình mong muốn để chẩn đoán.
-
Frontend Xử Lý:
- Gửi file ảnh thông qua giao thức HTTP (POST) đến Endpoint /predict của Backend FastAPI.
-
Backend Xử Lý (Server):
- Nhận ảnh, kiểm thử định dạng và tiền xử lý (Resize, Normalize).
- Truyền dữ liệu vào Core Model Inference (PyTorch + EfficientNet B0).
-
Mô Hình Phân Tích (Inference + Explainability):
- Đưa ra danh sách top các xác suất bệnh (Classification).
- Kích hoạt tính năng Explainable AI: tính toán Grad-CAM Heatmap tại lớp Convolution cuối cùng.
-
Trả Kết Quả & Hiển Thị:
- Backend trả về dữ liệu chuẩn JSON.
- Frontend hiển thị kết quả chẩn đoán cùng ảnh Overlay Map (bản đồ nhiệt Grad-CAM sinh từ API /gradcam) trực quan ngay trên trình duyệt.
Hệ thống được huấn luyện và kiểm định dựa trên bộ dữ liệu HAM10000, bao gồm các hình ảnh da soi (Dermoscopy):
| Viết tắt | Tên bệnh lý (Tiếng Anh / Tiếng Việt) | Nhóm Phân loại |
|---|---|---|
akiec |
Actinic keratoses / Dày sừng quang hóa | Tiền U |
bcc |
Basal cell carcinoma / Ung thư biểu mô tế bào đáy | Ác tính |
bkl |
Benign keratosis-like / Tổn thương sừng hóa lành | Lành tính |
df |
Dermatofibroma / U xơ da | Lành tính |
mel |
Melanoma / Khối u hắc tố | Ác tính |
nv |
Melanocytic nevi / Nốt ruồi hắc tố | Lành tính |
vasc |
Vascular lesions / Tổn thương mạch máu | Lành tính |
- Kiến trúc Trích xuất Đặc trưng:
EfficientNet-B0. - Kích thước Ảnh đầu vào (Input Resolution):
224x224 RGB. - Huấn luyện: Optimizer
AdamWcùng LossCrossEntropyLoss.
Cơ chế Grad-CAM (Saliency Map): Can thiệp (hook) vào tầng chập (convolutional layer) sâu nhất để đo lường mức độ kích hoạt dựa trên feature maps. Heatmap sau đó được chồng đè (overlay) trực tiếp lên ảnh y tế gốc giúp bác sĩ hiểu lý do mô hình ra quyết định.
(Sinh viên có thể cập nhật các thông số thực tế vào mục này)
- Độ chính xác (Validation Accuracy):
88.38 % - ROC AUC (Macro):
~ 0.94 - ROC AUC (Micro):
~ 0.97
Ma trận nhầm lẫn (Confusion Matrix):
Yêu cầu hệ thống: Python 3.8 trở lên.
Lưu lại tệp mô hình đã train vào cấu trúc sau:
model/best_model.pthmodel/labels.json
# Di chuyển vào thư mục dự án
python -m pip install -r app/backend/requirements.txtpython -m uvicorn app.backend.main:app --reload --port 8000- API Docs:
http://127.0.0.1:8000/docs - Healthcheck:
http://127.0.0.1:8000/health
Khởi động máy chủ tĩnh tại thư mục app/frontend:
python -m http.server 5500 -d app/frontend- Mở trình duyệt Web tại:
http://127.0.0.1:5500
Nếu bạn muốn tự train lại mô hình trên dữ liệu HAM10000:
# Cài đặt thư viện hỗ trợ train
python -m pip install -r app/requirements-train.txt
# Khởi chạy script training
python app/train.py --epochs 5 --batch-size 32 --lr 0.001Danh sách tham số cấu hình khi train (xem thêm): --image-size, --num-workers, --val-split, --freeze-backbone. Cấu hình model mới sẽ được lưu thẳng vào thư mục model/.
Hệ thống cung cấp Swagger giúp tích hợp dễ dàng:
POST /predict: Gửi hình ảnh + thông tin mô tả. Nhận về danh sách Top 3 khả năng lớn nhất.POST /gradcam: Tính toán và gửi về Base64 String của bản đồ nhiệt (Heatmap).
| Tiêu chí | Thông tin chi tiết |
|---|---|
| Họ và tên | Vũ Đình Quân |
| Trường | Trường đại học Đại Nam |
| Khoa / Viện | Khoa Công nghệ thông tin |
| vuquan0804@gmail.com |
🌟 Lưu ý: Hệ thống này phục vụ mục đích nghiên cứu học thuật. Tuyệt đối không thay thế hoàn toàn chẩn đoán y khoa do Bác sĩ thực hiện.