Data augmentation methods for Raman Spectra

I'm building a CNN model based on Raman spectroscopy data and I wanted to experiment with data augmentation. What would be some reasonable techniques to try?

I have found this paper which suggests these methods (in this case applied to NIR spectra): - Adding an offset to the spectra - Adding a slope to the spectra (kind of an "offset" slope) - Multiplying the spectra by a factor

Would adding some form of noise also make sense? It would also make sense that the noise varies throughout the wavelengths, no?

• Hi, was also reading that paper and was wondering if those 3 methods are done altogether in a spectra (or a spectra is only processed by one of those functions)? Also, on the multiplication part, is it rand(0.95, 1.05) * std(feature1) * x, isn't the number would be too large? Sorry I am pretty new in signal/spectrum processing here. Also, what technique do you end up using for spectra data augmentation? – Darren Christopher Mar 3 '20 at 1:06

I think a good exercise to do before you do data augmentation is asking yourself, whether you would be able to identify what you want to predict from your data. Also, it is worth just trying to look at your ideas and see if these result in better validation accuracy.

Gaussian noise

Using Gaussian noise is potentially a good idea. The level of noise that you want to add, depends on your empirical estimate of the signal to noise ratio, which is possible to calculate. If you think that the noise varies through the wavelenghts, you could try estimating the signal to noise ratio for each wavelength bin to confirm. Also these spectroscopy devices often have a datasheet which contain information about their noise behaviour calculated respect to some reference.

GAN or some generative ground truth model

GANs could be also exploited here to do data augmentation, then the generative model could be validated by a human observer (but this really depends on what you want to predict). Other kinds of ground truth models could be also constructed like adding Gaussians at relevant wavelengths and noising them.

Small shifts

You could also try small shifts in the spectra so that your algorithm is robust to some uncertainy in the wavelength calibrations.