update train file nam
This commit is contained in:
+3
-3
@@ -854,8 +854,8 @@
|
|||||||
"TRAINING DATA SETUP\n",
|
"TRAINING DATA SETUP\n",
|
||||||
"======================================================================\n",
|
"======================================================================\n",
|
||||||
"\n",
|
"\n",
|
||||||
"[1] Loading training data: train/ST_training data_updated_1130points_new.shp\n",
|
"[1] Loading training data: train/ST_training_data_updated_1130points_new.shp\n",
|
||||||
" ❌ Error: train/ST_training data_updated_1130points_new.shp: No such file or directory\n",
|
" ❌ Error: train/ST_training_data_updated_1130points_new.shp: No such file or directory\n",
|
||||||
"\n",
|
"\n",
|
||||||
"[2] Label mapping:\n",
|
"[2] Label mapping:\n",
|
||||||
" 0: Lua tom\n",
|
" 0: Lua tom\n",
|
||||||
@@ -878,7 +878,7 @@
|
|||||||
"print(\"=\"*70)\n",
|
"print(\"=\"*70)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Load training points\n",
|
"# Load training points\n",
|
||||||
"train_path = \"train/ST_training data_updated_1130points_new.shp\"\n",
|
"train_path = \"train/ST_training_data_updated_1130points_new.shp\"\n",
|
||||||
"print(f\"\\n[1] Loading training data: {train_path}\")\n",
|
"print(f\"\\n[1] Loading training data: {train_path}\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
"try:\n",
|
"try:\n",
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ CACHE_DIR = "dataset_cache"
|
|||||||
CACHE_FILE = f"{CACHE_DIR}/sentinel2_timeseries_40scenes.nc"
|
CACHE_FILE = f"{CACHE_DIR}/sentinel2_timeseries_40scenes.nc"
|
||||||
|
|
||||||
# --- Training data ---
|
# --- Training data ---
|
||||||
TRAIN_PATH = "train/ST_training data_updated_1130points_new.shp"
|
TRAIN_PATH = "train/ST_training_data_updated_1130points_new.shp"
|
||||||
|
|
||||||
# --- Features sử dụng để train ---
|
# --- Features sử dụng để train ---
|
||||||
AVAILABLE_FEATURES = [
|
AVAILABLE_FEATURES = [
|
||||||
|
|||||||
@@ -2854,7 +2854,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 11,
|
"execution_count": null,
|
||||||
"id": "d2585562-88aa-4c7d-bf70-1f6affcf65d4",
|
"id": "d2585562-88aa-4c7d-bf70-1f6affcf65d4",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
@@ -2862,7 +2862,7 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"## cấu hình bộ dữ liệu điểm huấn luyện mô hình (train file)\n",
|
"## cấu hình bộ dữ liệu điểm huấn luyện mô hình (train file)\n",
|
||||||
"train_path = \"train/ST_training data_updated_1130points_new.shp\" # đường dẫn shp file train\n",
|
"train_path = \"train/ST_training_data_updated_1130points_new.shp\" # đường dẫn shp file train\n",
|
||||||
"\n",
|
"\n",
|
||||||
"## load dữ liệu điểm huấn luyện mô hình (train file)\n",
|
"## load dữ liệu điểm huấn luyện mô hình (train file)\n",
|
||||||
"train = load_train_data(train_path)\n",
|
"train = load_train_data(train_path)\n",
|
||||||
|
|||||||
@@ -428,55 +428,6 @@
|
|||||||
"plt.tight_layout()\n",
|
"plt.tight_layout()\n",
|
||||||
"plt.show()\n"
|
"plt.show()\n"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "28f87d0e",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"import json\n",
|
|
||||||
"from datetime import datetime\n",
|
|
||||||
"\n",
|
|
||||||
"# ── Lưu mô hình PyTorch ────────────────────────────────────────────────────────\n",
|
|
||||||
"model_path = \"model_mobilenet_land_use.pth\"\n",
|
|
||||||
"torch.save(model.state_dict(), model_path)\n",
|
|
||||||
"print(f\"✅ Model saved → {model_path}\")\n",
|
|
||||||
"\n",
|
|
||||||
"# ── Lưu thông tin mô hình ──────────────────────────────────────────────────────\n",
|
|
||||||
"info = {\n",
|
|
||||||
" \"model_type\": \"MobileNetV3_LR-ASPP\",\n",
|
|
||||||
" \"n_features\": n_features,\n",
|
|
||||||
" \"n_classes\": n_classes,\n",
|
|
||||||
" \"learning_rate\": LEARNING_RATE,\n",
|
|
||||||
" \"batch_size\": BATCH_SIZE,\n",
|
|
||||||
" \"max_epochs\": N_EPOCHS,\n",
|
|
||||||
" \"early_stopping_patience\": PATIENCE,\n",
|
|
||||||
" \"optimizer\": \"Adam\",\n",
|
|
||||||
" \"scheduler\": \"ReduceLROnPlateau(factor=0.5, patience=5)\",\n",
|
|
||||||
" \"class_weight\": \"balanced\",\n",
|
|
||||||
" \"label_mapping\": label_mapping,\n",
|
|
||||||
" \"test_accuracy\": float(acc),\n",
|
|
||||||
" \"train_samples\": len(X_train_np),\n",
|
|
||||||
" \"val_samples\": len(X_val_np),\n",
|
|
||||||
" \"test_samples\": len(X_test_np),\n",
|
|
||||||
" \"saved_at\": datetime.now().isoformat(),\n",
|
|
||||||
"}\n",
|
|
||||||
"info_path = \"model_mobilenet_land_use_info.json\"\n",
|
|
||||||
"with open(info_path, \"w\") as f:\n",
|
|
||||||
" json.dump(info, f, indent=2, ensure_ascii=False)\n",
|
|
||||||
"print(f\"✅ Info saved → {info_path}\")\n",
|
|
||||||
"print(json.dumps(info, indent=2, ensure_ascii=False))\n",
|
|
||||||
"\n",
|
|
||||||
"# ── Đóng kết nối Dask ──────────────────────────────────────────────────────────\n",
|
|
||||||
"try:\n",
|
|
||||||
" client.close()\n",
|
|
||||||
" cluster.close()\n",
|
|
||||||
" print(\"✅ Dask cluster closed.\")\n",
|
|
||||||
"except Exception:\n",
|
|
||||||
" pass\n"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"## Chuẩn bị dữ liệu train\n",
|
"## Chuẩn bị dữ liệu train\n",
|
||||||
"train_path = \"train/ST_training data_updated_1130points_new.shp\"\n",
|
"train_path = \"train/ST_training_data_updated_1130points_new.shp\"\n",
|
||||||
"train = load_train_data(train_path)\n",
|
"train = load_train_data(train_path)\n",
|
||||||
"train.head()\n",
|
"train.head()\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"## ── Chuẩn bị dữ liệu train ───────────────────────────────────────────────────\n",
|
"## ── Chuẩn bị dữ liệu train ───────────────────────────────────────────────────\n",
|
||||||
"train_path = \"train/ST_training data_updated_1130points_new.shp\"\n",
|
"train_path = \"train/ST_training_data_updated_1130points_new.shp\"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"train = load_train_data(train_path)\n",
|
"train = load_train_data(train_path)\n",
|
||||||
"train.head()\n",
|
"train.head()\n",
|
||||||
|
|||||||
@@ -2854,7 +2854,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 11,
|
"execution_count": null,
|
||||||
"id": "d2585562-88aa-4c7d-bf70-1f6affcf65d4",
|
"id": "d2585562-88aa-4c7d-bf70-1f6affcf65d4",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"tags": []
|
"tags": []
|
||||||
@@ -2862,7 +2862,7 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"## cấu hình bộ dữ liệu điểm huấn luyện mô hình (train file)\n",
|
"## cấu hình bộ dữ liệu điểm huấn luyện mô hình (train file)\n",
|
||||||
"train_path = \"train/ST_training data_updated_1130points_new.shp\" # đường dẫn shp file train\n",
|
"train_path = \"train/ST_training_data_updated_1130points_new.shp\" # đường dẫn shp file train\n",
|
||||||
"\n",
|
"\n",
|
||||||
"## load dữ liệu điểm huấn luyện mô hình (train file)\n",
|
"## load dữ liệu điểm huấn luyện mô hình (train file)\n",
|
||||||
"train = load_train_data(train_path)\n",
|
"train = load_train_data(train_path)\n",
|
||||||
|
|||||||
@@ -1727,7 +1727,7 @@
|
|||||||
"FEATURE EXTRACTION\n",
|
"FEATURE EXTRACTION\n",
|
||||||
"======================================================================\n",
|
"======================================================================\n",
|
||||||
"\n",
|
"\n",
|
||||||
"[1] Loading training data from: train/ST_training data_updated_1130points_new.shp\n",
|
"[1] Loading training data from: train/ST_training_data_updated_1130points_new.shp\n",
|
||||||
"✅ Loaded 1130 training points\n",
|
"✅ Loaded 1130 training points\n",
|
||||||
" Available columns: ['No', 'X', 'Y', 'LU2022', 'Hientrang', 'HT_code', 'geometry']\n",
|
" Available columns: ['No', 'X', 'Y', 'LU2022', 'Hientrang', 'HT_code', 'geometry']\n",
|
||||||
" Using label column: 'HT_code'\n",
|
" Using label column: 'HT_code'\n",
|
||||||
@@ -1769,7 +1769,7 @@
|
|||||||
"# Load training shapefile\n",
|
"# Load training shapefile\n",
|
||||||
"import geopandas as gpd\n",
|
"import geopandas as gpd\n",
|
||||||
"\n",
|
"\n",
|
||||||
"train_path = 'train/ST_training data_updated_1130points_new.shp'\n",
|
"train_path = 'train/ST_training_data_updated_1130points_new.shp'\n",
|
||||||
"print(f\"\\n[1] Loading training data from: {train_path}\")\n",
|
"print(f\"\\n[1] Loading training data from: {train_path}\")\n",
|
||||||
"train_gdf = gpd.read_file(train_path)\n",
|
"train_gdf = gpd.read_file(train_path)\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ DEFAULT_LABEL_MAPPING = {
|
|||||||
{
|
{
|
||||||
"files": [
|
"files": [
|
||||||
{
|
{
|
||||||
"filename": "ST_training data_updated_1130points_new.shp",
|
"filename": "ST_training_data_updated_1130points_new.shp",
|
||||||
"path": "train/...",
|
"path": "train/...",
|
||||||
"size_mb": 0.15,
|
"size_mb": 0.15,
|
||||||
"point_count": 1130,
|
"point_count": 1130,
|
||||||
@@ -110,7 +110,7 @@ DEFAULT_LABEL_MAPPING = {
|
|||||||
|
|
||||||
Features:
|
Features:
|
||||||
- Dropdown chọn shapefile từ thư mục `/train`
|
- Dropdown chọn shapefile từ thư mục `/train`
|
||||||
- Tự động load default: `ST_training data_updated_1130points_new.shp`
|
- Tự động load default: `ST_training_data_updated_1130points_new.shp`
|
||||||
- Hiển thị thông tin: số điểm, label column, số lớp, bbox
|
- Hiển thị thông tin: số điểm, label column, số lớp, bbox
|
||||||
|
|
||||||
#### ✅ Thêm phần hiển thị thông tin Shapefile:
|
#### ✅ Thêm phần hiển thị thông tin Shapefile:
|
||||||
@@ -149,7 +149,7 @@ Features:
|
|||||||
|
|
||||||
#### ✅ Cập nhật form submission:
|
#### ✅ Cập nhật form submission:
|
||||||
- Thêm `training_shapefile` vào config
|
- Thêm `training_shapefile` vào config
|
||||||
- Default: `train/ST_training data_updated_1130points_new.shp`
|
- Default: `train/ST_training_data_updated_1130points_new.shp`
|
||||||
|
|
||||||
#### ✅ Event listeners:
|
#### ✅ Event listeners:
|
||||||
```javascript
|
```javascript
|
||||||
@@ -252,7 +252,7 @@ curl http://localhost:8000/api/training/files
|
|||||||
curl http://localhost:8000/api/training/labels
|
curl http://localhost:8000/api/training/labels
|
||||||
|
|
||||||
# Get shapefile labels
|
# Get shapefile labels
|
||||||
curl "http://localhost:8000/api/training/shapefile/ST_training data_updated_1130points_new.shp/labels"
|
curl "http://localhost:8000/api/training/shapefile/ST_training_data_updated_1130points_new.shp/labels"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Check Browser Console:
|
### Check Browser Console:
|
||||||
@@ -265,8 +265,8 @@ curl "http://localhost:8000/api/training/shapefile/ST_training data_updated_1130
|
|||||||
## 📝 Notes
|
## 📝 Notes
|
||||||
|
|
||||||
1. **Training shapefile path format**:
|
1. **Training shapefile path format**:
|
||||||
- Frontend select value: `ST_training data_updated_1130points_new.shp`
|
- Frontend select value: `ST_training_data_updated_1130points_new.shp`
|
||||||
- Backend receives: `train/ST_training data_updated_1130points_new.shp`
|
- Backend receives: `train/ST_training_data_updated_1130points_new.shp`
|
||||||
- Auto-prepend `train/` prefix in form submission
|
- Auto-prepend `train/` prefix in form submission
|
||||||
|
|
||||||
2. **Label mapping**:
|
2. **Label mapping**:
|
||||||
|
|||||||
+3
-3
@@ -3807,7 +3807,7 @@ async def change_detection_predict_workflow(
|
|||||||
|
|
||||||
# --- STEP 6: COMPARE WITH GROUND TRUTH ---
|
# --- STEP 6: COMPARE WITH GROUND TRUTH ---
|
||||||
print("[CHANGE DETECTION] Comparing with ground truth...")
|
print("[CHANGE DETECTION] Comparing with ground truth...")
|
||||||
gt_shapefile = "train/ST_training data_updated_1130points_new.shp"
|
gt_shapefile = "train/ST_training_data_updated_1130points_new.shp"
|
||||||
gt_raster = rasterize_ground_truth(gt_shapefile, (height, width), bbox, class_column="class")
|
gt_raster = rasterize_ground_truth(gt_shapefile, (height, width), bbox, class_column="class")
|
||||||
|
|
||||||
# Calculate changes
|
# Calculate changes
|
||||||
@@ -3912,7 +3912,7 @@ async def change_detection_workflow(request: ChangeDetectionWorkflowRequest):
|
|||||||
pred_transform = pred_ds.transform
|
pred_transform = pred_ds.transform
|
||||||
|
|
||||||
# Rasterize ground truth training data
|
# Rasterize ground truth training data
|
||||||
gt_shapefile = "train/ST_training data_updated_1130points_new.shp"
|
gt_shapefile = "train/ST_training_data_updated_1130points_new.shp"
|
||||||
gt_raster = rasterize_ground_truth(gt_shapefile, pred_arr.shape, bbox, class_column="class")
|
gt_raster = rasterize_ground_truth(gt_shapefile, pred_arr.shape, bbox, class_column="class")
|
||||||
|
|
||||||
# Calculate change detection
|
# Calculate change detection
|
||||||
@@ -4700,7 +4700,7 @@ async def predict_with_ndvi(config: PredictionWithNDVIConfig, background_tasks:
|
|||||||
change_map = None
|
change_map = None
|
||||||
try:
|
try:
|
||||||
# Use training shapefile as ground truth
|
# Use training shapefile as ground truth
|
||||||
gt_shapefile = "train/ST_training data_updated_1130points_new.shp"
|
gt_shapefile = "train/ST_training_data_updated_1130points_new.shp"
|
||||||
gt_raster = rasterize_ground_truth(gt_shapefile, (height, width), bbox, class_column="class")
|
gt_raster = rasterize_ground_truth(gt_shapefile, (height, width), bbox, class_column="class")
|
||||||
# Compare prediction and ground truth
|
# Compare prediction and ground truth
|
||||||
mask_valid = (gt_raster >= 0) & (prediction_raster >= 0)
|
mask_valid = (gt_raster >= 0) & (prediction_raster >= 0)
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ File .tif (mỗi pixel = 1 mã loại đất)
|
|||||||
- **Tổng cộng**: ~39 features cho mỗi pixel
|
- **Tổng cộng**: ~39 features cho mỗi pixel
|
||||||
|
|
||||||
### Labels (Nhãn):
|
### Labels (Nhãn):
|
||||||
- Được lấy từ shapefile training: `train/ST_training data_updated_1130points_new.shp`
|
- Được lấy từ shapefile training: `train/ST_training_data_updated_1130points_new.shp`
|
||||||
- 1130 điểm mẫu đã được gắn nhãn thủ công bởi chuyên gia
|
- 1130 điểm mẫu đã được gắn nhãn thủ công bởi chuyên gia
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ def test_training_files():
|
|||||||
print(f"❌ Error: {response.status_code}")
|
print(f"❌ Error: {response.status_code}")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
def test_shapefile_labels(filename="ST_training data_updated_1130points_new.shp"):
|
def test_shapefile_labels(filename="ST_training_data_updated_1130points_new.shp"):
|
||||||
"""Test /api/training/shapefile/{filename}/labels endpoint"""
|
"""Test /api/training/shapefile/{filename}/labels endpoint"""
|
||||||
print("=" * 70)
|
print("=" * 70)
|
||||||
print(f"TEST 3: Getting labels from shapefile: {filename}")
|
print(f"TEST 3: Getting labels from shapefile: {filename}")
|
||||||
|
|||||||
+1
-1
@@ -359,7 +359,7 @@ def train_model(
|
|||||||
max_scenes=12,
|
max_scenes=12,
|
||||||
cloud_cover=30,
|
cloud_cover=30,
|
||||||
resolution=20,
|
resolution=20,
|
||||||
training_shapefile='train/ST_training data_updated_1130points_new.shp',
|
training_shapefile='train/ST_training_data_updated_1130points_new.shp',
|
||||||
model_type='xgboost',
|
model_type='xgboost',
|
||||||
n_estimators=100,
|
n_estimators=100,
|
||||||
max_depth=20,
|
max_depth=20,
|
||||||
|
|||||||
@@ -804,7 +804,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Select default shapefile
|
// Select default shapefile
|
||||||
const defaultFile = 'ST_training data_updated_1130points_new.shp';
|
const defaultFile = 'ST_training_data_updated_1130points_new.shp';
|
||||||
const defaultOption = Array.from(select.options).find(opt => opt.value === defaultFile);
|
const defaultOption = Array.from(select.options).find(opt => opt.value === defaultFile);
|
||||||
if (defaultOption) {
|
if (defaultOption) {
|
||||||
select.value = defaultFile;
|
select.value = defaultFile;
|
||||||
@@ -1074,7 +1074,7 @@
|
|||||||
|
|
||||||
// Get selected training shapefile
|
// Get selected training shapefile
|
||||||
const selectedShapefile = document.getElementById('trainingShapefile').value;
|
const selectedShapefile = document.getElementById('trainingShapefile').value;
|
||||||
const trainingShapefile = selectedShapefile || 'train/ST_training data_updated_1130points_new.shp';
|
const trainingShapefile = selectedShapefile || 'train/ST_training_data_updated_1130points_new.shp';
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
min_lon: parseFloat(document.getElementById('minLon').value),
|
min_lon: parseFloat(document.getElementById('minLon').value),
|
||||||
|
|||||||
Reference in New Issue
Block a user