hoàn thành chức năng remove cloud train
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user