Phuneil commited on
Commit
0777bc8
·
verified ·
1 Parent(s): 96fb1f4

Update Readme

Browse files
Files changed (1) hide show
  1. README.md +123 -3
README.md CHANGED
@@ -1,3 +1,123 @@
1
- ---
2
- license: mit
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ metrics:
4
+ - accuracy
5
+ pipeline_tag: image-classification
6
+ tags:
7
+ - images
8
+ ---
9
+ # CatDogEfficientNetB0 - Phân loại ảnh mèo và chó
10
+
11
+ ## Mô tả dự án
12
+ Dự án này sử dụng mô hình **EfficientNet-B0** để phân loại ảnh mèo và chó. Mô hình được tùy chỉnh để phù hợp với bài toán phân loại 2 lớp (mèo và chó). Dữ liệu được xử lý và huấn luyện thông qua file `train_efficientnet.py`, và mô hình được định nghĩa trong file `model_efficientnet.py`.
13
+
14
+ ---
15
+
16
+ ## Cấu trúc dự án
17
+ - **`model_efficientnet.py`**: Định nghĩa mô hình `CatDogEfficientNetB0`, sử dụng EfficientNet-B0 với lớp cuối được tùy chỉnh để phân loại 2 lớp.
18
+ - **`train_efficientnet.py`**: File huấn luyện mô hình, bao gồm:
19
+ - Tiền xử lý dữ liệu.
20
+ - Huấn luyện mô hình với thanh tiến trình hiển thị % hoàn thành.
21
+ - Lưu checkpoint khi đạt độ chính xác cao nhất trên tập validation.
22
+ - **`efficientnet_best.pth`**: Checkpoint của mô hình với độ chính xác cao nhất trên tập validation.
23
+ - **`efficientnet_model_final.pth`**: Mô hình cuối cùng sau khi hoàn thành tất cả các epoch.
24
+
25
+ ---
26
+
27
+ ## Mô hình `CatDogEfficientNetB0`
28
+ Mô hình được định nghĩa trong file `model_efficientnet.py`:
29
+ - Sử dụng **EfficientNet-B0** với trọng số ImageNet (`EfficientNet_B0_Weights.DEFAULT`).
30
+ - Đóng băng các trọng số của mô hình gốc (`param.requires_grad = False`).
31
+ - Thay thế lớp phân loại cuối cùng bằng một lớp `nn.Linear` với 2 đầu ra (mèo và chó).
32
+
33
+ ### Code mẫu:
34
+ ```python
35
+ class CatDogEfficientNetB0(nn.Module):
36
+ def __init__(self):
37
+ super().__init__()
38
+ weights = EfficientNet_B0_Weights.DEFAULT
39
+ self.base = efficientnet_b0(weights=weights)
40
+ for param in self.base.parameters():
41
+ param.requires_grad = False
42
+ in_features = self.base.classifier[1].in_features
43
+ self.base.classifier[1] = nn.Linear(in_features, 2)
44
+
45
+ def forward(self, x):
46
+ return self.base(x)
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Huấn luyện mô hình
52
+ File `train_efficientnet.py` thực hiện các bước sau:
53
+ 1. **Tiền xử lý dữ liệu**:
54
+ - Resize ảnh về kích thước 224x224.
55
+ - Normalize ảnh theo chuẩn ImageNet.
56
+ 2. **Cấu hình huấn luyện**:
57
+ - Sử dụng `Adam` làm optimizer.
58
+ - Sử dụng `CrossEntropyLoss` làm hàm mất mát.
59
+ - Huấn luyện trong 10 epoch với batch size 32.
60
+ 3. **Hiển thị tiến trình**:
61
+ - Sử dụng thư viện `tqdm` để hiển thị tiến trình huấn luyện theo từng batch.
62
+ 4. **Lưu checkpoint**:
63
+ - Lưu mô hình (`efficientnet_best.pth`) khi đạt độ chính xác cao nhất trên tập validation.
64
+ - Lưu mô hình cuối cùng (`efficientnet_model_final.pth`) sau khi hoàn thành tất cả các epoch.
65
+
66
+ ### Code mẫu:
67
+ ```python
68
+ for epoch in range(EPOCHS):
69
+ model.train()
70
+ train_bar = tqdm(train_loader, desc=f"Epoch {epoch+1}/{EPOCHS}", unit="batch")
71
+ for images, labels in train_bar:
72
+ images, labels = images.to(device), labels.to(device)
73
+ optimizer.zero_grad()
74
+ outputs = model(images)
75
+ loss = criterion(outputs, labels)
76
+ loss.backward()
77
+ optimizer.step()
78
+ train_bar.set_postfix(loss=loss.item())
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Cách sử dụng
84
+ 1. **Chuẩn bị dữ liệu**:
85
+ - Đặt dữ liệu vào thư mục `data/train` và `data/val` theo cấu trúc:
86
+ ```
87
+ data/
88
+ ├── train/
89
+ │ ├── cat/
90
+ │ └── dog/
91
+ ├── val/
92
+ │ ├── cat/
93
+ │ └── dog/
94
+ ```
95
+ 2. **Huấn luyện mô hình**:
96
+ - Chạy file `train_efficientnet.py`:
97
+ ```bash
98
+ python train_efficientnet.py
99
+ ```
100
+ 3. **Dự đoán**:
101
+ - Sử dụng mô hình đã lưu (`efficientnet_best.pth`) để dự đoán ảnh mới.
102
+
103
+ ---
104
+
105
+ ## Yêu cầu
106
+ - Python >= 3.8
107
+ - Thư viện:
108
+ - `torch`
109
+ - `torchvision`
110
+ - `tqdm`
111
+ - `Pillow`
112
+
113
+ ---
114
+
115
+ ## Kết quả
116
+ - Mô hình đạt độ chính xác cao nhất trên tập validation được lưu trong file `efficientnet_best.pth`.
117
+ - Mô hình cuối cùng sau khi hoàn thành tất cả các epoch được lưu trong file `efficientnet_model_final.pth`.
118
+
119
+ ---
120
+
121
+ ## Ghi chú
122
+ - Đảm bảo GPU được bật để tăng tốc quá trình huấn luyện.
123
+ - Kiểm tra dữ liệu đầu vào để tránh ảnh lỗi hoặc không hợp lệ.