Improving Semi-Supervised Learning for Remaining Useful Lifetime Estimation Through Self-Supervision
This is the companion repository for the paper "Improving Semi-Supervised Learning for Remaining Useful Lifetime Estimation Through Self-Supervision". It is available as a manuscript on arXiv or as a full journal article in IJPHM.
This project uses Python 3.7 and pipenv to manage its environment. Install pipenv as:
pip install -U pipenv
You can set up this project in a virtual environment afterwards with:
cd <PROJECT_ROOT>
pipenv install --skip-lock
Please make sure that the appropriate Nvidia driver, CUDA 10.2 and cuDNN are installed on your system.
Download the NASA C-MAPSS dataset here and extract the content to <PROJECT_ROOT>/data/CMAPSS
.
Test the installation by running the unit tests:
pipenv shell
export PYTHONPATH=$PYTHONPATH:./src
python -m unittest -v
This project uses ray
to parallelize the training.
It expects a GPU and at least 3 CPU cores to run one training instance and will try to put two runs on one GPU if more CPU cores are available.
If you want to customize these requirements, please edit the ray.remote
function decorators in the file run_semi_supervised.py
.
To start reproducing the results, enter the source directory of the project and open the pipenv shell if you haven't already:
pipenv shell
cd <PROJECT_ROOT>/src
To reproduce all baseline experiments call:
python reproduce_baseline.py 2021
To reproduce each of the SSL methods call:
python reproduce_semi_supervised.py 2021 --mode metric
python reproduce_semi_supervised.py autoencoder --mode autoencoder
python reproduce_semi_supervised.py rbm --mode rbm
If you want to modify any of the experiments, you can start with the hyperparameter configurations.
The config
folder contains JSON configs for each experiment.
If you want to run an autoencoder or self-supervised pre-training experiment, you can use the run_pretraining.py
script.
Pre-training experiments with RBMs can be run with the run_rbm.py
script.
Please consult the scripts help page for their usage with python <SCRIPT> --help
.