Machine Learning For Remote Sensing : Orfeo ToolBox Meets OpenCV

Julien Michel (CNES (DCT/SI/AP)) with Arnaud Jaen (CS SI), Manuel Grizonnet (CNES (DCT/SI/AP))

12:00 on Friday 20th September (in Session 33, starting at 11:30 a.m., EMCC: Room 4)

Show in Timetable

Description: A recent advance in the capabilities for remote sensing in Orfeo ToolBox has been the generic modelisation of machine learning algorithms now in OTB trunk. This enables encapsulation of algorithms from OpenCV in addition to those from libSVM, extending greatly the set of available algorithms and allowing for joint training of multiple algorithms for instance.
Abstract:

Orfeo ToolBox is an open-source library developed by CNES in the frame of the Orfeo program since 2006, which aimed at preparing institutional and scientific users to the use of the Very High Resolution optical imagery delivered by the Pleiades satellites. It is written in C++ on top of ITK, a medical imagery toolkit, and relies on many other open-source libraries such as GDAL or OSSIM. The OTB aims at providing generic means of pre-processing and information extraction from optical satellites imagery. In this talk, we will focus on recent advances in the machine learning functionality allowing to use the full extent of OpenCV algorithms. Historically, supervised classification of satellite images with OTB mainly relies on libSVM. The Orfeo ToolBox provides tools to train the SVM algorithm from images and raster or vector training areas, to use a trained SVM algorithm to classify satellite images of arbitrary size in a multithreaded way, and to estimate the accuracy of the classification. The SVM algorithm has also been used for other applications such as change detection or object detection. But even if it is one of the most used function of the OTB, the supervised classification function did not offer a single alternative to the SVM algorithm. However, the open-source world offers plenty of implementations of state-of-the-art machine learning algorithms. For instance OpenCV, a computer vision C++ library distributed under the BSD licence, includes a statistical machine learning module that contains no less than height different algorithms (including SVM). We therefore created an API to represent a generic machine learning algorithm. This API can then be specialized to encapsulate a given algorithm implementation. The machine learning algorithm API assumes very few properties for such algorithms. A method has to be specialized to train the algorithm from a samples vector and a set of target labels or values, and another to predict labels or values from a samples vector. Thanks to templating, these methods handle both classification and regression. Two other methods are in charge of saving and loading back the parameters from training. File format for saving is left to the underlying implementation, and the load method is expected to return a success flag. This success flag is used in a factory pattern, designed to be able to seamlessly instantiate the appropriate machine learning algorithm specialization upon file reading. It is therefore not necessary to know which algorithms the trained parameters files refer to. This new set of classes has been embedded into a new OTB application. Its purpose is to train one of the machine learning algorithm from a set of images and GIS file describing training areas, and output the trained parameters file. Another application is in charge of reading back this file and applying the classification algorithm to a given image. With these two tools, it is very easy to train different algorithms against the same dataset, evaluate them with the help of another application which can compute confusion matrix and classification performances measurement so as to choose one or several best algorithm along with their parameters. The resulting classification maps could then be combined into a more robust one using yet another OTB application, using classes majority voting or Dempster-Shafer combination. Our perspectives for using and improving this new API are manyfold. First, we would like to investigate further the use of the regression mode. We also would like to investigate the performances of the new machine learning algorithms for other tasks achievable with OTB, such as object detection for instance. Last, we would like to evolve the API so as to export any confidence or quality indices an algorithm can output regarding its predictions. This would open the way to the implementation of new active learning tools.