Files
remote-sensing/CLOUD_REMOVAL_UPLOAD_GUIDE.md
T
2026-01-26 13:44:55 +07:00

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