# Workflow: Prepare Data on Server → Train on Local → Predict on Local ## Tổng quan Workflow này giải quyết vấn đề của bạn bằng cách chia công việc thành 3 bước: 1. **Server (01.prepare_data_on_server.ipynb)**: Tải dữ liệu từ S3, xử lý, lưu file 2. **Máy Local (02.train_CNN_PyTorch_local.ipynb)**: Load data, train model 3. **Máy Local (03.predict_CNN_PyTorch_local.ipynb)**: Dùng model để predict --- ## Bước 1: Chuẩn bị Dữ liệu trên Server **File**: `01.prepare_data_on_server.ipynb` ### Quy trình: - ✅ Kết nối Dask cluster - ✅ Tải ảnh Sentinel-2 từ S3 - ✅ Xử lý mây (masking) - ✅ Tính NDVI - ✅ Điền giá trị mây bằng seasonal interpolation - ✅ Tính giá trị trung bình theo tháng - ✅ Tải ảnh Sentinel-1 (VH, VV) - ✅ Lưu tất cả dữ liệu dưới dạng file NetCDF trong thư mục `data_for_training/` - ✅ Copy training data (shapefile) vào `data_for_training/train_data/` ### Kết quả: ``` data_for_training/ ├── average_ndvi.nc # NDVI data (monthly average) ├── average_vv.nc # Sentinel-1 VV data (monthly average) ├── average_vh.nc # Sentinel-1 VH data (monthly average) └── train_data/ ├── ST_training data_updated_1130points_new.shp ├── ST_training data_updated_1130points_new.shx ├── ST_training data_updated_1130points_new.dbf └── ... (other shape files) ``` ### Tải file xuống máy cá nhân: ```bash # Từ server sang máy local scp -r user@server:/path/to/data_for_training ./ ``` --- ## Bước 2: Huấn luyện Model trên Máy Local **File**: `02.train_CNN_PyTorch_local.ipynb` ### Yêu cầu: - ✅ Python 3.8+ - ✅ PyTorch đã cài đặt - ✅ NumPy, xarray, geopandas, scikit-learn - ✅ Thư mục `data_for_training/` có sẵn ### Cài đặt dependencies: ```bash pip install torch torchvision torchaudio pip install numpy xarray geopandas scikit-learn matplotlib ``` ### Quy trình: 1. **Load dữ liệu**: - Mở các file NetCDF (NDVI, VV, VH) - Load training points từ shapefile 2. **Chuẩn bị dữ liệu**: - Trích xuất giá trị từ các điểm training (35 features = 12 tháng × 3 bands - NDVI, VV, VH) - Chia dữ liệu: Train (60%), Val (20%), Test (20%) - Normalize dữ liệu 3. **Xây dựng CNN Model**: - 3 Conv blocks với BatchNorm + MaxPooling + Dropout - 2 Fully connected layers - Output: 8 classes (loại sử dụng đất) 4. **Huấn luyện**: - Adam optimizer với learning rate = 0.001 - Early stopping (patience=15) - Learning rate scheduler (ReduceLROnPlateau) - Epochs: 100 (tối đa) 5. **Lưu model**: - `model_cnn_pytorch.pt` - Chỉ state dict - `model_cnn_pytorch_full.pt` - Full model info (state dict + metadata) ### Kết quả: ``` ├── model_cnn_pytorch.pt # PyTorch state dict ├── model_cnn_pytorch_full.pt # Full model (+ normalization params) ├── model_cnn_pytorch_best.pt # Best model checkpoint └── training_history.png # Training curves ``` --- ## Bước 3: Dự đoán trên Máy Local **File**: `03.predict_CNN_PyTorch_local.ipynb` ### Quy trình: 1. **Load model**: Mở file `model_cnn_pytorch_full.pt` 2. **Load dữ liệu**: - Mở các file NetCDF - Reshape thành spatial grid 3. **Predict trên toàn bộ dataset**: - Áp dụng normalization (mean/std từ training) - Predict từng batch để tiết kiệm memory - Reshape kết quả thành map 4. **Lưu kết quả**: - `land_use_prediction.nc` - NetCDF format - `land_use_prediction.tif` - GeoTIFF format (nếu có rasterio) - `prediction_map.png` - Visualization - `prediction_metadata.json` - Metadata (accuracy, label mapping, etc.) ### Kết quả: ``` ├── land_use_prediction.nc # NetCDF output ├── land_use_prediction.tif # GeoTIFF output ├── prediction_map.png # Visualization └── prediction_metadata.json # Metadata ``` --- ## Full Workflow Diagram ``` ┌─────────────────────────────────────────────────────────┐ │ SERVER │ │ 01.prepare_data_on_server.ipynb │ │ ✅ Load từ S3 (Sentinel-1, 2) │ │ ✅ Xử lý mây, tính NDVI │ │ ✅ Lưu NetCDF files │ └──────────────┬──────────────────────────────────────────┘ │ Download data_for_training/ ↓ ┌─────────────────────────────────────────────────────────┐ │ LOCAL MACHINE │ │ 02.train_CNN_PyTorch_local.ipynb │ │ ✅ Load data từ file │ │ ✅ Trích xuất features từ training points │ │ ✅ Huấn luyện CNN model │ │ ✅ Lưu model │ └──────────────┬──────────────────────────────────────────┘ │ model_cnn_pytorch_full.pt ↓ ┌─────────────────────────────────────────────────────────┐ │ LOCAL MACHINE │ │ 03.predict_CNN_PyTorch_local.ipynb │ │ ✅ Load model │ │ ✅ Predict trên toàn bộ dataset │ │ ✅ Lưu kết quả (NC, TIF, PNG, JSON) │ └──────────────┬──────────────────────────────────────────┘ │ Optional: Upload kết quả lên server ↓ (Server lưu trữ) ``` --- ## Lợi Ích của Workflow này | Tiêu chí | Trước | Sau | |---------|------|-----| | **Vị trí code** | Phải code trên server rồi up | Code trên máy local, không cần up | | **Dữ liệu** | Không cần download | Download file nhỏ hơn (NetCDF thay vì raw data) | | **Huấn luyện** | Chạy trên server | Chạy trên GPU local nhanh hơn | | **Predict** | Chạy trên server | Chạy local, không chiếm server resource | | **Phát triển** | Chậm (test trên server) | Nhanh (test local ngay) | --- ## Các file đã tạo ### Notebooks: - `01.prepare_data_on_server.ipynb` - Chuẩn bị data trên server - `02.train_CNN_PyTorch_local.ipynb` - Huấn luyện model trên local - `03.predict_CNN_PyTorch_local.ipynb` - Predict trên local ### Documentation: - `LOCAL_TRAINING_WORKFLOW.md` - File này (hướng dẫn chi tiết) - `PYTORCH_REQUIREMENTS.txt` - Dependencies - `PYTORCH_INSTALLATION.md` - Hướng dẫn cài PyTorch --- ## Troubleshooting ### Problem 1: Data files không tồn tại ``` ❌ FileNotFoundError: Thư mục 'data_for_training' không tồn tại ``` **Solution**: Hãy chạy notebook 01 trên server và tải file xuống ### Problem 2: GPU không được nhận ``` GPU available: False ``` **Solution**: ```bash # Cài PyTorch với GPU support pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` ### Problem 3: Memory không đủ khi train **Solution**: - Giảm batch_size (từ 32 xuống 16) - Giảm epochs - Giảm model complexity ### Problem 4: OutOfMemory khi predict **Solution**: - Giảm batch_size trong prediction (từ 128 xuống 64 hoặc 32) --- ## Tiếp theo Sau khi có kết quả predict: 1. Upload `land_use_prediction.tif` lên server 2. So sánh với ground truth 3. Tính accuracy metrics 4. Có thể tinh chỉnh hyperparameters và retrain Happy training! 🚀