263 lines
6.0 KiB
Markdown
263 lines
6.0 KiB
Markdown
# Quick Start Guide - PyTorch CNN Training Workflow
|
|
|
|
## TL;DR (Nhanh gọn)
|
|
|
|
1. **Server**: Chạy `01.prepare_data_on_server.ipynb` → Lưu data
|
|
2. **Local**: Download data → Chạy `02.train_CNN_PyTorch_local.ipynb` → Huấn luyện
|
|
3. **Local**: Chạy `03.predict_CNN_PyTorch_local.ipynb` → Dự đoán
|
|
|
|
---
|
|
|
|
## Step 1️⃣: Chuẩn Bị Data Trên Server
|
|
|
|
### Chạy notebook:
|
|
```
|
|
01.prepare_data_on_server.ipynb
|
|
```
|
|
|
|
### Khi hoàn thành, bạn sẽ có:
|
|
```
|
|
data_for_training/
|
|
├── average_ndvi.nc (~50-100 MB)
|
|
├── average_vv.nc (~50-100 MB)
|
|
├── average_vh.nc (~50-100 MB)
|
|
└── train_data/
|
|
└── ST_training data_updated_1130points_new.* (các file shp)
|
|
```
|
|
|
|
### Download data (từ terminal):
|
|
```bash
|
|
scp -r your_username@your_server_ip:/path/to/data_for_training ./
|
|
```
|
|
|
|
**File size**: Khoảng 150-300 MB (tùy vào độ phân giải)
|
|
|
|
---
|
|
|
|
## Step 2️⃣: Cài Đặt Environment Trên Local
|
|
|
|
### Tạo virtual environment:
|
|
```bash
|
|
python -m venv pytorch_env
|
|
source pytorch_env/bin/activate # On Windows: pytorch_env\Scripts\activate
|
|
```
|
|
|
|
### Cài PyTorch (GPU - recommended):
|
|
```bash
|
|
# For NVIDIA GPU
|
|
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
|
|
# Or CPU only (nếu không có GPU)
|
|
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
|
|
```
|
|
|
|
### Cài dependencies:
|
|
```bash
|
|
pip install numpy xarray netcdf4 geopandas shapely scikit-learn matplotlib rasterio joblib
|
|
```
|
|
|
|
### Kiểm tra GPU:
|
|
```bash
|
|
python -c "import torch; print(f'GPU: {torch.cuda.is_available()}')"
|
|
```
|
|
|
|
---
|
|
|
|
## Step 3️⃣: Huấn Luyện Model
|
|
|
|
### Chạy notebook:
|
|
```
|
|
02.train_CNN_PyTorch_local.ipynb
|
|
```
|
|
|
|
### Điều gì sẽ xảy ra:
|
|
- ✅ Load data từ file NetCDF
|
|
- ✅ Trích xuất 1130 training points
|
|
- ✅ Huấn luyện CNN model (100 epochs tối đa)
|
|
- ✅ Hiển thị training curves
|
|
- ✅ Lưu model
|
|
|
|
### Thời gian:
|
|
- **GPU (NVIDIA)**: ~5-15 phút
|
|
- **GPU (Apple Silicon)**: ~10-20 phút
|
|
- **CPU**: ~30-60 phút
|
|
|
|
### Output files:
|
|
```
|
|
├── model_cnn_pytorch.pt (50-100 MB)
|
|
├── model_cnn_pytorch_full.pt (50-100 MB)
|
|
└── training_history.png
|
|
```
|
|
|
|
---
|
|
|
|
## Step 4️⃣: Dự Đoán Trên Dataset
|
|
|
|
### Chạy notebook:
|
|
```
|
|
03.predict_CNN_PyTorch_local.ipynb
|
|
```
|
|
|
|
### Điều gì sẽ xảy ra:
|
|
- ✅ Load trained model
|
|
- ✅ Predict trên toàn bộ ~11 triệu pixels
|
|
- ✅ Tạo classification map
|
|
- ✅ Lưu kết quả
|
|
|
|
### Thời gian:
|
|
- **GPU**: ~2-5 phút
|
|
- **CPU**: ~10-20 phút
|
|
|
|
### Output files:
|
|
```
|
|
├── land_use_prediction.nc (NetCDF - 50-100 MB)
|
|
├── land_use_prediction.tif (GeoTIFF - 50-100 MB)
|
|
├── prediction_map.png (Visualization)
|
|
└── prediction_metadata.json (Model info + accuracy)
|
|
```
|
|
|
|
---
|
|
|
|
## Key Features của Workflow
|
|
|
|
| Feature | Benefit |
|
|
|---------|---------|
|
|
| **Modular Design** | Các notebook độc lập, có thể chạy riêng lẻ |
|
|
| **GPU Support** | Tự động phát hiện và sử dụng GPU |
|
|
| **Normalization** | Tự động normalize dữ liệu |
|
|
| **Early Stopping** | Tránh overfitting |
|
|
| **Data Validation** | Kiểm tra dữ liệu trước training |
|
|
| **Visualization** | Vẽ training curves và prediction map |
|
|
| **Metadata** | Lưu model info và test accuracy |
|
|
|
|
---
|
|
|
|
## Các Model Output
|
|
|
|
### Training Phase
|
|
```
|
|
model_cnn_pytorch_full.pt
|
|
├── state_dict (weights)
|
|
├── num_classes (8)
|
|
├── input_size (35 features)
|
|
├── label_mapping (class names)
|
|
├── mean (normalization)
|
|
├── std (normalization)
|
|
├── test_accuracy (%)
|
|
└── test_loss
|
|
```
|
|
|
|
### Prediction Phase
|
|
```
|
|
land_use_prediction.nc
|
|
├── land_use_class (data array)
|
|
├── x, y coordinates
|
|
├── Spatial grid (1080x1080 pixels)
|
|
└── CRS (projection)
|
|
```
|
|
|
|
---
|
|
|
|
## Model Architecture (CNN)
|
|
|
|
```
|
|
Input (N, 1, 35)
|
|
↓
|
|
Conv1d(1, 64, 3) → BatchNorm → ReLU
|
|
Conv1d(64, 64, 3) → BatchNorm → ReLU
|
|
MaxPool(2) → Dropout(0.25)
|
|
↓
|
|
Conv1d(64, 128, 3) → BatchNorm → ReLU
|
|
Conv1d(128, 128, 3) → BatchNorm → ReLU
|
|
MaxPool(2) → Dropout(0.25)
|
|
↓
|
|
Conv1d(128, 256, 3) → BatchNorm → ReLU
|
|
Conv1d(256, 256, 3) → BatchNorm → ReLU
|
|
GlobalAvgPool → Dropout(0.25)
|
|
↓
|
|
FC(256, 128) → BatchNorm → ReLU → Dropout(0.5)
|
|
FC(128, 64) → BatchNorm → ReLU → Dropout(0.5)
|
|
FC(64, 8) → Softmax
|
|
↓
|
|
Output (N, 8)
|
|
```
|
|
|
|
**Parameters**: ~500K
|
|
**Trainable**: ~450K
|
|
|
|
---
|
|
|
|
## Hyperparameters
|
|
|
|
```python
|
|
# Training
|
|
epochs = 100
|
|
batch_size = 32
|
|
learning_rate = 0.001
|
|
optimizer = Adam
|
|
loss = CrossEntropyLoss
|
|
|
|
# Regularization
|
|
dropout = [0.25, 0.5]
|
|
early_stopping_patience = 15
|
|
scheduler = ReduceLROnPlateau
|
|
|
|
# Splitting
|
|
train/val/test = 60/20/20
|
|
```
|
|
|
|
---
|
|
|
|
## Common Issues & Solutions
|
|
|
|
| Issue | Solution |
|
|
|-------|----------|
|
|
| `FileNotFoundError` | Chạy notebook 01 trên server trước |
|
|
| `GPU not available` | Cài lại PyTorch với CUDA version đúng |
|
|
| `Out of memory` | Giảm batch_size hoặc dùng CPU |
|
|
| `Model file too large` | File ~100 MB là bình thường |
|
|
| `Prediction quá lâu` | Giảm batch_size trong predict |
|
|
|
|
---
|
|
|
|
## Expected Results
|
|
|
|
### Training Accuracy
|
|
- Train: ~85-95%
|
|
- Val: ~75-85%
|
|
- Test: ~75-85%
|
|
|
|
### Output
|
|
- Classification map: 1080x1080 pixels
|
|
- 8 classes: Lua tom, Lua, CHN, CLN, TS, Song, Dat xay dung, Rung
|
|
- Spatial resolution: 10m/pixel
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ Data preparation trên server (30 phút - 2 giờ)
|
|
2. ✅ Download data xuống local (~1 giờ)
|
|
3. ✅ Training trên local (~30 phút - 2 giờ)
|
|
4. ✅ Prediction (~10 phút)
|
|
5. **Validation** (so sánh với ground truth)
|
|
6. **Optimization** (fine-tune hyperparameters)
|
|
|
|
---
|
|
|
|
## Support & Resources
|
|
|
|
- **PyTorch Docs**: https://pytorch.org/docs/stable/index.html
|
|
- **xarray Docs**: https://docs.xarray.dev/
|
|
- **GeoPandas Docs**: https://geopandas.org/
|
|
|
|
---
|
|
|
|
**Estimated Total Time**:
|
|
- Server: 1-3 hours
|
|
- Local Training: 1-3 hours (GPU) / 3-6 hours (CPU)
|
|
- Prediction: 15 minutes
|
|
- **Total**: 2-9 hours depending on hardware
|
|
|
|
🚀 **Ready to start? Run notebook `01.prepare_data_on_server.ipynb` on server first!**
|