Update Notebooks
This commit is contained in:
parent
c900add842
commit
648991bf51
230
Notebooks/APs.ipynb
Normal file
230
Notebooks/APs.ipynb
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import sys\n",
|
||||||
|
"from pathlib import Path\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"import matplotlib.pyplot as plt\n",
|
||||||
|
"\n",
|
||||||
|
"triskele_path = Path('../triskele/python/')\n",
|
||||||
|
"sys.path.append(str(triskele_path.resolve()))\n",
|
||||||
|
"import triskele"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# Specific Utils\n",
|
||||||
|
"\n",
|
||||||
|
"def DFC_filter(raster):\n",
|
||||||
|
" raster[raster > 1e4] = raster[raster < 1e4].max()\n",
|
||||||
|
"\n",
|
||||||
|
"def show(im, im_size=1, save=None):\n",
|
||||||
|
" plt.figure(figsize=(16*im_size,3*im_size))\n",
|
||||||
|
" plt.imshow(im)\n",
|
||||||
|
" plt.colorbar()\n",
|
||||||
|
" \n",
|
||||||
|
" if save is not None:\n",
|
||||||
|
" plt.savefig(save, bbox_inches='tight', pad_inches=1)\n",
|
||||||
|
" \n",
|
||||||
|
" plt.show()\n",
|
||||||
|
"\n",
|
||||||
|
"def mshow(Xs, titles=None, im_size=1, save=None):\n",
|
||||||
|
" s = len(Xs)\n",
|
||||||
|
"\n",
|
||||||
|
" plt.figure(figsize=(16*im_size,3*im_size*s))\n",
|
||||||
|
"\n",
|
||||||
|
" for i in range(s):\n",
|
||||||
|
" plt.subplot(s,1,i+1)\n",
|
||||||
|
" plt.imshow(Xs[i])\n",
|
||||||
|
" \n",
|
||||||
|
" if titles is not None:\n",
|
||||||
|
" plt.title(titles[i])\n",
|
||||||
|
" \n",
|
||||||
|
" plt.colorbar()\n",
|
||||||
|
" \n",
|
||||||
|
" if save is not None:\n",
|
||||||
|
" plt.savefig(save, bbox_inches='tight', pad_inches=1)\n",
|
||||||
|
" \n",
|
||||||
|
" plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"layers_files = [\n",
|
||||||
|
" '../Data/phase1_rasters/DEM+B_C123/UH17_GEM051_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/DEM_C123_3msr/UH17_GEG051_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/DEM_C123_TLI/UH17_GEG05_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/DSM_C12/UH17c_GEF051_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/Intensity_C1/UH17_GI1F051_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/Intensity_C2/UH17_GI2F051_TR.tif',\n",
|
||||||
|
" '../Data/phase1_rasters/Intensity_C3/UH17_GI3F051_TR.tif',\n",
|
||||||
|
" #'../Data/ground_truth/2018_IEEE_GRSS_DFC_GT_TR.tif'\n",
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Define dataset dependent raster filtering"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def DFC_filter(raster):\n",
|
||||||
|
" ## Remove extrem values\n",
|
||||||
|
" #raster[raster == raster.max()] = raster[raster != raster.max()].max()\n",
|
||||||
|
" raster[raster > 1e4] = raster[raster < 1e4].max()\n",
|
||||||
|
" #raster[raster == np.finfo(raster.dtype).max] = raster[raster != raster.max()].max()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Load rasters data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"layers = list()\n",
|
||||||
|
"\n",
|
||||||
|
"for file in layers_files:\n",
|
||||||
|
" print('Loading {}'.format(file))\n",
|
||||||
|
" layer = triskele.read(file)\n",
|
||||||
|
" DFC_filter(layer)\n",
|
||||||
|
" layers.append(layer)\n",
|
||||||
|
"\n",
|
||||||
|
"layers_stack = np.stack(layers, axis=2)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Display rasters"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"for i in range(layers_stack.shape[2]):\n",
|
||||||
|
" plt.figure(figsize=(16*2,3*2))\n",
|
||||||
|
" plt.imshow(layers_stack[:,:,i])\n",
|
||||||
|
" plt.colorbar()\n",
|
||||||
|
" plt.title(layers_files[i])\n",
|
||||||
|
" plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Attributes filter with TRISKELE !"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"area = np.array([10, 100, 1e3, 1e4, 1e5])\n",
|
||||||
|
"sd = np.array([0.5,0.9,0.99,0.999,0.9999])#,1e4,1e5,5e5])\n",
|
||||||
|
"moi = np.array([0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.99])\n",
|
||||||
|
"\n",
|
||||||
|
"t = triskele.Triskele(layers_stack[:,:,0], verbose=False)\n",
|
||||||
|
"attributes_min = t.filter(tree='min-tree',\n",
|
||||||
|
" area=area,\n",
|
||||||
|
" #standard_deviation=sd,\n",
|
||||||
|
" #moment_of_inertia=moi\n",
|
||||||
|
" )\n",
|
||||||
|
"attributes_max = t.filter(tree='max-tree',\n",
|
||||||
|
" area=area,\n",
|
||||||
|
" #standard_deviation=sd,\n",
|
||||||
|
" #moment_of_inertia=moi\n",
|
||||||
|
" )\n",
|
||||||
|
"\n",
|
||||||
|
"attributes_min_lbl = ['origin']\n",
|
||||||
|
"attributes_min_lbl.extend(['Thickening area {}'.format(x) for x in area])\n",
|
||||||
|
"attributes_max_lbl = ['origin']\n",
|
||||||
|
"attributes_max_lbl.extend(['Thinning area {}'.format(x) for x in area])\n",
|
||||||
|
"\n",
|
||||||
|
"attributes_min.shape, attributes_max.shape"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"attributes = np.dstack((attributes_min[:,:,:0:-1], attributes_max))\n",
|
||||||
|
"attributes_lbl = attributes_min_lbl[:0:-1]\n",
|
||||||
|
"attributes_lbl.extend(attributes_max_lbl)\n",
|
||||||
|
"\n",
|
||||||
|
"attributes.shape, attributes_lbl"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"figs = list()\n",
|
||||||
|
"\n",
|
||||||
|
"attributes[0,0,:] = 255 # J'ai honte...\n",
|
||||||
|
"\n",
|
||||||
|
"for i in range(attributes.shape[-1]):\n",
|
||||||
|
" figs.append(attributes[:,:,i])\n",
|
||||||
|
"\n",
|
||||||
|
"mshow(figs, attributes_lbl, 2)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
@ -16,6 +16,19 @@
|
|||||||
"import triskele"
|
"import triskele"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def show(im):\n",
|
||||||
|
" plt.figure(figsize=(16*2,3*2))\n",
|
||||||
|
" plt.imshow(im)\n",
|
||||||
|
" plt.colorbar()\n",
|
||||||
|
" plt.show()"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
@ -271,19 +284,6 @@
|
|||||||
" "
|
" "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"def show(im):\n",
|
|
||||||
" plt.figure(figsize=(16*2,3*2))\n",
|
|
||||||
" plt.imshow(im)\n",
|
|
||||||
" plt.colorbar()\n",
|
|
||||||
" plt.show()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
@ -295,12 +295,10 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "markdown",
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
"source": [
|
||||||
"labels.shape"
|
"## Scores"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -309,90 +307,37 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"np.arange(238400).reshape(-1, 4768)"
|
"scores(actual=labels.reshape(-1), prediction=cv_labels.reshape(-1))"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "markdown",
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
"source": [
|
||||||
"with open('../Res/classifier_0.pkl', 'wb') as f:\n",
|
"#### Labels\n",
|
||||||
" pickle.dump(rfc, f)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"Yp = Y.copy()\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"Yp[training == False] = rfc.predict(X[training == False])"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"plt.figure(figsize=(16*2,3*2))\n",
|
|
||||||
"plt.imshow(Y.reshape(labels.shape))\n",
|
|
||||||
"plt.colorbar()\n",
|
|
||||||
"plt.show()\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"plt.figure(figsize=(16*2,3*2))\n",
|
" 0 – Unclassified\n",
|
||||||
"plt.imshow(Yp.reshape(labels.shape))\n",
|
" 1 – Healthy grass\n",
|
||||||
"plt.colorbar()\n",
|
" 2 – Stressed grass\n",
|
||||||
"plt.show()\n",
|
" 3 – Artificial turf\n",
|
||||||
"\n",
|
" 4 – Evergreen trees\n",
|
||||||
"plt.figure(figsize=(16*2,3*2))\n",
|
" 5 – Deciduous trees\n",
|
||||||
"plt.imshow(Yp.reshape(labels.shape).astype(np.float) - labels)\n",
|
" 6 – Bare earth\n",
|
||||||
"plt.colorbar()\n",
|
" 7 – Water\n",
|
||||||
"plt.show()"
|
" 8 – Residential buildings\n",
|
||||||
]
|
" 9 – Non-residential buildings\n",
|
||||||
},
|
" 10 – Roads\n",
|
||||||
{
|
" 11 – Sidewalks\n",
|
||||||
"cell_type": "code",
|
" 12 – Crosswalks\n",
|
||||||
"execution_count": null,
|
" 13 – Major thoroughfares\n",
|
||||||
"metadata": {},
|
" 14 – Highways\n",
|
||||||
"outputs": [],
|
" 15 – Railways\n",
|
||||||
"source": [
|
" 16 – Paved parking lots\n",
|
||||||
"class cvg:\n",
|
" 17 – Unpaved parking lots\n",
|
||||||
" def __init__(self, attributes, ground_truth, order_dim=0, n_test=2): \n",
|
" 18 – Cars\n",
|
||||||
" self._tests_left = n_test\n",
|
" 19 – Trains\n",
|
||||||
" \n",
|
" 20 – Stadium seats\n"
|
||||||
" if attributes.shape[0] != ground_truth.shape[0] or \\\n",
|
|
||||||
" attributes.shape[1] != ground_truth.shape[1] :\n",
|
|
||||||
" raise ValueError('attributes and ground_truth must have the same 2D shape')\n",
|
|
||||||
" \n",
|
|
||||||
" def __iter__(self):\n",
|
|
||||||
" return self\n",
|
|
||||||
" \n",
|
|
||||||
" def __next__(self):\n",
|
|
||||||
" if self._tests_left == 0:\n",
|
|
||||||
" raise StopIteration\n",
|
|
||||||
" \n",
|
|
||||||
" train_filter = np.arange(attributes.shape) < (Y.size * .50)\n",
|
|
||||||
"\n",
|
|
||||||
" Xtrain = 42\n",
|
|
||||||
" Xtest = 432\n",
|
|
||||||
" Ytrain = 12\n",
|
|
||||||
" Ytest = 123\n",
|
|
||||||
" \n",
|
|
||||||
" return (Xtrain, Xtest, Ytrain, Ytest)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"cvg(attributes, labels[:,:-1])"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user