← Quay lại trang chủ

BTL 1 - Image Classification Report

Trang báo cáo tổng hợp cho Assignment 1 - phần Image Classification, tập trung vào pipeline từ EDA, thiết kế mô hình, huấn luyện trên 8 cấu hình (4 backbone x Aug/No-Aug), trực quan hóa bằng GradCAM/EigenCAM.

Dataset: Animals-10 Framework: PyTorch + timm Tracking: Weights & Biases Visualization: GradCAM/EigenCAM
01

Giới thiệu và mô tả bài toán

Bài toán là phân loại ảnh động vật đa lớp (10 lớp), đầu vào là ảnh RGB được resize về 224x224 và chuẩn hóa theo cấu hình từng backbone. Mục tiêu là tối ưu độ chính xác cho kết quả của mô hình (macro F1/Accuracy) và đánh giá kết quả khi thay đổi backbone và augmentation.

Bài toán
Multi-class Classification
Số lớp
10 classes
Metrics
Macro F1 + Accuracy
Số cấu hình chạy
8 experiments
02

EDA (Exploratory Data Analysis)

Trực quan hóa phân bố mẫu theo lớp và vài sample ảnh trước bước resize/augmentation để kiểm tra chất lượng dữ liệu.

Kích thước dataset: 26179 ảnh - 10 lớp

Phân bố lớp dữ liệu Animals-10
Phân bố số lượng mẫu theo từng lớp.
Minh họa ảnh mẫu sau augmentation
Ảnh mẫu ngẫu nhiên của dataset.
03

Cách chia Data Split và Data Augmentation

Dữ liệu được chia theo tỉ lệ 70/15/15 tương ứng với các tập train/val/test. Mỗi model dùng transform riêng dựa trên data config từ timm.

Train
70%
Validation
15%
Test
15%

Data augmentation (cho tập train) bao gồm: RandomResizedCrop, RandomHorizontalFlip, RandomVerticalFlip, RandomRotation, RandomGrayscale, ColorJitter, và Normalize theo config của từng backbone.

transform = transforms.Compose([
            transforms.RandomResizedCrop(IMG_SIZE, scale=(0.7, 1.0)),
            transforms.RandomHorizontalFlip(),
            transforms.RandomVerticalFlip(p=0.1),
            transforms.ColorJitter(brightness=0.3, contrast=0.3,
                                   saturation=0.2, hue=0.1),
            transforms.RandomRotation(20),
            transforms.RandomGrayscale(p=0.05),
            transforms.ToTensor(),
            transforms.Normalize(mean=mean, std=std),
        ])
04

Lựa chọn mô hình Backbone (4 loại)

So sánh 2 đại diện CNN (ResNet18, EfficientNet-B0) và 2 Transformer-based models (ViT-B16, Swin-Tiny).

ResNet18CNN
Placeholder backbone ResNet18
EfficientNetB0CNN
Placeholder backbone EfficientNetB0
ViT-B16Transformer
Placeholder backbone ViT-B16
Swin-TTransformer
Placeholder backbone Swin-T
06

Kết quả Training (Wandb log)

Chuyển tab để xem các nhóm biểu đồ train/val theo metric

WandB Train Loss (all runs)
Train loss toàn bộ 8 run.
WandB Val Loss (all runs)
Validation loss toàn bộ 8 run.
WandB Train Accuracy
Train accuracy từng backbone.
WandB Val Accuracy
Validation accuracy từng backbone.
WandB Val Macro F1
Macro F1 theo epoch.
WandB Precision
Macro precision theo epoch.
WandB Recall
Macro recall theo epoch.
07

So sánh mô hình: 4 Backbone x (Aug / No-Aug)

Bảng so sánh tổng hợp các metric chính (accuracy, precision, recall, F1) và các chỉ số chi phí (số lượng tham số, FLOPs, kích thước mô hình) cho các cấu hình khác nhau.

So sánh toàn bộ 8 cấu hình
Model Acc (%) Prec (%) Rec (%) F1 (%) Params (M) FLOPs (G) Size (MB)
EfficientNetB0_noaug 98.27 97.99 98.17 98.08 4.63 0.39 19.15
EfficientNetB0_aug 98.17 98.09 97.91 97.99 4.63 0.39 19.15
ResNet18_noaug 97.51 97.33 97.15 97.24 11.45 1.82 45.89
ResNet18_aug 97.20 96.95 96.71 96.81 11.45 1.82 45.89
SwinT_aug 98.32 98.08 98.07 98.07 27.90 4.37 111.82
SwinT_noaug 98.19 98.16 97.94 98.05 27.90 4.37 111.82
ViT_B16_aug 97.30 97.01 96.72 96.86 86.01 16.85 344.97
ViT_B16_noaug 96.51 96.11 96.12 96.11 86.01 16.85 344.97
Top 1 theo tung metric Top 2 theo tung metric
So sánh nhóm Aug
Model Acc (%) Prec (%) Rec (%) F1 (%) Params (M) FLOPs (G) Size (MB)
EfficientNetB0_aug 98.17 98.09 97.91 97.99 4.63 0.39 19.15
ResNet18_aug 97.20 96.95 96.71 96.81 11.45 1.82 45.89
SwinT_aug 98.32 98.08 98.07 98.07 27.90 4.37 111.82
ViT_B16_aug 97.30 97.01 96.72 96.86 86.01 16.85 344.97
Top 1 theo tung metric Top 2 theo tung metric
So sánh nhóm No-Aug
Model Acc (%) Prec (%) Rec (%) F1 (%) Params (M) FLOPs (G) Size (MB)
EfficientNetB0_noaug 98.27 97.99 98.17 98.08 4.63 0.39 19.15
ResNet18_noaug 97.51 97.33 97.15 97.24 11.45 1.82 45.89
SwinT_noaug 98.19 98.16 97.94 98.05 27.90 4.37 111.82
ViT_B16_noaug 96.51 96.11 96.12 96.11 86.01 16.85 344.97
Top 1 theo từng metric Top 2 theo từng metric

Confusion Matrix cho từng model

08

Kết quả thực nghiệm: Trực quan hóa bằng GradCAM/EigenCAM

Trình bày các mẫu model dự đoán và phân tích, trực quan hóa bằng GradCAM/EigenCAM để hiểu vùng ảnh nào mô hình tập trung khi dự đoán. So sánh giữa 4 backbone để thấy sự khác biệt trong cách học đặc trưng.

Mẫu 1: Mẫu khó

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder

Mẫu 2: Không phải con vật

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder

Mẫu 3: Mẫu sai nhãn

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder

Mẫu 4: Mẫu sai nhãn

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder

Mẫu 5: Mẫu khó

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder

Mẫu 6: Mẫu khó (mèo lai bướm)

CNN: ResNet18_noaug vs EfficientNetB0_noaug - GradCAM
Overlay placeholder
Transformer: ViT_B16_noaug vs SwinT_noaug - EigenCAM
Overlay placeholder
CNN: ResNet18_aug vs EfficientNetB0_aug - GradCAM
Overlay placeholder
Transformer: ViT_B16_aug vs SwinT_aug - EigenCAM
Overlay placeholder
09

Thử nghiệm trực tiếp trên Gradio - Hugging Face Space

Gradio - Hugging Face Space

Nếu iframe bị lỗi, bấm nút bên dưới để mở Hugging Face Space ở tab mới.

Mở Hugging Face Space