All Projects → sgrvinod → Wide Residual Nets For Seti

sgrvinod / Wide Residual Nets For Seti

Licence: apache-2.0
Classification of simulated radio signals using Wide Residual Networks for use in the search for extra-terrestrial intelligence

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Wide Residual Nets For Seti

fips3
OpenGL-based FITS image viewer
Stars: ✭ 24 (+9.09%)
Mutual labels:  astronomy
Signal Back
Decrypt Signal encrypted backups outside the app
Stars: ✭ 468 (+2027.27%)
Mutual labels:  signal
Celestia
Real-time 3D visualization of space.
Stars: ✭ 785 (+3468.18%)
Mutual labels:  astronomy
Neurokit
NeuroKit2: The Python Toolbox for Neurophysiological Signal Processing
Stars: ✭ 264 (+1100%)
Mutual labels:  signal
Termtrack
Track satellites in your terminal
Stars: ✭ 375 (+1604.55%)
Mutual labels:  astronomy
Astroquery
Functions and classes to access online data resources. Maintainers: @keflavich and @bsipocz and @ceb8
Stars: ✭ 510 (+2218.18%)
Mutual labels:  astronomy
stockwell
Stockwell transform for Python
Stars: ✭ 38 (+72.73%)
Mutual labels:  signal
Xdf Gan
A GAN for the generation of mock astronomical surveys
Stars: ✭ 17 (-22.73%)
Mutual labels:  astronomy
Uspeech
Speech recognition toolkit for the arduino
Stars: ✭ 448 (+1936.36%)
Mutual labels:  signal
Asteroids atlas of space
Code, data, and instructions for mapping orbits of asteroids in the solar system
Stars: ✭ 668 (+2936.36%)
Mutual labels:  astronomy
Yt
Main yt repository
Stars: ✭ 279 (+1168.18%)
Mutual labels:  astronomy
Openspace
This is the official GitHub repository for OpenSpace: an open source astrovisualization project. For instructions on how to build and run OpenSpace, see the Getting Started Guides on the wiki page at http://wiki.openspaceproject.com
Stars: ✭ 374 (+1600%)
Mutual labels:  astronomy
Sunpy
SunPy - Python for Solar Physics
Stars: ✭ 577 (+2522.73%)
Mutual labels:  astronomy
nway
nway -- Bayesian cross-matching of astronomical catalogues
Stars: ✭ 39 (+77.27%)
Mutual labels:  astronomy
Alfa
Automated Line Fitting Algorithm
Stars: ✭ 6 (-72.73%)
Mutual labels:  astronomy
signal-bot
A simple bot framework for Signal
Stars: ✭ 92 (+318.18%)
Mutual labels:  signal
Eventpp
Event Dispatcher and callback list for C++
Stars: ✭ 474 (+2054.55%)
Mutual labels:  signal
Moon Phase Widget
Moon phase widget for website in javascript
Stars: ✭ 19 (-13.64%)
Mutual labels:  astronomy
Bayesflare
A python module to detect stellar flares using Bayesian model comparison
Stars: ✭ 6 (-72.73%)
Mutual labels:  astronomy
Meteor Astronomy
Model layer for Meteor
Stars: ✭ 608 (+2663.64%)
Mutual labels:  astronomy

Classification of simulated radio signals using Wide Residual Networks for use in the search for extra-terrestrial intelligence (SETI)

This is the repository for Classification of simulated radio signals using Wide Residual Networks for use in the search for extra-terrestrial intelligence.

The models were originally the winning entry in the ML4SETI Code Challenge competition, organized by the Search for ExtraTerrestrial Intelligence (SETI) Institute.

ML4SETI

The objective of the ml4seti was to train a classifier to differentiate between the following signal types:

  • brightpixel
  • narrowband
  • narrowbanddrd
  • noise
  • squarepulsednarrowband
  • squiggle
  • squigglesquarepulsednarrowband

Check out the ml4seti Github for more details.

The criterion to select the winning entry was the (multinomial) LogLoss of the model.


Data

The training data contained 140,000 signals across the 7 classes. Our data preparation pipeline involved:

  1. Creating 5 stratified (equal class distribution) folds from the training data.
  2. The complex valued time series of each signal is divided into 384 chunks of 512 timesteps each.
  3. Hann Windows are applied.
  4. Fast Fourier Transform (FFT) is performed on the chunks.
  5. Two features are generated from the complex amplitudes -
    • Log of Square of Absolute Value of Amplitude
    • Phase
  6. Each resulting [384, 512, 2] tensor is normalized by the frequency-bin-wise mean and standard deviation across the entire training dataset.

All tensors were stored in HDF5 files, and batches are read directly from disk during model training.


Model

For the winning entry, we used an averaged ensemble of 5 Wide Residual Networks, trained on different sets of 4(/5) folds, each with a depth of 34 (convolutional layers) and a widening factor of 2.

WResnet34x2 Architecture

In the above figure, the architecture of each BasicBlock is as follows --

BasicBlock Architecture

In the interest of time, we used a batch size of 96 and an aggressive learning rate schedule. Starting at 0.1, we halved the learning rate when the model did not improve for 3 consecutive epochs, and terminated training when it failed to improve for 8 consecutive epochs.

The validation accuracies on each of the folds (having trained on the other 4 folds) is as follows:

Validation Fold Validation Accuracy
Fold 1 95.88%
Fold 2 95.74%
Fold 3 95.79%
Fold 4 95.65%
Fold 5 95.77%

For the final submission, each of these 5 fold-models were run on the test dataset, and their scores averaged.


Generating the solution

Dependencies: pytorch 0.1.12 torchvision 0.1.8 pandas h5py scikit-learn

To evaluate the model(s) and/or to reproduce our results on the Final Test Set:

  1. Download the signal files and the corresponding CSV with the UUID column into a single folder.

  2. In ./folds/create_h5_tensors.py, run the create_test_tensors_hdf5_logmod2_ph() function, while pointing to your raw signal data. This will create an hdf5 file with the test tensor.

  3. Run test.py with the architecture name, checkpoint, test hdf5 file, and the hdf5 file containing the mean and standard deviation used for normalizing. Do this for all 5 folds. For example, for fold 1:

    python test.py 'wresnet34x2' './wresnet34x2 models/wresnet34x2 FOLD1/FOLD1_BEST_wresnet34x2_batchsize96_checkpoint.pth.tar' 'path/to/your/test/hdf5' './folds/mean_stddev_primary_full_v3__384t__512f__logmod2-ph.hdf5'.

    The CSVs with the scores for each fold-model will be saved in the same folder as test.py.

    Note: If you don't have a CUDA-enabled GPU, the code will need to be modified to support CPU. Reach out to us on the ml4seti Slack channel if you need help with this.

  4. Move these CSVs to a separate folder, and run average_scores.py by pointing to this folder, and specifying the path for the output CSV:

    python average_scores.py 'path/to/folder/with/individual/model/scores' 'path/to/output/csv.csv'

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].