285 lines
7.1 KiB
Markdown
Executable File
285 lines
7.1 KiB
Markdown
Executable File
# Model Upload Guide
|
|
|
|
## Overview
|
|
This system now supports uploading custom models for both **Cloud Removal** and **Land Classification** tasks with full metadata tracking.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
remote-sensing/
|
|
├── cloud_removal_model/ # Cloud removal models (U-Net, GAN, etc.)
|
|
│ ├── *.pth # PyTorch model files
|
|
│ └── *.json # Metadata sidecar files
|
|
├── land_classification_model/ # Land use classification models
|
|
│ ├── *.pth, *.pkl, *.joblib # Model files (various formats)
|
|
│ ├── *.h5, *.keras # TensorFlow/Keras models
|
|
│ └── *.json # Metadata sidecar files
|
|
└── model_train/ # Legacy training outputs (other models)
|
|
```
|
|
|
|
## Cloud Removal Model Upload
|
|
|
|
### Supported Format
|
|
- **File Extension**: `.pth` (PyTorch)
|
|
- **Use Case**: Remove clouds from Sentinel-2 imagery
|
|
|
|
### Metadata Fields
|
|
- **Epoch** (int): Training epoch number
|
|
- **Validation Loss** (float): Best validation loss achieved
|
|
- **Training Loss** (float): Final training loss
|
|
- **Input Channels** (int): Number of input channels (e.g., 6 for S2+S1)
|
|
- **Output Channels** (int): Number of output channels (e.g., 4 for RGBN)
|
|
- **Use Sentinel-1** (bool): Whether model uses SAR data
|
|
- **Description** (string): Optional notes about the model
|
|
|
|
### API Endpoint
|
|
```http
|
|
POST /api/cloud-removal/upload
|
|
Content-Type: multipart/form-data
|
|
|
|
{
|
|
"file": <binary>,
|
|
"epoch": 50,
|
|
"val_loss": 0.0134,
|
|
"train_loss": 0.0142,
|
|
"in_channels": 6,
|
|
"out_channels": 4,
|
|
"use_s1": true,
|
|
"description": "Trained on winter dataset"
|
|
}
|
|
```
|
|
|
|
### Example Metadata File
|
|
`cloud_removal_unet_winter.pth.json`:
|
|
```json
|
|
{
|
|
"filename": "cloud_removal_unet_winter.pth",
|
|
"epoch": 50,
|
|
"train_loss": 0.0142,
|
|
"val_loss": 0.0134,
|
|
"in_channels": 6,
|
|
"out_channels": 4,
|
|
"use_s1": true,
|
|
"description": "Trained on winter dataset, 50 epochs",
|
|
"uploaded_at": "2026-01-26T15:30:00"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Land Classification Model Upload
|
|
|
|
### Supported Formats
|
|
- **PyTorch**: `.pth`
|
|
- **Scikit-learn**: `.pkl`, `.joblib`
|
|
- **TensorFlow/Keras**: `.h5`, `.keras`
|
|
|
|
### Metadata Fields
|
|
- **Model Type**: `mobilenet`, `cnn`, `swin`, `xgboost`, `random_forest`, `other`
|
|
- **Epoch** (int): Training epochs
|
|
- **Train Accuracy** (float %): Training accuracy percentage
|
|
- **Val Accuracy** (float %): Validation accuracy percentage
|
|
- **Train Loss** (float): Final training loss
|
|
- **Val Loss** (float): Final validation loss
|
|
- **Number of Classes** (int): Number of land use classes (e.g., 10)
|
|
- **Input Size** (int): Input image dimension (e.g., 64x64)
|
|
- **Description** (string): Optional notes
|
|
|
|
### API Endpoint
|
|
```http
|
|
POST /api/land-classification/upload
|
|
Content-Type: multipart/form-data
|
|
|
|
{
|
|
"file": <binary>,
|
|
"model_type": "mobilenet",
|
|
"epoch": 100,
|
|
"train_accuracy": 95.5,
|
|
"val_accuracy": 93.2,
|
|
"train_loss": 0.12,
|
|
"val_loss": 0.18,
|
|
"num_classes": 10,
|
|
"input_size": 64,
|
|
"description": "MobileNetV2 trained on Mekong Delta"
|
|
}
|
|
```
|
|
|
|
### Example Metadata File
|
|
`mobilenet_mekong_v2.pth.json`:
|
|
```json
|
|
{
|
|
"filename": "mobilenet_mekong_v2.pth",
|
|
"model_type": "mobilenet",
|
|
"epoch": 100,
|
|
"train_accuracy": 95.5,
|
|
"val_accuracy": 93.2,
|
|
"train_loss": 0.12,
|
|
"val_loss": 0.18,
|
|
"num_classes": 10,
|
|
"input_size": 64,
|
|
"description": "MobileNetV2 trained on Mekong Delta dataset",
|
|
"uploaded_at": "2026-01-26T15:45:00"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Usage in Web Interface
|
|
|
|
### Cloud Removal Models
|
|
1. Navigate to **Prediction Interface**
|
|
2. Select **Cloud Removal Method** → "Deep Learning (U-Net)"
|
|
3. Click **📤 Upload Cloud Removal Model (.pth)**
|
|
4. Fill in metadata form
|
|
5. Click **✅ Upload with Metadata**
|
|
6. Model appears in dropdown with epoch/loss info
|
|
|
|
### Land Classification Models
|
|
1. Navigate to **Prediction Interface**
|
|
2. In **Model Selection** section
|
|
3. Click **📤 Upload Land Classification Model**
|
|
4. Fill in metadata form (model type, accuracy, etc.)
|
|
5. Click **✅ Upload with Metadata**
|
|
6. Model appears in main model dropdown
|
|
|
|
---
|
|
|
|
## API Reference
|
|
|
|
### List Models
|
|
|
|
**Cloud Removal:**
|
|
```http
|
|
GET /api/cloud-removal/models
|
|
```
|
|
|
|
**Land Classification:**
|
|
```http
|
|
GET /api/land-classification/models
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"models": [
|
|
{
|
|
"filename": "model.pth",
|
|
"epoch": 50,
|
|
"val_loss": 0.0134,
|
|
"size_mb": 356.2,
|
|
"has_metadata": true,
|
|
"created": 1706284800
|
|
}
|
|
],
|
|
"count": 1
|
|
}
|
|
```
|
|
|
|
### Delete Model
|
|
|
|
**Cloud Removal:**
|
|
```http
|
|
DELETE /api/cloud-removal/models/{filename}
|
|
```
|
|
|
|
**Land Classification:**
|
|
```http
|
|
DELETE /api/land-classification/models/{filename}
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Naming Convention**: Use descriptive names
|
|
- ✅ `cloud_removal_unet_winter_50ep.pth`
|
|
- ✅ `mobilenet_v2_mekong_acc93.pth`
|
|
- ❌ `model1.pth`
|
|
|
|
2. **Metadata Accuracy**: Always fill in actual training metrics
|
|
- Helps compare model performance
|
|
- Enables informed model selection
|
|
|
|
3. **Version Control**: Include version/date in description
|
|
- "v2.0 - Improved augmentation"
|
|
- "2026-01-15 - Fixed class imbalance"
|
|
|
|
4. **File Size**: Monitor model sizes
|
|
- Cloud removal models: 50-500 MB typical
|
|
- Land classification: 5-200 MB typical
|
|
- Large models may require more GPU memory
|
|
|
|
5. **Testing**: Always test uploaded model on small region first
|
|
- Verify predictions are reasonable
|
|
- Check for errors/crashes
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Upload Fails with "Already Exists"
|
|
- Model filename is duplicate
|
|
- Delete old model first or rename new one
|
|
|
|
### Model Shows Default Values (0, 0, 0)
|
|
- Server needs restart to load `Form(...)` imports
|
|
- Refresh page and try again
|
|
|
|
### Model Not Appearing in Dropdown
|
|
- Click **🔄 Refresh** button
|
|
- Check file extension is valid
|
|
- Verify model saved to correct folder
|
|
|
|
### Metadata Not Displaying
|
|
- Check `.json` file exists alongside model
|
|
- Verify JSON format is valid
|
|
- Look for server errors in terminal
|
|
|
|
---
|
|
|
|
## Migration from Old System
|
|
|
|
If you have models in `model_train/`:
|
|
|
|
1. **Cloud Removal Models**: Move to `cloud_removal_model/`
|
|
```bash
|
|
mv model_train/cloud_removal_*.pth cloud_removal_model/
|
|
mv model_train/*_unet*.pth cloud_removal_model/
|
|
mv model_train/*GAN*.pth cloud_removal_model/
|
|
```
|
|
|
|
2. **Land Classification Models**: Move to `land_classification_model/`
|
|
```bash
|
|
mv model_train/mobilenet*.pth land_classification_model/
|
|
mv model_train/cnn*.pth land_classification_model/
|
|
mv model_train/swin*.pth land_classification_model/
|
|
mv model_train/*.pkl land_classification_model/
|
|
```
|
|
|
|
3. **Create metadata files** by re-uploading through web interface
|
|
|
|
---
|
|
|
|
## Security Features
|
|
|
|
✅ **File Extension Validation**: Only allowed formats accepted
|
|
✅ **Path Traversal Prevention**: No `../` or `/` in filenames
|
|
✅ **Duplicate Detection**: Prevents overwriting existing models
|
|
✅ **Size Limits**: Prevents extremely large uploads
|
|
✅ **JSON Sanitization**: Metadata stored safely
|
|
|
|
---
|
|
|
|
## Future Enhancements
|
|
|
|
- [ ] Batch model upload
|
|
- [ ] Model versioning system
|
|
- [ ] Automated benchmarking
|
|
- [ ] Model comparison tool
|
|
- [ ] Export/import model configs
|
|
- [ ] Cloud storage integration
|
|
|
|
---
|
|
|
|
**Last Updated**: January 26, 2026
|