# Phân Loại Bệnh Lá Sắn - Dự Án Học Sâu
Kho lưu trữ này chứa các notebook Jupyter từ khóa học **AI Lab: Deep Learning for Computer Vision** của WorldQuant University. Dự án tập trung vào việc phân loại bệnh lá sắn bằng các kỹ thuật học sâu, đặc biệt là **transfer learning** (chuyển giao học tập) và **callbacks** (hàm gọi lại) để tối ưu hóa quá trình huấn luyện. Bộ dữ liệu được lấy từ cuộc thi Cassava Leaf Disease Classification trên Kaggle.
## Mục Tiêu
- Xây dựng và huấn luyện mạng nơ-ron tích chập (CNN) cho bài toán phân loại đa lớp.
- Áp dụng **transfer learning** với mô hình được huấn luyện trước để cải thiện hiệu suất trên tập dữ liệu nhỏ.
- Sử dụng **callbacks** (ví dụ: lập lịch tốc độ học, dừng sớm) để huấn luyện hiệu quả hơn.
- Đánh giá mô hình bằng các chỉ số như độ chính xác, ma trận nhầm lẫn và đường cong mất mát/độ chính xác.
## Bộ Dữ Liệu
- **Nguồn**: Bộ dữ liệu phân loại bệnh lá sắn từ Kaggle (5 lớp: 4 bệnh + khỏe mạnh).
- **Vị trí**: Lưu tại `data_p2/data_undersampled/train` (đã được lấy mẫu dưới để cân bằng các lớp).
- **Tiền xử lý**: Hình ảnh được thay đổi kích thước về 224x224, chuẩn hóa và tăng cường dữ liệu (lật, xoay ngẫu nhiên).
- **Chia dữ liệu**: Tách thành tập huấn luyện/xác thực theo tỷ lệ 80/20 bằng `random_split`.
## Cấu Trúc Kho Lưu Trữ
| Notebook | Mô Tả |
|----------|-------|
| `022-explore-dataset.ipynb` | Khám phá bộ dữ liệu, trực quan hóa phân bố lớp và tạo tập dữ liệu cân bằng bằng lấy mẫu dưới. |
| `023-multiclass-classification.ipynb` | Xây dựng và huấn luyện CNN tùy chỉnh cho phân loại đa lớp. |
| `024-transfer-learning.ipynb` | Áp dụng transfer learning với mô hình ResNet được huấn luyện trước, tinh chỉnh cho phân loại lá sắn. |
| `025-callbacks.ipynb` | Tăng cường huấn luyện với các callback như lập lịch tốc độ học, dừng sớm và lưu mô hình tốt nhất. |
## Các Tính Năng và Nhiệm Vụ Chính
### Transfer Learning (`024-transfer-learning.ipynb`)
- **Mô hình**: Sử dụng ResNet được huấn luyện trước (ví dụ: ResNet-18/50) từ ` …