Files
remote-sensing/__pycache__/train_module.cpython-310.pyc
T

138 lines
12 KiB
Plaintext
Raw Normal View History

o
2025-12-14 18:26:25 +07:00
¤™>iEQã@dZddlZddlZddlZddlmZddl m
Z
2025-12-14 18:26:25 +07:00
ddl m Z m
Z
ddlmZddlmZddlmZdd lmZddlZdd
lmZddlZddlZddlZddlZdd lmZe d ¡z%ddlZddl m!Z!ddl"m!m#Z$ddl%m&Z&dd
2025-12-14 18:26:25 +07:00
l'm(Z(m)Z)dZ*Wne+y“dZ*e,dƒYnwGddde!j-ƒZ.ddl/Z/ddl0m1Z1ddl2m3Z4gd¢ddddddddddddddfddZ5dS) zy
Training module for land classification using Sentinel-2 and Sentinel-1 data
from Microsoft Planetary Computer STAC API
éN)Útrain_test_split)Ú LabelEncoder)Úclassification_reportÚconfusion_matrix)ÚRandomForestClassifier)ÚDecisionTreeClassifier)ÚSVC)Ú
XGBClassifier)Údatetime)ÚPathÚignore)Ú
TensorDatasetÚ
DataLoaderTFz8Warning: PyTorch not available. CNN model will not work.cs4eZdZfddZddZddZddZZS) Ú
CNNClassifierctt|ƒ ¡||_||_|dkr7d|_t |d¡|_t  d¡|_
t dd¡|_ t  d¡|_ t d|¡|_
dSd|_tjdd d
dd |_tjd d
|_tjd dd
dd |_tjd d
|_|d d d}t |d¡|_t  d¡|_t d|¡|_ dS)Fé@g333333Ó?é€gà?Téé é)Z in_channelsZ out_channelsÚ kernel_sizeÚpaddingé)r)ÚsuperrÚ__init__Ú
n_featuresÚ n_classesÚuse_convÚnnZLinearÚfc1ZDropoutÚdropout1Úfc2Údropout2Úfc3ZConv1dÚconv1Z MaxPool1dÚpool1Úconv2Úpool2Údropout)ÚselfrrZconv_output_size©Ú __class__©ú3/home/x79/CSIROBoeingPhase5-Vietnam/train_module.pyr's&   zCNNClassifier.__init__cC|jrFt|jƒdkr| d¡}t | |¡¡}| |¡}t | |¡¡}|  |¡}| 
|  d¡d¡}t |  |¡¡}| 
|¡}| |¡}|St|jƒdkrR| d¡}t |  |¡¡}| |¡}t | |¡¡}| |¡}| |¡}|S)Nrrréÿÿÿÿr)rÚlenÚshapeÚ unsqueezeÚFZrelur$r%r&r'ÚviewÚsizerr(r!Úsqueezer r"r#)r)Úxr,r,r-ÚforwardEs(





ù



zCNNClassifier.forwardcC| ¡t ¡Dt|tjƒrt |¡}|js$t|j ƒdkr$| 
d¡}n|jr3t|j ƒdkr3|  d¡}||ƒ}t  |d¡\}}| 
¡ ¡WdƒS1sOwYdS)z!Scikit-learn style predict methodrrrN)ÚevalÚtorchZno_gradÚ
isinstanceÚnpÚndarrayÚ FloatTensorrr/r0r5r1ÚmaxÚcpuÚnumpy)r)ÚoutputsÚ_Z predictedr,r,r-Úpredict^s
 
 

$özCNNClassifier.predictcCs0| |¡}t|tjƒr| ¡ ¡}t ||k¡S)zScikit-learn style score method)rDr:r9ZTensorr?r@r;Úmean)r)rAÚ predictionsr,r,r-Úscorems
  zCNNClassifier.score)Ú__name__Ú
