201 lines
5.2 KiB
Markdown
201 lines
5.2 KiB
Markdown
# Cloud Removal Model Upload Feature
|
|
|
|
## Overview
|
|
Added functionality to upload and use custom deep learning cloud removal models (.pth files) during prediction.
|
|
|
|
## Features Implemented
|
|
|
|
### 1. API Endpoints
|
|
|
|
#### Upload Cloud Removal Model
|
|
```
|
|
POST /api/cloud-removal/upload
|
|
```
|
|
- Upload `.pth` cloud removal model files
|
|
- Validates file extension (.pth only)
|
|
- Security checks for filename
|
|
- Returns file info (name, size)
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -X POST -F "file=@cloud_removal_unet_best.pth" \
|
|
http://localhost:8000/api/cloud-removal/upload
|
|
```
|
|
|
|
#### List Cloud Removal Models
|
|
```
|
|
GET /api/cloud-removal/models
|
|
```
|
|
Already existing - lists all `.pth` models in `model_train/` directory
|
|
|
|
#### Delete Cloud Removal Model
|
|
```
|
|
DELETE /api/cloud-removal/models/{filename}
|
|
```
|
|
Already existing - deletes a specific cloud removal model
|
|
|
|
### 2. Prediction Configuration Updates
|
|
|
|
#### PredictionConfig
|
|
Added new optional field:
|
|
```python
|
|
cloud_removal_model: Optional[str] = None # .pth filename
|
|
```
|
|
|
|
#### PredictionWithNDVIConfig
|
|
Added new optional field:
|
|
```python
|
|
cloud_removal_model: Optional[str] = None # .pth filename
|
|
```
|
|
|
|
### 3. Prediction Function Integration
|
|
|
|
The `run_prediction()` function now:
|
|
1. Accepts `cloud_removal_model` parameter
|
|
2. Passes model path to `process_cloud_removal()`
|
|
3. Logs which model is being used
|
|
|
|
**Code:**
|
|
```python
|
|
cloud_removal_method = config.cloud_removal_method
|
|
cloud_removal_model = config.cloud_removal_model
|
|
|
|
s2_data, cloud_metadata = process_cloud_removal(
|
|
s2_data=s2_data,
|
|
method=cloud_removal_method,
|
|
model_path=f"model_train/{cloud_removal_model}" if cloud_removal_model else None,
|
|
verbose=True
|
|
)
|
|
```
|
|
|
|
### 4. Web Interface Updates
|
|
|
|
#### Upload Button
|
|
- Added file input in "Deep Learning" cloud removal section
|
|
- Upload button appears when "Deep Learning" method is selected
|
|
- Real-time upload status feedback
|
|
- Auto-refreshes model list after successful upload
|
|
|
|
#### Model Selection
|
|
- Dropdown shows all available `.pth` models
|
|
- Auto-selects newly uploaded model
|
|
- Shows model metadata (epoch, loss)
|
|
|
|
## Usage Guide
|
|
|
|
### Step 1: Train or Obtain a Cloud Removal Model
|
|
Train using the cloud training interface or obtain a pre-trained `.pth` model.
|
|
|
|
### Step 2: Upload Model
|
|
1. Go to Prediction Interface
|
|
2. Scroll to "Cloud Removal Method" section
|
|
3. Select "Deep Learning (U-Net)" from dropdown
|
|
4. Model upload section appears
|
|
5. Click "📤 Upload Cloud Removal Model (.pth)"
|
|
6. Select your `.pth` file
|
|
7. Wait for upload confirmation
|
|
|
|
### Step 3: Use Model in Prediction
|
|
1. The uploaded model is automatically selected
|
|
2. Configure other prediction parameters (bbox, dates, etc.)
|
|
3. Click "🚀 Start Prediction (với NDVI)"
|
|
4. The system will use your custom model for cloud removal
|
|
|
|
## File Structure
|
|
```
|
|
model_train/
|
|
├── cloud_removal_unet_best.pth # User uploaded
|
|
├── cloud_removal_unet_epoch_10.pth # User uploaded
|
|
├── model_mobilenet-lraspp_*.joblib # Land classification models
|
|
└── ...
|
|
```
|
|
|
|
## API Request Example
|
|
|
|
### Using Uploaded Model
|
|
```json
|
|
{
|
|
"model_filename": "model_mobilenet-lraspp_20260105_225459.joblib",
|
|
"min_lon": 105.80,
|
|
"min_lat": 10.00,
|
|
"max_lon": 105.82,
|
|
"max_lat": 10.02,
|
|
"start_date": "2024-01-15",
|
|
"end_date": "2024-01-17",
|
|
"max_scenes": 3,
|
|
"cloud_cover": 30,
|
|
"resolution": 20,
|
|
"use_gpu": true,
|
|
"export_ndvi": true,
|
|
"export_classification": true,
|
|
"cloud_removal_method": "deep",
|
|
"cloud_removal_model": "cloud_removal_unet_best.pth"
|
|
}
|
|
```
|
|
|
|
### Without Custom Model (Classical Methods)
|
|
```json
|
|
{
|
|
...
|
|
"cloud_removal_method": "hybrid",
|
|
"cloud_removal_model": null
|
|
}
|
|
```
|
|
|
|
## Security Features
|
|
- Filename validation (no path traversal)
|
|
- File extension validation (.pth only)
|
|
- File existence checks
|
|
- Duplicate filename detection
|
|
|
|
## Error Handling
|
|
- Invalid file type → 400 Bad Request
|
|
- Duplicate filename → 400 Bad Request
|
|
- Upload failure → 500 Internal Server Error
|
|
- Missing model when "deep" selected → Falls back to "hybrid" method
|
|
|
|
## Notes
|
|
- Uploaded models are stored in `model_train/` directory
|
|
- Models must be PyTorch `.pth` files
|
|
- Compatible with `cloud_removal.py` module
|
|
- Works with both `/api/prediction/start` and `/api/predict/with-ndvi` endpoints
|
|
|
|
## Testing
|
|
|
|
### Test Upload
|
|
```bash
|
|
# Upload a model
|
|
curl -X POST -F "file=@my_cloud_model.pth" \
|
|
http://localhost:8000/api/cloud-removal/upload
|
|
|
|
# List models
|
|
curl http://localhost:8000/api/cloud-removal/models
|
|
|
|
# Delete model
|
|
curl -X DELETE \
|
|
http://localhost:8000/api/cloud-removal/models/my_cloud_model.pth
|
|
```
|
|
|
|
### Test Prediction
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/predict/with-ndvi \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model_filename": "model_mobilenet-lraspp_20260105_225459.joblib",
|
|
"min_lon": 105.80, "min_lat": 10.00,
|
|
"max_lon": 105.82, "max_lat": 10.02,
|
|
"start_date": "2024-01-15", "end_date": "2024-01-17",
|
|
"max_scenes": 2, "cloud_cover": 30, "resolution": 20,
|
|
"use_gpu": false, "export_ndvi": true,
|
|
"cloud_removal_method": "deep",
|
|
"cloud_removal_model": "cloud_removal_unet_best.pth"
|
|
}'
|
|
```
|
|
|
|
## Future Enhancements
|
|
- Model metadata display (architecture, training date)
|
|
- Model validation on upload
|
|
- Multiple model format support (.pt, .onnx)
|
|
- Model performance metrics
|
|
- Batch upload support
|