Training
Info
This section is for educational purposes. No coding skills are required, and it's easy to train an existing model built with the Tensorflow API v1. If you are interested in more similar examples, please read the Tensorflow v1 models examples However, to have a full control over the model implementation and training process, the Tensorflow API v2 with Keras is the recommended approach (see also distributed training).
TensorflowModelTrain¶
Here we assume that you have produced patches using the PatchesExtraction
application, and that you have a SavedModel stored in a directory somewhere
on your filesystem.
The TensorflowModelTrain
application performs the training, validation (
against test dataset, and against validation dataset) providing the usual
metrics that machine learning frameworks provide (confusion matrix, recall,
precision, f-score, ...).
You must provide the path of the SavedModel to the model.dir
parameter.
The model.restorefrom
and model.saveto
corresponds to the variables of the
SavedModel used respectively for restoring and saving them.
Set you input sources for training (training
parameter group) and for
validation (validation
parameter group): the evaluation is performed against
training data, and optionally also against the validation data (only if you
set validation.mode
to "class").
For each input sources, the patch size and the placeholder name must be
provided.
Regarding validation, if a different name is found in a particular input
source of the validation
parameter group, the application knows that the
input source is not fed to the model at inference, but is used as reference
to compute evaluation metrics of the validation dataset.
Batch size (training.batchsize
) and number of epochs (training.epochs
) can
be set.
User placeholders can be set separately for
training (training.userplaceholders
) and
validation (validation.userplaceholders
).
The validation.userplaceholders
can be useful if you have a model that
behaves differently depending on the given placeholder.
Let's take the example of dropout: it's nice for training, but you have to
disable it to use the model at inference time.
Hence you will pass a placeholder with "dropout_rate=0.3" for training and "
dropout_rate=0.0" for validation.
Of course, one can train models from handmade python code: to import the
patches images, a convenient method consist in reading patches images as numpy
arrays using OTB applications (e.g. ExtractROI
) or GDAL, then do a
numpy.reshape
to the dimensions wanted.
The application description can be displayed using:
As you can note, there is $OTB_TF_NSOURCES
+ 1 sources because we often need
at least one more source for the reference data (e.g. terrain truth for land
cover mapping).
Composite applications for classification¶
Who has never dreamed to use classic classifiers performing on deep learning features? This is possible thank to two new applications that uses the existing training/classification applications of OTB:
TrainClassifierFromDeepFeatures
is a composite application that wire
TensorflowModelServe
application output into the existing official
TrainImagesClassifier
application.
The application description can be displayed using:
Example¶
We assume that we have already followed the sampling section. We start from the files generated at the end of the patches extraction.
Now we have two images for patches and labels.
We can split them to distinguish test/validation groups (with the ExtractROI
application for instance).
But here, we will just perform some fine-tuning of our model.
The SavedModel is located in the outmodel
directory.
Our model is quite basic: it has two input placeholders, x1 and y1
respectively for input patches (with size 16x16) and input reference labels (
with size 1x1).
We named prediction the tensor that predict the labels and the optimizer
that perform the stochastic gradient descent is an operator named optimizer
.
We perform the fine-tuning and we export the new model variables directly in
the outmodel/variables folder, overwriting the existing variables of the
model.
We use the TensorflowModelTrain
application to perform the training of this
existing model.
otbcli_TensorflowModelTrain -model.dir /path/to/oursavedmodel \
-training.targetnodesnames optimizer -training.source1.il samp_patches.tif \
-training.source1.patchsizex 16 -training.source1.patchsizey 16 \
-training.source1.placeholder x1 -training.source2.il samp_labels.tif \
-training.source2.patchsizex 1 -training.source2.patchsizey 1 \
-training.source2.placeholder y1 \
-model.saveto /path/to/oursavedmodel/variables/variables
Note that we could also have performed validation in this step. In this case,
the validation.source2.placeholder
would be different than
the training.source2.placeholder
, and would be prediction. This way, the
program know what is the target tensor to evaluate.