__module__Ú __qualname__rr7rDrHÚ
__classcell__r,r,r*r-r&s
 r)ÚClient)Úload)gffffffZ@gš™™™™™"@gÍÌÌÌÌŒZ@gš™™™™™#@z2023-03-01/2023-05-31é ééz1train/ST_training data_updated_1130points_new.shpÚxgboostédgš™™™™™¹?cS
s˜
dfdd„ }fdd}zõ| dur#t ¡ d¡}d|d|d } td
ƒ}|jd d |d|d|d|d| }t | ¡¡ ¡}|d
|d }d}d}| rœ|  ¡rœ|d|j
ddƒzt   |¡}|d}|d}|dt
|ƒddƒWnty}z|dt|ƒddƒd}WYd}~nd}~ww|dur³|ddƒ|ddƒt d¡}|ƒ|ddƒ|jdg||dd |iid!}t| ¡ƒ}|ƒt
|ƒ|kræt
|ƒ|}|dd|d|}|d"t
|ƒd#d$ƒ|d%d&ƒd'd(„|Dƒ}t|gd)¢d*||tjd+d,}| d-d.d/d)œ¡}|ƒ|d0d1ƒ|jd2g||d3}t| ¡ƒ} t
| ƒ|krCt
| ƒ|}| dd|d|} |d"t
| ƒd4d5ƒ|d6d7ƒd8d(„| Dƒ} t| d9d:gd*||tjd+d,}!dt |!d9 |!d9d;k¡¡|!d<<dt |!d: |!d:d;k¡¡|!d=<|ƒ|d>dƒ|d.|d-|d.|d-d?}"|d/ gd@¢¡}#|" |#¡}$|$jdAdB}%|dCdDƒt |¡}&|&j d*krÐ|& !d*¡}&d}'dED]
}(|(|&j"vrà|(}'nqÔ|'durñt#dFt|&j"ƒƒ|dGdHƒg}g}|& D]X\})}*|*j%}+|+j&},|+j'}-|*|'}.zA|%j(|,|-dIdJj)}/|!d=j(|,|-dIdJjdAdBj)}0|!d<j(|,|-dIdJjdAdBj)}1|/|0|1g}2t *|2¡ sN| ,|2¡| ,|.¡WYqþt -|¡}t -|¡}|ƒ|dKt
|ƒdLdMƒ| r³|dNdOƒz|||||t ¡ dPœ}3t  /|3|¡|dQ|j
dRƒWnt}z|dSt|ƒdRƒWYd}~nd}~wwt0ƒ}4|4 1|¡}5t2||5dTdU|5dV\}6}7}8}9|dW| dXdRƒ|
2025-12-14 18:26:25 +07:00
rØdYndZ}:|d[kròt4||| |
rè|:ndZd\dUd]d;d^};n|d_krt5||dUd`d;da};n|dbkrt6|dUdc};nù|ddkrt7dedUd+df};nì|dgkrÿt8s't9dhƒ|6j:di}<t
t ;|8¡ƒ}=t< =t<j> r@|
r@djndZ¡}:|dk|:ddRƒt@|<|=ƒ A|:¡};t< B|6¡ Cdi¡}>t< D|8¡}?t< B|7¡ Cdi¡}@t< D|9¡}AtE|>|?ƒ}BtF|Bdld dm}CtG }DtIjJ|; dndo}E|dpdqƒtLd|drƒ}F|; tN|FƒD]Y}Gds}H|CD]+\}I}J|I A|:¡|J A|:¡}I}J|E |;|Iƒ}K|D|K|Jƒ}L|L |E |H|L 7}Hq¡|Gdidd;kró|Ht
|Cƒ}M|dt|Gdidu|Fdv|Mdwdq|G|Fdƒq|; };t|:ƒ|;_Tnt#dx|dyƒ|dgkr|; U|6|8¡|dzd{ƒ|dgkr)|; V|6|8¡}N|; V|7|9¡}On |; V|6|8¡}N|; V|7|9¡}O|d|d}ƒtWjXtWjY Z| ¡d d t  /|;|4d~œ| ¡idt ¡ d€dddd2gdgdƒ¢d„t
|6ƒd…t
2025-12-14 18:26:25 +07:00
|7ƒd†t[|Nƒd‡t[|Oƒdˆ|d‰|d[kr|:ndZ“dŠ|dvrŒ|nddŒ|dgkr|ndd|d[kr | nddŽ|dgkr¯tLd|drƒndd|6j:didt
t ;|8¡ƒd|||d’œ¥}P|  \d d“¡}Qt|Qd”ƒ}Rt]j/|P|Rdrd•Wdƒn 1sçwY|dd—ƒd | |Q|N|Ot
|6ƒt
|7ƒ|4j^ d˜œWSt`y(}z|d™t|ƒd`ƒd+t|ƒd dšœWYd}~Sd}~wtyK}z|dt|ƒd`ƒd+t|ƒdœœWYd}~Sd}~ww)ža}
Train a land classification model using Sentinel-2 and Sentinel-1 data
Args:
bbox: [min_lon, min_lat, max_lon, max_lat]
2025-12-14 18:26:25 +07:00
time_range: "YYYY-MM-DD/YYYY-MM-DD"
max_scenes: maximum number of scenes to load
cloud_cover: maximum cloud cover percentage
resolution: resolution in meters (e.g., 20)
training_shapefile: path to training shapefile
n_estimators: number of trees for XGBoost
max_depth: maximum tree depth
learning_rate: learning rate for XGBoost
use_gpu: whether to use GPU for training
output_model_path: path to save trained model (auto-generated if None)
status_callback: Optional callback function to report progress
cancel_check: Optional function that returns True if training should be cancelled
Returns:
Dictionary containing training results
Ncs:ˆrzˆ||ƒWn
tyˆ|ƒYnwt|ƒdS)zHelper to update statusN)Ú TypeErrorÚprint)ÚmessageÚprogress)Ústatus_callbackr,r-Ú
update_status¡s  ÿ z"train_model.<locals>.update_statuscsˆr ˆƒr tdƒdSdS)z%Check if training should be cancelledzTraining cancelled by userN)ÚInterruptedErrorr,)Ú cancel_checkr,r-Úcheck_cancellation«s
ÿz'train_model.<locals>.check_cancellationz
%Y%m%d_%H%M%Szmodel_train/model_rCz.joblibÚ
dataset_cacheT)Úexist_okZtraining_data_u!📦 Loading cached dataset from z...éÚfeaturesÚlabelsu ✅ Loaded z1 samples from cache (skipped satellite download!)é2uâš ï¸ Cache load failed: z, downloading fresh data...é
u?📡 Cache not found or disabled, downloading satellite data...z-Connecting to Microsoft Planetary Computer...rOz3https://planetarycomputer.microsoft.com/api/stac/v1z"Searching for Sentinel-2 scenes...zsentinel-2-l2azeo:cloud_coverÚlt)Ú collectionsÚbboxr
ÚqueryzFound z Sentinel-2 scenesrQzLoading Sentinel-2 data...écSóg|]}t |¡qSr,©Úplanetary_computerÚsign©Ú.0Úitemr,r,r-Ú
2025-12-14 18:26:25 +07:00
<listcomp>íóztrain_model.<locals>.<listcomp>)ÚB04ÚB08ÚSCLz
EPSG:32648F)ZbandsÚcrsÚ
resolutionrfZ patch_urlZ
fail_on_errorÚredÚnirÚsclz"Searching for Sentinel-1 scenes...é#zsentinel-1-rtc)rerfr
z Sentinel-1 scenesé(zLoading Sentinel-1 data...é-cSrir,rjrmr,r,r-rp
rqÚvvÚvhrZvv_dbZvh_dbzCalculating NDVI...g:Œ0âŽyE>)rrré rcÚtime)ÚdimzLoading training data...é7)ZHT_codeZMa_LUZLU2022Z HientrangÚclassZClassÚCLASSz2Cannot find label column in shapefile. Available: z+Extracting features from training points...é<Únearest)r6rFÚmethodz
Extracted z valid training sampleséFu.💾 Saving dataset to cache for future use...éH)r`rarfÚ
time_rangervÚ timestampu✅ Cached to éKuâš ï¸ Cache save failed: gš™™™™™É?é*)Z test_sizeÚ random_stateZstratifyz Training z model...zcuda:0r?rRÚhistZmlogloss)Ú n_estimatorsÚ max_depthÚ
learning_rateÚdeviceZ tree_methodrŽZ eval_metricÚ verbosityÚ
random_forestr.)rrÚn_jobsÚverboseZ
decision_tree)rZsvmZrbf)ZkernelrŽr—Úcnnz7PyTorch is required for CNN. Install: pip install torchrÚcudazBuilding CNN model on r)Ú
batch_sizeÚshufflegü©ñÒMbP?)Úlrz"Training CNN model with PyTorch...éPrgz
CNN Epoch ú/z, Loss: z.4fzUnknown model type: z9. Choose: xgboost, random_forest, decision_tree, svm, cnnzEvaluating model...éZzSaving model...é_)ÚmodelÚ
2025-12-14 18:26:25 +07:00
label_encoderrZ data_sourcez!Microsoft Planetary Computer STACre)Z NDVI_meanZ
VH_dB_meanZ
VV_dB_meanÚtraining_samplesÚtesting_samplesÚtrain_accuracyÚ
2025-12-14 18:26:25 +07:00
test_accuracyÚ
model_typer“r)rRr•r˜rrZ
cnn_epochsrrrf)rvz
_info.jsonÚw)ÚindentzTraining complete!rS)ÚsuccessÚ
model_pathÚ info_pathr¥Úclassesz Cancelled: )ÚerrorÚ cancelledzError: ))N)ar
ÚnowÚstrftimer ÚmkdirÚhashlibÚmd5ÚencodeÚ hexdigestÚexistsÚnameÚjoblibrNr/Ú ExceptionÚstrrMÚopenÚsearchÚlistZitem_collectionÚ stac_loadrkrlÚrenamer;Úlog10ÚwhereÚisinrEÚgpdÚ read_fileruZto_crsÚcolumnsÚ
ValueErrorZiterrowsZgeometryr6rFZselÚvaluesÚisnanÚanyÚappendÚarrayÚ isoformatÚdumprZ
fit_transformrÚupperr rrrÚPYTORCH_AVAILABLEÚ ImportErrorr0Úuniquer9r“r™Z is_availablerÚtor=r1Z
LongTensorr
rrZCrossEntropyLossÚoptimZAdamÚ
parametersÚminZtrainÚrangeZ zero_gradÚbackwardÚstepror?Z device_usedÚfitrHÚosÚmakedirsÚpathÚdirnameÚfloatÚreplaceÚjsonZclasses_ÚtolistrZ)SrfÚ
max_scenesÚ cloud_coverrvÚtraining_shapefiler§rrrÚuse_gpuÚ use_cacheZoutput_model_pathrXr[rYr\rÚ cache_dirZ cache_paramsÚ cache_keyÚ
cache_filer`raZ cached_dataÚcatalogZquery_s2Zitems_s2rÙZds_s2Zquery_s1Zitems_s1Zds_s1ÚndviÚ
cloud_maskZ ndvi_maskedZ ndvi_meanZ train_gdfZ label_columnÚcolÚidxÚrowZpointZx_coordZy_coordÚlabelZndvi_valZvh_valZvv_valZ feature_vecZ
cache_datar¢Zlabels_encodedZX_trainZX_testZy_trainZy_testr“rrZX_train_tensorZy_train_tensorZ
X_test_tensorZ
y_test_tensorZ
train_datasetZ train_loaderZ criterionZ optimizerZepochsZepochZ
epoch_lossZbatch_XZbatch_yrBZlossZavg_lossZ train_scoreZ
test_scoreÚinfor¬Úfr,)r[rXr-Ú train_modelzs>'
   
þ