Training Data
To train DeepDISC, we must get metadata associated with each image. Metadata contains information about object bounding boxes, segmenatation masks, classes, and other properties. We’ll go through how to use scarlet and DeepDSIC preprocessing to produce metadata
[1]:
import sys
import deepdisc
[2]:
# Standard imports
import sys, os
import numpy as np
import time
import glob
import scarlet
import sep
import astropy.io.fits as fits
from astropy.wcs import WCS
from astropy.stats import gaussian_fwhm_to_sigma
from astropy.coordinates import SkyCoord
from scarlet.display import AsinhMapping
from astropy.nddata import Cutout2D
# DeepDISC imports
import deepdisc.preprocessing.detection as detection
import deepdisc.preprocessing.process as process
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import matplotlib
import matplotlib.pyplot as plt
# use a better colormap and don't interpolate the pixels
matplotlib.rc('image', cmap='gray', interpolation='none', origin='lower')
from skimage.util.shape import view_as_blocks
from matplotlib import colors
import pandas as pd
import h5py
import json
We’ll use simulated images we’ve created using the BlendingToolkit. You’ll need to change directory paths below
No input catalog
If you don’t have an input catalog that contains detected objects, don’t worry! The object detection can be done with sep a standard code for astronmical image processing.
But first, we need to grab the images we want to preprocess. Below we load in the tutorial data. You will need to make your own custom function to get an image saved in a different format.
[3]:
from deepdisc.data_format.image_readers import NumpyImageReader
#change the paths to where you've saved the data and where you would like to store outputs
dirpath = ''
outdir=''
reader = NumpyImageReader(norm="lupton",stretch=6000, # ImageReader class to read the image from the disk and apply contrast scalings
Q=10, bandlist=[2,1,0])
im = reader(os.path.join(dirpath,'img_10.npy'))
plt.imshow(im)
[3]:
<matplotlib.image.AxesImage at 0x7fff8c1ca0d0>
Now we can run detection and segmentation on the cutout image
To produce labels for an image, use deepdisc.preprocessing.detection.run_scarlet. The main inputs you will need are an image, a list of filters, and a psf (either an image or a gaussian standard deviation). Check the API documentation for details.
This will produce a few intermediate objects that contain all of the relevant information. However, we format them into FITS files for ease of access. This is done using deeepdisc.preprocess.process.write_scarlet_results_nomodels
[4]:
#This function is specific to the data format. You will need your own function to load custom data
def generate_training_data_example(dirpath, sp, outdir, plot_image=False, plot_stretch_Q=False, plot_scene=False,
plot_likelihood=False, write_results=True, filters = ['u','g','r','i','z','y']):
"""
Parameters
----------
c : SkyCoord object
The ra, dec pointing (single or lists of pointings)
plot_image : bool
Whether or not to plot the image
plot_stretch_Q : bool
Whether or not to plot different normalizations of your image using the stretch, Q parameters.
plot_scene : bool
Whether or not plot scene with scarlet
plot_likelihood : bool
Whether or not plot the log likelihood of the scarlet fitting
write_results : bool
Whether or not to write results to FITS file
cutout_size : [int, int]
Cutout shape of image
Returns
-------
The scarlet image test in FITS files.
"""
datas = np.load(os.path.join(dirpath,f'img_{sp}.npy'))
### Run scarlet on image ###
# Image pixel scale in arcsec/pixel
ps = 0.2
# Approximate PSF size, you can use a PSF image instead
sigma_obs = gaussian_fwhm_to_sigma*0.8/ps
# Run Scarlet
out = detection.run_scarlet(datas, filters, catalog=None, lvl=2, sigma_model=1, sigma_obs=sigma_obs, psf=None, plot_scene=plot_scene,
max_chi2=1000000, morph_thresh=1, stretch=1, Q=5,
plot_wavelet=False, plot_likelihood=plot_likelihood, plot_sources=False, add_ellipses=False,
add_labels=False, add_boxes=False, lvl_segmask=2, maskthresh=0.005,return_models=False)
# Unpack output
observation, starlet_sources, model_frame, catalog, segmentation_masks = out
# Save Scarlet data to FITS file
if write_results:
filenames = process.write_scarlet_results_nomodels(datas, observation, starlet_sources, model_frame,
segmentation_masks, outdir=outdir,
filters=filters, s=f'img{sp}', catalog=None)
print(f'\nSaved scarlet results as {filenames} \n')
[5]:
%%time
generate_training_data_example(dirpath, sp=10,plot_scene=False, plot_likelihood=False, write_results=True, outdir=outdir)
Failed to initialize source 0
Failed to initialize source 1
Generate source catalog using wavelets
0.012537717819213867
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecc717eb0>, <scarlet.source.SingleExtendedSource object at 0x7ffecc739e80>]
Fitting Blend model.
Scarlet ran for 15 iterations to logL = -1807000410.4332662
0.259751558303833
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img10_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img10_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img10_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img10_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img10_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img10_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img10_scarlet_segmask.fits'}
CPU times: user 309 ms, sys: 944 µs, total: 310 ms
Wall time: 313 ms
Let’s run a few more times to get a set of images
[6]:
for i in range(0,20):
generate_training_data_example(dirpath, sp=i,plot_scene=False, plot_likelihood=False, write_results=True, outdir=outdir)
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Failed to initialize source 3
Generate source catalog using wavelets
0.012065649032592773
Sep found 4 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.CompactExtendedSource object at 0x7ffecc739cd0>, <scarlet.source.SingleExtendedSource object at 0x7ffeccee1760>, <scarlet.source.SingleExtendedSource object at 0x7ffecceb05e0>, <scarlet.source.SingleExtendedSource object at 0x7ffeccedbc10>]
Fitting Blend model.
Failed to initialize source 0
Scarlet ran for 15 iterations to logL = -1831523633.7083669
0.3665478229522705
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img0_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img0_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img0_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img0_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img0_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img0_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img0_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009624481201171875
Sep found 1 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee6730>]
Fitting Blend model.
Scarlet ran for 8 iterations to logL = -1784792336.0745447
0.09729766845703125
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img1_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img1_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img1_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img1_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img1_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img1_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img1_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009454011917114258
Sep found 1 objects
Failed to initialize source 0
Failed to initialize source 0
Failed to initialize source 1
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.CompactExtendedSource object at 0x7ffecceeeb50>]
Fitting Blend model.
Scarlet ran for 8 iterations to logL = -1826267451.160925
0.09311223030090332
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img2_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img2_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img2_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img2_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img2_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img2_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img2_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009557247161865234
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.CompactExtendedSource object at 0x7ffecceefee0>, <scarlet.source.SingleExtendedSource object at 0x7ffecceefc10>]
Fitting Blend model.
Failed to initialize source 0
Scarlet ran for 15 iterations to logL = -1878822309.4239354
0.23193812370300293
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img3_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img3_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img3_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img3_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img3_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img3_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img3_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009943246841430664
Sep found 1 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee63a0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Scarlet ran for 15 iterations to logL = -1844207731.018729
0.184401273727417
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img4_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img4_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img4_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img4_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img4_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img4_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img4_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009746313095092773
Sep found 3 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecc739cd0>, <scarlet.source.SingleExtendedSource object at 0x7ffeccee6190>, <scarlet.source.SingleExtendedSource object at 0x7ffecce93460>]
Fitting Blend model.
Failed to initialize source 0
Scarlet ran for 15 iterations to logL = -1827406811.2191632
0.313657283782959
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img5_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img5_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img5_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img5_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img5_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img5_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img5_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009577035903930664
Sep found 1 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee63a0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 13 iterations to logL = -1816561854.356553
0.15520858764648438
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img6_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img6_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img6_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img6_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img6_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img6_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img6_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009584426879882812
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecce43b80>, <scarlet.source.SingleExtendedSource object at 0x7ffecce43070>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 15 iterations to logL = -1760188597.3627276
0.22583603858947754
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img7_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img7_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img7_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img7_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img7_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img7_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img7_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.010270357131958008
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecce93820>, <scarlet.source.CompactExtendedSource object at 0x7ffecce93280>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Failed to initialize source 3
Scarlet ran for 15 iterations to logL = -1828460105.7956543
0.22827625274658203
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img8_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img8_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img8_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img8_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img8_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img8_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img8_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.01011204719543457
Sep found 4 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecce93760>, <scarlet.source.CompactExtendedSource object at 0x7ffecce93970>, <scarlet.source.SingleExtendedSource object at 0x7ffecce939d0>, <scarlet.source.SingleExtendedSource object at 0x7ffecceb06a0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 15 iterations to logL = -1767312853.6047337
0.33719897270202637
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img9_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img9_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img9_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img9_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img9_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img9_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img9_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.010229110717773438
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecceebbe0>, <scarlet.source.SingleExtendedSource object at 0x7ffecceb01f0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 15 iterations to logL = -1807000410.4332662
0.2385573387145996
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img10_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img10_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img10_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img10_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img10_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img10_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img10_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009858369827270508
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee1a60>, <scarlet.source.SingleExtendedSource object at 0x7ffecce93fa0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Scarlet ran for 13 iterations to logL = -1792080948.4206424
0.20981764793395996
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img11_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img11_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img11_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img11_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img11_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img11_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img11_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009793281555175781
Sep found 3 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecceebbe0>, <scarlet.source.SingleExtendedSource object at 0x7ffecce93640>, <scarlet.source.SingleExtendedSource object at 0x7ffecce93ac0>]
Fitting Blend model.
Failed to initialize source 0
Scarlet ran for 14 iterations to logL = -1815909981.9912171
0.2637443542480469
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img12_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img12_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img12_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img12_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img12_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img12_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img12_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009575366973876953
Sep found 1 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee6790>]
Fitting Blend model.
Scarlet ran for 9 iterations to logL = -1810927681.806809
0.10734963417053223
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img13_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img13_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img13_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img13_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img13_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img13_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img13_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009737014770507812
Sep found 3 objects
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee6790>, <scarlet.source.SingleExtendedSource object at 0x7ffecce71e50>, <scarlet.source.SingleExtendedSource object at 0x7ffecce71b20>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 14 iterations to logL = -1790452906.1121836
0.2669050693511963
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img14_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img14_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img14_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img14_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img14_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img14_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img14_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009623050689697266
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecce713d0>, <scarlet.source.SingleExtendedSource object at 0x7ffecce71280>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Scarlet ran for 12 iterations to logL = -1773971304.7964523
0.19387030601501465
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img15_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img15_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img15_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img15_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img15_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img15_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img15_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.01020359992980957
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffeccee63a0>, <scarlet.source.SingleExtendedSource object at 0x7ffecceefa00>]
Fitting Blend model.
Scarlet ran for 5 iterations to logL = -1796790841.2292411
0.08822751045227051
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img16_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img16_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img16_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img16_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img16_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img16_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img16_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.010047435760498047
Sep found 3 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecc739ee0>, <scarlet.source.SingleExtendedSource object at 0x7ffecce71dc0>, <scarlet.source.SingleExtendedSource object at 0x7ffecce43730>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Scarlet ran for 15 iterations to logL = -1771448773.4199839
0.2887551784515381
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img17_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img17_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img17_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img17_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img17_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img17_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img17_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.009925603866577148
Sep found 2 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecce71f70>, <scarlet.source.SingleExtendedSource object at 0x7ffecceb04f0>]
Fitting Blend model.
Failed to initialize source 0
Failed to initialize source 1
Failed to initialize source 2
Failed to initialize source 3
Scarlet ran for 15 iterations to logL = -2032595638.3338776
0.27783632278442383
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img18_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img18_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img18_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img18_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img18_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img18_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img18_scarlet_segmask.fits'}
Generate source catalog using wavelets
0.010020971298217773
Sep found 4 objects
Initializing starlet sources to be fit.
Modeling as extended sources
[<scarlet.source.SingleExtendedSource object at 0x7ffecceefd90>, <scarlet.source.CompactExtendedSource object at 0x7ffecce91460>, <scarlet.source.SingleExtendedSource object at 0x7ffecce91370>, <scarlet.source.SingleExtendedSource object at 0x7ffeccee6070>]
Fitting Blend model.
Scarlet ran for 15 iterations to logL = -1794103585.4867535
0.38178133964538574
Extracting deblended catalog.
Saved scarlet results as {'img_U': '/home/g4merz/ddtutorials/U_img19_scarlet_img.fits', 'img_G': '/home/g4merz/ddtutorials/G_img19_scarlet_img.fits', 'img_R': '/home/g4merz/ddtutorials/R_img19_scarlet_img.fits', 'img_I': '/home/g4merz/ddtutorials/I_img19_scarlet_img.fits', 'img_Z': '/home/g4merz/ddtutorials/Z_img19_scarlet_img.fits', 'img_Y': '/home/g4merz/ddtutorials/Y_img19_scarlet_img.fits', 'segmask': '/home/g4merz/ddtutorials/img19_scarlet_segmask.fits'}
Using an input catalog
If you already have a source catalog but still want to use scarlet to produce deblended footprints, you can supply a catalog to the detection.run_scarlet and process.write_scarlet_results_nomodels functions through the “catalog” keyword arg. The catalog must be a Pandas DataFrame
Annotation generation
Now we can reformat the scarlet output to the format that detectron2 (and thus deepdisc) expects. This is done by creating a list of dictionaries, with each dict containing annotations that have the ground truth information. Take a look at the detectron2 docs for more information on the format expected
[7]:
from deepdisc.data_format.file_io import DDLoader
from deepdisc.data_format.annotation_functions.annotate_dc2 import annotate_dc2
Each image cutout is saved into separate FITS files per band, along with mask files (which contain the object location/footprint information). Here we create a DDLoader class, which helps gather output files and format them
[8]:
loader = DDLoader().generate_filedict(outdir, ['U', 'G', 'R', 'I', 'Z','Y'], '*_scarlet_img.fits', '*_scarlet_segmask.fits')
filedict = loader.filedict
img_files = np.transpose([filedict[filt]["img"] for filt in filedict["filters"]])
[9]:
from deepdisc.data_format import conversions
from deepdisc.data_format.conversions import fitsim_to_numpy
from deepdisc.data_format.annotation_functions.annotate_nocat import annotate_nocat
Format the files for deepdisc
[10]:
dataset_dicts=[]
dataset_dicts = loader.generate_dataset_dict(annotate_nocat,dirpath=outdir).get_dataset()
Now dataset_dicts contains the formatted ground truth for deepdisc. We save it in a json file below
[11]:
from deepdisc.data_format.file_io import convert_to_json
dfile = os.path.join(outdir,'train_dicts.json')
convert_to_json(dataset_dicts, dfile)
Using previously cached COCO format annotations at '/home/g4merz/ddtutorials/train_dicts.json'. You need to clear the cache file if your dataset has been modified.
It may also be useful to format the FITS images produced by the code into numpy .npy files. For convenience, this can be done using some conversion utilities
[12]:
from deepdisc.data_format.conversions import fitsim_to_numpy
[13]:
fitsim_to_numpy(img_files,outdir)
Clean up the FITS files
[14]:
for file in glob.glob(os.path.join(outdir,'*.fits')):
os.remove(file)
Now you have everything you need to run DeepDISC!
[ ]:
[ ]: