CADET is a machine learning pipeline trained to identify surface brightness depressions (X-ray cavities) in noisy Chandra images of early-type galaxies and galaxy clusters. The pipeline consists of a convolutional neural network trained to produce pixel-wise cavity predictions and a DBSCAN clustering algorithm that decomposes the predictions into individual cavities. The pipeline is described in detail in Plšek et al. 2023.
The architecture of the convolutional network consists of 5 convolutional blocks, each resembling an Inception layer, it was implemented using the Keras library and its development was inspired by Fort et al. 2017 and Secká 2019. For the clustering, we used is the Scikit-learn implementation of the Density-Based Spatial Clustering of Applications with Noise (DBSCAN).
The CADET pipeline has been released as a standalone Python3 package pycadet
, which can be installed using pip:
$ pip3 install pycadet
or from source:
$ pip3 install git+https://github.com/tomasplsek/CADET.git
The pycadet
package requires the following libraries (which should be installed automatically with the package):
keras<=2.15
tensorflow
numpy
scipy
astropy
matplotlib
scikit-learn>=1.1
For Conda environments, it is recommended to install the dependencies beforehand as some of the packages can be tricky to install in an existing environment (especially tensorflow
) and on some machines (especially new Macs). For machines with dedicated NVIDIA GPUs, tensorflow-gpu
can be installed to allow the CADET model to leverage the GPU for faster inference.
An exemplary notebook on how to use the pycadet
package can be found here:
A simplified version of the CADET pipeline is available via a web interface hosted on HuggingFace Spaces. The input image should be centred on the galaxy centre and cropped to a square shape. It is also recommended to remove point sources from the image and fill them with the surrounding background level using Poisson statistics (dmfilth within CIAO). Furthermore, compared to the pycadet
package, the web interface performs only a single thresholding of the raw pixel-wise prediction, which is easily adjustable using a slider.
The convolutional part of the pipeline can be used separately to produce raw pixel-wise predictions. Since the convolutional network was implemented using the functional Keras API, the architecture could have been stored together with the trained weights in the HDF5 format (CADET.hdf5
). The trained model can then simply be loaded using the load_model
Keras function (requires Keras v2.15 or lower):
from keras.models import load_model
model = load_model("CADET.hdf5")
y_pred = model.predict(X)
The raw CADET model only inputs 128x128 images. Furthermore, to maintain the compatibility with Keras, the input needs to be reshaped as X.reshape(1, 128, 128, 1)
for single image or as X.reshape(-1, 128, 128, 1)
for multiple images.
Alternatively, the CADET model can be imported from HuggingFace's model hub:
from huggingface_hub import from_pretrained_keras
model = from_pretrained_keras("Plsek/CADET-v1")
y_pred = model.predict(X)
If you use the CADET pipeline in your research, please cite the following paper Plšek et al. 2023 (arXiv):
@ARTICLE{2023MNRAS.tmp.3233P,
author = {{Pl{\v{s}}ek}, T. and {Werner}, N. and {Topinka}, M. and {Simionescu}, A.},
title = "{CAvity DEtection Tool (CADET): Pipeline for detection of X-ray cavities in hot galactic and cluster atmospheres}",
journal = {\mnras},
year = 2023,
month = nov,
doi = {10.1093/mnras/stad3371},
}
The following improvements to the data generation and training process are currently planned: