166 lines
4.8 KiB
Markdown
166 lines
4.8 KiB
Markdown
# CNN PyTorch Model for Land Use Classification
|
||
|
||
## Mô tả
|
||
|
||
Hai notebook mới được tạo để huấn luyện và dự đoán sử dụng đất bằng **CNN (Convolutional Neural Network) với PyTorch**.
|
||
|
||
### File được tạo:
|
||
|
||
1. **`04.train_CNN_PyTorch_ODC.ipynb`** - Huấn luyện mô hình CNN
|
||
- Tải dữ liệu Sentinel-1 (VH, VV) và Sentinel-2 (NDVI)
|
||
- Xử lý và chuẩn bị dữ liệu
|
||
- Huấn luyện mô hình CNN với PyTorch
|
||
- Vẽ đồ thị độ chính xác và loss
|
||
- Lưu model
|
||
|
||
2. **`05.predict_CNN_PyTorch_ODC.ipynb`** - Dự đoán với model đã huấn luyện
|
||
- Tải model đã lưu
|
||
- Dự đoán cho toàn bộ khu vực
|
||
- Xuất bản đồ phân loại
|
||
- Lưu kết quả thành file GeoTIFF
|
||
|
||
### Module được cập nhật:
|
||
|
||
**`new_import_ODC.py`** - Thêm các hàm CNN với PyTorch:
|
||
|
||
```python
|
||
class CNN1D(nn.Module):
|
||
"""1D CNN model để phân loại sử dụng đất"""
|
||
|
||
def prepare_data_for_pytorch(X_train, X_val, X_test, y_train, y_val, y_test)
|
||
"""Chuẩn bị dữ liệu: normalize và convert to tensors"""
|
||
|
||
def train_cnn_pytorch(X_train, X_val, X_test, y_train, y_val, y_test, ...)
|
||
"""Huấn luyện CNN model"""
|
||
|
||
def plot_pytorch_training_history(history)
|
||
"""Vẽ đồ thị huấn luyện"""
|
||
|
||
def save_pytorch_model(model, scaler, model_name)
|
||
"""Lưu model"""
|
||
|
||
def load_pytorch_model(model_name, device)
|
||
"""Tải model"""
|
||
```
|
||
|
||
## Kiến trúc CNN
|
||
|
||
```
|
||
Input (samples, 1, 35)
|
||
↓
|
||
Block 1: Conv1D(64) → BatchNorm → Conv1D(64) → BatchNorm → MaxPool → Dropout
|
||
↓
|
||
Block 2: Conv1D(128) → BatchNorm → Conv1D(128) → BatchNorm → MaxPool → Dropout
|
||
↓
|
||
Block 3: Conv1D(256) → BatchNorm → Conv1D(256) → BatchNorm → GlobalAvgPool → Dropout
|
||
↓
|
||
FC Layer 1: Dense(256) → BatchNorm → Dropout
|
||
↓
|
||
FC Layer 2: Dense(128) → BatchNorm → Dropout
|
||
↓
|
||
Output: Dense(8) → Softmax
|
||
```
|
||
|
||
## Đặc trưng (Features)
|
||
|
||
- **Sentinel-1**: VH, VV (Synthetic Aperture Radar) - 2 kênh × 12 tháng = 24 features
|
||
- **Sentinel-2**: NDVI (Normalized Difference Vegetation Index) - 1 chỉ số × 12 tháng = 12 features
|
||
- **Tổng cộng**: 35 features (24 + 12) - 1 time series
|
||
|
||
## Phân loại (8 lớp)
|
||
|
||
- 0: Lúa tôm
|
||
- 1: Lúa
|
||
- 2: Cây hằng năm (CHN)
|
||
- 3: Cây lâu năm (CLN)
|
||
- 4: Thổ nhưỡng (TS)
|
||
- 5: Sông
|
||
- 6: Đất xây dựng
|
||
- 7: Rừng
|
||
|
||
## Hyperparameters
|
||
|
||
```python
|
||
- Epochs: 100
|
||
- Batch size: 32
|
||
- Learning rate: 1e-3 (với ReduceLROnPlateau)
|
||
- Optimizer: Adam
|
||
- Loss function: CrossEntropyLoss
|
||
- Early stopping patience: 15 epochs
|
||
- Dropout rate: 0.5
|
||
```
|
||
|
||
## PyTorch Requirements
|
||
|
||
```bash
|
||
pip install torch torchvision torchaudio
|
||
```
|
||
|
||
## GPU Support
|
||
|
||
Model hỗ trợ training trên GPU. Nếu có CUDA:
|
||
|
||
```python
|
||
device = 'cuda' # GPU
|
||
# hoặc
|
||
device = 'cpu' # CPU
|
||
```
|
||
|
||
## Luồng công việc
|
||
|
||
### Huấn luyện (04.train_CNN_PyTorch_ODC.ipynb)
|
||
|
||
1. Import modules
|
||
2. Kiểm tra GPU
|
||
3. Kết nối Dask cluster
|
||
4. Tải dữ liệu Sentinel-2 từ S3
|
||
5. Xử lý dữ liệu (masking cloud, fill NaN)
|
||
6. Tính toán NDVI
|
||
7. Tải dữ liệu Sentinel-1 (VH, VV)
|
||
8. Tải dữ liệu huấn luyện (1130 điểm)
|
||
9. Chia dữ liệu (train/val/test)
|
||
10. Huấn luyện CNN model
|
||
11. Vẽ đồ thị
|
||
12. Lưu model
|
||
|
||
### Dự đoán (05.predict_CNN_PyTorch_ODC.ipynb)
|
||
|
||
1. Import modules
|
||
2. Kiểm tra GPU
|
||
3. Kết nối Dask cluster
|
||
4. Tải dữ liệu Sentinel-2 và Sentinel-1
|
||
5. Xử lý dữ liệu
|
||
6. Tải model đã huấn luyện
|
||
7. Dự đoán cho toàn bộ khu vực (theo batch)
|
||
8. Tạo bản đồ phân loại
|
||
9. Lưu kết quả thành GeoTIFF
|
||
|
||
## Output
|
||
|
||
- **Model**: `model_train/model_cnn_pytorch.pth`
|
||
- Chứa: model weights, model architecture, scaler
|
||
- **Classification Map**: `prediction_results/classification_map_cnn_pytorch.tif`
|
||
- GeoTIFF raster với 8 lớp phân loại
|
||
|
||
## Ưu điểm của CNN so với Random Forest
|
||
|
||
1. **Tự động trích xuất features** - CNN học được các pattern phức tạp
|
||
2. **Xử lý dữ liệu time series tốt hơn** - Conv1D capture temporal patterns
|
||
3. **Regularization tốt** - BatchNorm + Dropout giảm overfitting
|
||
4. **Scalability** - GPU acceleration cho dataset lớn
|
||
5. **Transfer learning** - Có thể fine-tune pre-trained models
|
||
|
||
## Ghi chú
|
||
|
||
- Model sử dụng Conv1D vì dữ liệu là 1D time series (35 features)
|
||
- Early stopping dừa trên validation loss để tránh overfitting
|
||
- Learning rate reduction tự động giảm learning rate khi validation loss không cải thiện
|
||
- Scaler được lưu cùng với model để normalize dữ liệu trong phase dự đoán
|
||
|
||
## Liên hệ
|
||
|
||
Nếu có câu hỏi về implementation, hãy kiểm tra:
|
||
- `new_import_ODC.py` - Định nghĩa hàm và model
|
||
- `04.train_CNN_PyTorch_ODC.ipynb` - Huấn luyện
|
||
- `05.predict_CNN_PyTorch_ODC.ipynb` - Dự đoán
|