Skip to content

A PyTorch implementation of the Light Temporal Attention Encoder (L-TAE) for satellite image time series. classification

License

Notifications You must be signed in to change notification settings

VSainteuf/lightweight-temporal-attention-pytorch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lightweight Temporal Self-Attention (PyTorch)

A PyTorch implementation of the Light Temporal Attention Encoder (L-TAE) for satellite image time series classification. (see preprint here)

The increasing accessibility and precision of Earth observation satellite data offers considerable opportunities for industrial and state actors alike. This calls however for efficient methods able to process time-series on a global scale. Building on recent work employing multi-headed self-attention mechanisms to classify remote sensing time sequences, we propose a modification of the Temporal Attention Encoder. In our network, the channels of the temporal inputs are distributed among several compact attention heads operating in parallel. Each head extracts highly-specialized temporal features which are in turn concatenated into a single representation. Our approach outperforms other state-of-the-art time series classification algorithms on an open-access satellite image dataset, while using significantly fewer parameters and with a reduced computational complexity.

(see preprint here)

Requirements

  • PyTorch + Torchnet
  • Numpy + Scipy + scikit-learn

(see requirements.txt)

The code was developed in python 3.6.10 with pytorch 1.5.0

Downloads

Sentinel-Agri dataset

We use the Sentinel-Agri dataset available on this github repository. The dataset is comprised of time series of satellite images of agricultural parcels. Check the "Data Format" section of the repository for more details on the data.

Pre-trained weights

Pre-trained weights of the PSE+LTAE model available here

Use the models.stclassifier.PseLTae_pretrained class to instanciate the pre-trained model.

Code

This repo contains all the necessary scripts to reproduce the figure below. The implementations of the L-TAE, TAE, GRU and TempCNN temporal modules can be found in models. These four modules are combined with a Pixel-Set Encoder to form a spatio-temporal classifier, directly applicable on the Sentinel-Agri PixelSet dataset. The four architectures are found in models.stclassifier.

Use the train.py script to train the 150k-parameter L-TAE based classifier (by default). You will only need to specify the path to the dataset folder:

python train.py --dataset_folder path_to_sentinelagri_pixelset_dataset

You can use the same script to play around with the model's hyperparameters, or train an instance of a competing architecture.

To train the precise configurations that were used to produce the figure, add the arguments that are listed in the config_fig2.json file. For example, the following command will train the 9k-parameter L-TAE instance:

python train.py --dataset_folder path_to_sentinelagri_pixelset_dataset --n_head 8 --d_k 8 --mlp3 [128]

Credits

  • The Lightweight Temporal Attention Encoder is heavily inspired by the works of Vaswani et al. on the Transformer, and this pytorch implementation served as code base for the ltae.py script.
  • Credits to github.com/clcarwin/ for the pytorch implementation of the focal loss

Reference

Please include a citation to the following paper if you use the L-TAE.

@article{garnot2020ltae,
  title={Lightweight Temporal Self-Attention  for Classifying Satellite Images Time Series},
  author={Sainte Fare Garnot, Vivien  and Landrieu, Loic},
  journal={arXiv preprint arXiv:2007.00586},
  year={2020}
}

Make sure to also include a citation to the PSE+TAE paper below if you are using the Pixel-Set Encoder.

@article{garnot2020psetae,
  title={Satellite Image Time Series Classification with Pixel-Set Encoders and Temporal Self-Attention},
  author={Sainte Fare Garnot, Vivien  and Landrieu, Loic and Giordano, Sebastien and Chehata, Nesrine},
  journal={CVPR},
  year={2020}
}