Non-Linear Spectral Unmixing of Hyperspectral Data