hoàn thành chức năng tính ndvi analysys 2 màn hình
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
# HƯỚNG DẪN SỬ DỤNG HỆ THỐNG MỚI
|
||||
|
||||
## Tổng quan
|
||||
|
||||
Hệ thống đã được cập nhật để chuẩn hóa việc trích xuất features giữa training và prediction, sử dụng module `feature_extractor.py`.
|
||||
|
||||
## Các thành phần mới
|
||||
|
||||
### 1. feature_extractor.py
|
||||
Module chuẩn hóa việc trích xuất features với 3 modes:
|
||||
|
||||
- **simple**: 3 features cơ bản
|
||||
- NDVI_mean
|
||||
- VH_db_mean
|
||||
- VV_db_mean
|
||||
|
||||
- **temporal**: 39+ features time-series
|
||||
- NDVI_t1, NDVI_t2, ..., NDVI_tn
|
||||
- NDWI_t1, NDWI_t2, ..., NDWI_tn
|
||||
- NDBI_t1, NDBI_t2, ..., NDBI_tn
|
||||
- VH_db_mean, VV_db_mean, VH_VV_ratio
|
||||
|
||||
- **extended**: 15 features với statistics
|
||||
- NDVI_mean, NDVI_std, NDVI_min, NDVI_max
|
||||
- NDWI_mean, NDWI_std, NDWI_min, NDWI_max
|
||||
- NDBI_mean, NDBI_std, NDBI_min, NDBI_max
|
||||
- VH_db_mean, VV_db_mean, VH_VV_ratio
|
||||
|
||||
### 2. train_module.py (Đã cập nhật)
|
||||
- Thêm tham số `feature_mode` (default='simple')
|
||||
- Sử dụng FeatureExtractor để extract features
|
||||
- Lưu `feature_mode` vào metadata của model
|
||||
- Load đúng bands Sentinel-2 theo feature mode
|
||||
|
||||
### 3. api_server.py (Cần cập nhật thủ công)
|
||||
File này quá lớn để tự động replace. Cần thay thế hàm `run_prediction` bằng version mới trong `run_prediction_new.py`.
|
||||
|
||||
## Cách sử dụng
|
||||
|
||||
### Training với feature modes khác nhau
|
||||
|
||||
#### 1. Simple Mode (Mặc định - Nhanh nhất)
|
||||
```python
|
||||
from train_module import train_model
|
||||
|
||||
result = train_model(
|
||||
bbox=[105.6, 9.3, 106.2, 9.8],
|
||||
time_range='2023-03-01/2023-05-31',
|
||||
max_scenes=12,
|
||||
feature_mode='simple', # 3 features
|
||||
model_type='xgboost',
|
||||
use_cache=True
|
||||
)
|
||||
```
|
||||
|
||||
#### 2. Temporal Mode (Cho model_odc.joblib)
|
||||
```python
|
||||
result = train_model(
|
||||
bbox=[105.6, 9.3, 106.2, 9.8],
|
||||
time_range='2023-03-01/2023-05-31',
|
||||
max_scenes=12,
|
||||
feature_mode='temporal', # 39+ features
|
||||
model_type='random_forest',
|
||||
use_cache=True
|
||||
)
|
||||
```
|
||||
|
||||
#### 3. Extended Mode (Cân bằng speed/accuracy)
|
||||
```python
|
||||
result = train_model(
|
||||
bbox=[105.6, 9.3, 106.2, 9.8],
|
||||
time_range='2023-03-01/2023-05-31',
|
||||
max_scenes=12,
|
||||
feature_mode='extended', # 15 features
|
||||
model_type='xgboost',
|
||||
use_cache=True
|
||||
)
|
||||
```
|
||||
|
||||
### Prediction
|
||||
Prediction sẽ tự động detect feature_mode từ model metadata và sử dụng FeatureExtractor tương ứng.
|
||||
|
||||
```python
|
||||
# Prediction sẽ tự động:
|
||||
# 1. Load model metadata
|
||||
# 2. Đọc feature_mode từ metadata
|
||||
# 3. Khởi tạo FeatureExtractor với mode tương ứng
|
||||
# 4. Extract features giống như training
|
||||
# 5. Predict
|
||||
```
|
||||
|
||||
## Tạo metadata cho model_odc.joblib
|
||||
|
||||
Model hiện tại `model_odc.joblib` được train với 39 features (temporal mode) nhưng chưa có metadata. Tạo metadata:
|
||||
|
||||
```bash
|
||||
python create_odc_metadata.py
|
||||
```
|
||||
|
||||
File này sẽ tạo `model_train/model_odc_info.json` với:
|
||||
- n_features: 39
|
||||
- feature_mode: "temporal"
|
||||
- features: list of 39 feature names
|
||||
|
||||
## So sánh các modes
|
||||
|
||||
| Feature Mode | N Features | Training Time | Accuracy | Use Case |
|
||||
|-------------|-----------|---------------|----------|----------|
|
||||
| simple | 3 | Nhanh nhất | Trung bình | Test nhanh, dataset nhỏ |
|
||||
| extended | 15 | Trung bình | Tốt | Cân bằng speed/accuracy |
|
||||
| temporal | 39+ | Chậm nhất | Tốt nhất | Production, dataset lớn |
|
||||
|
||||
## Lưu ý quan trọng
|
||||
|
||||
### 1. Bands được load
|
||||
- **simple**: B04, B08, SCL
|
||||
- **temporal/extended**: B02, B03, B04, B08, B11, SCL
|
||||
|
||||
### 2. Cache compatibility
|
||||
Cache cũ từ trước khi cập nhật sẽ KHÔNG tương thích vì:
|
||||
- Không có field `feature_mode`
|
||||
- Features có thể không match
|
||||
|
||||
**Giải pháp**: Xóa cache cũ
|
||||
```bash
|
||||
rm -rf dataset_cache/*
|
||||
```
|
||||
|
||||
### 3. Model compatibility
|
||||
- Models cũ (trước cập nhật) sẽ được coi là `feature_mode='simple'` nếu không có metadata
|
||||
- Models mới sẽ có field `feature_mode` trong metadata
|
||||
|
||||
## Workflow đề xuất
|
||||
|
||||
### Bước 1: Xóa cache cũ
|
||||
```bash
|
||||
rm -rf dataset_cache/*
|
||||
```
|
||||
|
||||
### Bước 2: Tạo metadata cho model_odc.joblib
|
||||
```bash
|
||||
python create_odc_metadata.py
|
||||
```
|
||||
|
||||
### Bước 3: Cập nhật api_server.py
|
||||
Thay thế hàm `run_prediction` (line 834-1295) với nội dung từ `run_prediction_new.py`
|
||||
|
||||
### Bước 4: Test training với simple mode
|
||||
```bash
|
||||
# Qua web interface hoặc
|
||||
python test_training_simple.py
|
||||
```
|
||||
|
||||
### Bước 5: Test prediction với model vừa train
|
||||
```bash
|
||||
# Qua web interface
|
||||
# Model sẽ tự động detect feature_mode và extract đúng features
|
||||
```
|
||||
|
||||
### Bước 6: Test với temporal mode (nếu cần accuracy cao)
|
||||
```bash
|
||||
python test_training_temporal.py
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Lỗi: "feature_mode not found in metadata"
|
||||
- Model cũ chưa có metadata
|
||||
- **Giải pháp**: Hệ thống tự động fallback về 'simple' mode
|
||||
|
||||
### Lỗi: "Expected X features but got Y"
|
||||
- Feature extraction không match với training
|
||||
- **Giải pháp**: Kiểm tra model metadata, đảm bảo feature_mode đúng
|
||||
|
||||
### Lỗi: "B11 band not found"
|
||||
- Sentinel-2 scene thiếu SWIR band
|
||||
- **Giải pháp**: Hệ thống tự động fallback về B02
|
||||
|
||||
## API Changes
|
||||
|
||||
### TrainingConfig (Mới)
|
||||
```python
|
||||
class TrainingConfig(BaseModel):
|
||||
# ... existing fields ...
|
||||
feature_mode: str = "simple" # NEW: 'simple', 'temporal', 'extended'
|
||||
```
|
||||
|
||||
### Model Metadata (Mới)
|
||||
```json
|
||||
{
|
||||
"feature_mode": "temporal",
|
||||
"features": ["NDVI_t1", "NDVI_t2", ...],
|
||||
"n_features": 39,
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
/home/x79/remote-sensing/
|
||||
├── feature_extractor.py # NEW: Core feature extraction module
|
||||
├── train_module.py # UPDATED: Uses FeatureExtractor
|
||||
├── api_server.py # NEEDS UPDATE: run_prediction function
|
||||
├── run_prediction_new.py # NEW: Updated run_prediction code
|
||||
├── create_odc_metadata.py # NEW: Generate metadata for model_odc.joblib
|
||||
├── SYSTEM_UPDATE_GUIDE.md # This file
|
||||
└── model_train/
|
||||
├── model_odc.joblib # Existing 39-feature model
|
||||
├── model_odc_info.json # TO CREATE: Metadata file
|
||||
└── ...
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ✅ Created feature_extractor.py
|
||||
2. ✅ Updated train_module.py
|
||||
3. ⏳ Update api_server.py (manual)
|
||||
4. ⏳ Create metadata for model_odc.joblib
|
||||
5. ⏳ Test full workflow
|
||||
|
||||
## Contact & Support
|
||||
|
||||
Nếu gặp vấn đề, kiểm tra:
|
||||
1. feature_extractor.py có import được không
|
||||
2. Model metadata có field `feature_mode` chưa
|
||||
3. Cache đã được xóa chưa
|
||||
4. api_server.py đã cập nhật run_prediction chưa
|
||||
Reference in New Issue
Block a user