This research has been conducted at the Institute of Advanced Research in Artificial Intelligence (IARAI).
This is the official PyTorch implementation of the paper Backdoor Attacks for Remote Sensing Data with Wavelet Transform.
- Install required packages using conda:
conda env create -f waba.yml - Download the UC Merced Land Use / AID datasets for classification tasks.
- Download the Vaihingen / Zurich Summer datasets for segmentation tasks.
- Download the pretrained model for FCNs and DeepLabV2 fcn8s_from_caffe.pth and put it in
segmentation/models/.
The data folder is structured as follows:
├── datadir/
│ ├── pathlists/
| | ├── benign/
| | ├── poisoned/
│ ├── triggers/
│ ├── UCMerced_LandUse/
| | ├── Images/
| | ├── ...
| | ├── poisoned/
│ ├── AID/
| | ├── Airport/
| | ├── BareLand/
| | ├── ...
| | ├── poisoned/
│ ├── Vaihingen/
| | ├── img/
| | ├── gt/
| | ├── ...
| | ├── poisoned/
│ ├── Zurich/
| | ├── img/
| | ├── gt/
| | ├── ...
| | ├── poisoned/
...
The pathlists folder contains two subfolders benign and poisoned. Pathlist files contain the paths to images for training and testing datasets.
A new pathlist is generated in the poisoned subfolder whenever a dataset is poisoned using new poisoning parameters.
Please note that the structure of pathlist files is slightly different for the classification and segmentation tasks. In pathlists used in classification the ground truth/target labels of an image follow the path as an integer number at the end of the line. Since such a representation is not possible for segmentation tasks, the poisoned labels are stored as images in the poisoned subfolder of the respective dataset.
To prepare the dataset for the attack, you must first poison it before training and testing your models. To do this, you can use the poison.py scripts, which are available for both the classification and segmentation tasks.
The results gathered from testing your models will be written to .csv files in the data directory.
The most important arguments when executing your code are the following:
While, of course, additional hyperparameters are available for training, testing, and poisoning, this documentation will not delve into their specifics. For further information, please consult the corresponding code.
The dataID argument can be either 1 or 2:
- 1: UCMerced LandUse
- 2: AID
From inside the classification/ folder execute:
$ python -m tools.poison --dataID (1|2) \
--data_dir <path> \
--trigger_path <path> \
--alphas [0.0-1.0]+ \
--level <decomposition_depth> \
--wavelet <pywavelet_family>
From inside the classification/ folder execute:
$ python -m tools.train --dataID (1|2) \
--data_dir <path> \
--network <network_identifier> \
--alpha [0.0-1.0] \
--poisoning_rate [0.0-0.1] \
--level <decomposition_depth> \
--wavelet <pywavelet_family> \
(--inject | --no-inject)
From inside the classification/ folder execute:
$ python -m tools.test --dataID (1|2) \
--data_dir <path> \
--network <network_identifier> \
--model_path <path_to_trained_model> \
--alpha [0.0-1.0] \
--level <decomposition_depth> \
--wavelet <pywavelet_family> \
--clean (Y|N)
The dataID argument can be either 1 or 2:
- 1: Vaihingen
- 2: Zurich Summer
From inside the segmentation/ folder execute:
$ python -m tools.poison --dataID (1|2) \
--data_dir <path> \
--trigger_path <path> \
--alphas [0.0-1.0]+ \
--level <decomposition_depth> \
--wavelet <pywavelet_family>
From inside the segmentation/ folder execute:
$ python -m tools.train --dataID (1|2) \
--data_dir <path> \
--network <network_identifier> \
--alpha [0.0-1.0] \
--poisoning_rate [0.0-0.1] \
--level <decomposition_depth> \
--wavelet <pywavelet_family> \
(--inject | --no-inject)
$ python -m tools.test --dataID (1|2) \
--data_dir <path> \
--network <network_identifier> \
--model_path <path_to_trained_model> \
--alpha [0.0-1.0] \
--level <decomposition_depth> \
--wavelet <pywavelet_family> \
--clean (Y|N)
Backdoor Attacks for Remote Sensing Data with Wavelet Transform
Please cite our paper if you find it useful for your research.
@article{drager2022backdoor,
title={Backdoor Attacks for Remote Sensing Data with Wavelet Transform},
author={Dr{\"a}ger, Nikolaus and Xu, Yonghao and Ghamisi, Pedram},
journal={arXiv preprint arXiv:2211.08044},
year={2022}
}
This repo is distributed under MIT License. The code can be used for academic purposes only.

