Skip to content

SpatialAE Demo

import spatialae as sa
(Running SpatialAE 0.1.0)
2024-03-08 18:31:39

Overview of the example dataset

example data download from https://github.com/labsyspharm/mcmicro/actions/runs/8041633029 exemplar-001.zip

import dask.array as da
import tifffile
imagePath = "/Users/rthuang/Documents/spatialaeExampleData/exemplar-001/registration/exemplar-001.ome.tif"

original_image = da.from_zarr(tifffile.imread(pathlib.Path(imagePath), aszarr=True, level=0))
original_image
Array Chunk
Bytes 180.35 MiB 2.00 MiB
Shape (12, 3138, 2511) (1, 1024, 1024)
Dask graph 144 chunks in 2 graph layers
Data type uint16 numpy.ndarray
2511 3138 12
markerIndex = 0

zimage = da.from_zarr(tifffile.imread(pathlib.Path(imagePath), aszarr=True, level=0, key=markerIndex))
zimage
Array Chunk
Bytes 15.03 MiB 2.00 MiB
Shape (3138, 2511) (1024, 1024)
Dask graph 12 chunks in 2 graph layers
Data type uint16 numpy.ndarray
2511 3138
markerIndex = 11

zimage = da.from_zarr(tifffile.imread(pathlib.Path(imagePath), aszarr=True, level=0, key=markerIndex))
zimage
Array Chunk
Bytes 15.03 MiB 2.00 MiB
Shape (3138, 2511) (1024, 1024)
Dask graph 12 chunks in 2 graph layers
Data type uint16 numpy.ndarray
2511 3138

Cropping image

default first channel

spatialTablePath= '/Users/rthuang/Documents/spatialaeExampleData/exemplar-001/quantification/exemplar-001--unmicst_cell.csv'
imagePath= '/Users/rthuang/Documents/spatialaeExampleData/exemplar-001/registration/exemplar-001.ome.tif'
projectDir = '/Users/rthuang/Documents/spatialaeExampleData/'
# if not specify any channel marker mapping, default crop the first channel as DNA1
sa.generateSinglePatch(spatialTablePath, imagePath, projectDir=projectDir, cell_indicator='CellID')
generateSinglePatch starting
Processing Marker: DNA1
subimages "2621has limitted information, has been filtered.
subimages "2679has limitted information, has been filtered.
subimages "2904has limitted information, has been filtered.
subimages "2949has limitted information, has been filtered.
subimages "3091has limitted information, has been filtered.
subimages "3134has limitted information, has been filtered.
subimages "3207has limitted information, has been filtered.
subimages "3240has limitted information, has been filtered.
subimages "3336has limitted information, has been filtered.
subimages "3361has limitted information, has been filtered.
subimages "3395has limitted information, has been filtered.
subimages "3584has limitted information, has been filtered.
subimages "3717has limitted information, has been filtered.
subimages "3877has limitted information, has been filtered.
subimages "3992has limitted information, has been filtered.
subimages "4005has limitted information, has been filtered.
subimages "4269has limitted information, has been filtered.
subimages "4323has limitted information, has been filtered.
subimages "4430has limitted information, has been filtered.
subimages "4508has limitted information, has been filtered.
subimages "4602has limitted information, has been filtered.
subimages "4609has limitted information, has been filtered.
subimages "4614has limitted information, has been filtered.
subimages "4673has limitted information, has been filtered.
subimages "4706has limitted information, has been filtered.
subimages "4786has limitted information, has been filtered.
subimages "4827has limitted information, has been filtered.
subimages "4888has limitted information, has been filtered.
subimages "4921has limitted information, has been filtered.
subimages "5001has limitted information, has been filtered.
subimages "5140has limitted information, has been filtered.
subimages "5293has limitted information, has been filtered.
subimages "5427has limitted information, has been filtered.
subimages "5453has limitted information, has been filtered.
subimages "5503has limitted information, has been filtered.
subimages "5550has limitted information, has been filtered.
subimages "5653has limitted information, has been filtered.
subimages "5724has limitted information, has been filtered.
subimages "5779has limitted information, has been filtered.
subimages "5812has limitted information, has been filtered.
subimages "5889has limitted information, has been filtered.
subimages "5922has limitted information, has been filtered.
subimages "5995has limitted information, has been filtered.
subimages "6006has limitted information, has been filtered.
subimages "6084has limitted information, has been filtered.
subimages "6172has limitted information, has been filtered.
subimages "6234has limitted information, has been filtered.
subimages "6293has limitted information, has been filtered.
subimages "6441has limitted information, has been filtered.
subimages "6457has limitted information, has been filtered.
subimages "6554has limitted information, has been filtered.
subimages "6593has limitted information, has been filtered.
subimages "6671has limitted information, has been filtered.
subimages "6704has limitted information, has been filtered.
subimages "6824has limitted information, has been filtered.
subimages "7042has limitted information, has been filtered.
subimages "7161has limitted information, has been filtered.
subimages "7358has limitted information, has been filtered.
subimages "7558has limitted information, has been filtered.
subimages "7642has limitted information, has been filtered.
subimages "7761has limitted information, has been filtered.
subimages "8239has limitted information, has been filtered.
subimages have been generated, head over to "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch" to view results

Multiple specified channels

## specify markerChannelMapPath to crop multiple channels' images.
spatialTablePath= '/Users/rthuang/Documents/spatialaeExampleData/exemplar-001/quantification/exemplar-001--unmicst_cell.csv'
imagePath= '/Users/rthuang/Documents/spatialaeExampleData/exemplar-001/registration/exemplar-001.ome.tif'
projectDir = '/Users/rthuang/Documents/spatialaeExampleData/'

markerChannelMapPath = "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/data/markers.csv"
sa.generateSinglePatch(spatialTablePath, imagePath, markerChannelMapPath = markerChannelMapPath, markers = ["DNA_6", "ELANE", "CD57", 'CD45'], 
                        projectDir = projectDir, cell_indicator='CellID', image_fraction = 0.01)
generateSinglePatch starting
Processing Marker: DNA_6
Processing Marker: ELANE
Processing Marker: CD57
Processing Marker: CD45
subimages have been generated, head over to "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch" to view results

Modelling

single channel

input_dim = 256 # 16*16
encoding_dim = 64
max_epoch_num = 1
batch_size = 8
# dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatc/DNA1/"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/DNA_6/"
outModelPath = '/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_DNA_validate_1_model.pth'

sa.models.aeTrain(dataset_dir, outModelPath,  input_dim, encoding_dim,  max_epoch_num, batch_size)
GPU available: True (mps), used: True
TPU available: False, using: 0 TPU cores
IPU available: False, using: 0 IPUs
HPU available: False, using: 0 HPUs

  | Name      | Type       | Params
-----------------------------------------
0 | criterion | MSELoss    | 0     
1 | encoder   | Sequential | 41.2 K
2 | decoder   | Sequential | 41.3 K
-----------------------------------------
82.5 K    Trainable params
0         Non-trainable params
82.5 K    Total params
0.330     Total estimated model params size (MB)


Train_data
Validate_data
Epoch 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:05<00:00,  2.03it/s, v_num=5](Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:38
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39
(Running SpatialAE 0.1.0)
2024-03-08 18:52:39

Validation: |                                                                                                                                                                         | 0/? [00:00<?, ?it/s]
Validation:   0%|                                                                                                                                                                     | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:   0%|                                                                                                                                                        | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:  33%|████████████████████████████████████████████████                                                                                                | 1/3 [00:00<00:00, 25.98it/s]
Validation DataLoader 0:  67%|████████████████████████████████████████████████████████████████████████████████████████████████                                                | 2/3 [00:00<00:00, 43.13it/s]
Validation DataLoader 0: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 43.74it/s]
Epoch 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:16<00:00,  0.74it/s, v_num=5]

`Trainer.fit` stopped: `max_epochs=1` reached.


Epoch 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:16<00:00,  0.74it/s, v_num=5]
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:45
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:45
(Running SpatialAE 0.1.0)
2024-03-08 18:52:45
(Running SpatialAE 0.1.0)
2024-03-08 18:52:45
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:44
(Running SpatialAE 0.1.0)
2024-03-08 18:52:51
(Running SpatialAE 0.1.0)
2024-03-08 18:52:51
(Running SpatialAE 0.1.0)
2024-03-08 18:52:51
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
(Running SpatialAE 0.1.0)
2024-03-08 18:52:52
input_dim = 256 # 16*16
encoding_dim = 64
max_epoch_num = 2
batch_size = 8
# dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatc/DNA1/"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/DNA_6/"
outModelPath = '/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_DNA_validate_2_model.pth'

sa.models.aeTrain(dataset_dir, outModelPath,  input_dim, encoding_dim,  max_epoch_num, batch_size)
GPU available: True (mps), used: True
TPU available: False, using: 0 TPU cores
IPU available: False, using: 0 IPUs
HPU available: False, using: 0 HPUs

  | Name      | Type       | Params
-----------------------------------------
0 | criterion | MSELoss    | 0     
1 | encoder   | Sequential | 41.2 K
2 | decoder   | Sequential | 41.3 K
-----------------------------------------
82.5 K    Trainable params
0         Non-trainable params
82.5 K    Total params
0.330     Total estimated model params size (MB)


Train_data
Validate_data


/Users/rthuang/miniconda3/envs/spatialAE/lib/python3.10/site-packages/lightning/pytorch/loops/fit_loop.py:298: The number of training batches (12) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.


Epoch 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:06<00:00,  1.83it/s, v_num=1](Running SpatialAE 0.1.0)
2024-03-08 05:31:07
(Running SpatialAE 0.1.0)
2024-03-08 05:31:07
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08
(Running SpatialAE 0.1.0)
2024-03-08 05:31:07
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08
(Running SpatialAE 0.1.0)
2024-03-08 05:31:07
(Running SpatialAE 0.1.0)
2024-03-08 05:31:08

Validation: |                                                                                                                                                                         | 0/? [00:00<?, ?it/s]
Validation:   0%|                                                                                                                                                                     | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:   0%|                                                                                                                                                        | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:  33%|████████████████████████████████████████████████                                                                                                | 1/3 [00:00<00:00, 69.85it/s]
Validation DataLoader 0:  67%|███████████████████████████████████████████████████████████████████████████████████████████████▎                                               | 2/3 [00:00<00:00, 103.80it/s]
Validation DataLoader 0: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00,  5.93it/s]
Epoch 1:   0%|                                                                                                                                                              | 0/12 [00:00<?, ?it/s, v_num=1](Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
(Running SpatialAE 0.1.0)
2024-03-08 05:31:14
Epoch 1: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:50<00:00,  0.24it/s, v_num=1](Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22
(Running SpatialAE 0.1.0)
2024-03-08 05:31:22

Validation: |                                                                                                                                                                         | 0/? [00:00<?, ?it/s]
Validation:   0%|                                                                                                                                                                     | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:   0%|                                                                                                                                                        | 0/3 [00:00<?, ?it/s]
Validation DataLoader 0:  33%|███████████████████████████████████████████████▋                                                                                               | 1/3 [00:00<00:00, 115.52it/s]
Validation DataLoader 0:  67%|███████████████████████████████████████████████████████████████████████████████████████████████▎                                               | 2/3 [00:00<00:00, 143.52it/s]
Validation DataLoader 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 155.79it/s]
Epoch 1: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [01:05<00:00,  0.18it/s, v_num=1]

`Trainer.fit` stopped: `max_epochs=2` reached.


Epoch 1: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [01:05<00:00,  0.18it/s, v_num=1]
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:38
(Running SpatialAE 0.1.0)
2024-03-08 05:31:37
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:27
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28
(Running SpatialAE 0.1.0)
2024-03-08 05:32:28

extract embedding

input_dim = 256  #  (16x16)
encoding_dim = 64
batch_size = 32
embeddingSavePath="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/"
embeddingSaveName="latent_embedding_DNA.csv"

ModelPath = "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_DNA_validate_2_model.pth"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/DNA_6/"
multi = False

sa.datasets.extractEmbedding(ModelPath, dataset_dir,
                     embeddingSavePath,
                     embeddingSaveName,
                     input_dim = input_dim,
                     encoding_dim = encoding_dim,
                     batch_size = batch_size,
                     multi=multi)
Embeddings have been written to /Users/rthuang/Documents/spatialaeExampleData/SpatialAE/latent_embedding_DNA.csv

multiple channel

dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/"
outModelPath = '/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_multi_validate_2_model.pth'
channels = ["DNA_6", "ELANE", "CD57", 'CD45']
input_dim=256
encoding_dim=64
batch_size=32
max_epoch_num=2
num_workers = 10
prefetch_factor = 8

sa.aeTrainMulti(dataset_dir, outModelPath, channels, input_dim, encoding_dim, max_epoch_num, batch_size, num_workers, prefetch_factor)
GPU available: True (mps), used: True
TPU available: False, using: 0 TPU cores
IPU available: False, using: 0 IPUs
HPU available: False, using: 0 HPUs

  | Name      | Type       | Params
-----------------------------------------
0 | criterion | MSELoss    | 0     
1 | encoder   | Sequential | 139 K 
2 | decoder   | Sequential | 140 K 
-----------------------------------------
279 K     Trainable params
0         Non-trainable params
279 K     Total params
1.119     Total estimated model params size (MB)


Warning: '/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/common_files.txt' not found. Falling back to finding common files.
Save files: '/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/common_files.txt' 
Train_data
Validate_data


/Users/rthuang/miniconda3/envs/spatialAE/lib/python3.10/site-packages/lightning/pytorch/loops/fit_loop.py:298: The number of training batches (3) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.


Epoch 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:07<00:00,  0.38it/s, v_num=2](Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06
(Running SpatialAE 0.1.0)
2024-03-08 16:38:06

Validation: |                                                                                                                                                                         | 0/? [00:00<?, ?it/s]
Validation:   0%|                                                                                                                                                                     | 0/1 [00:00<?, ?it/s]
Validation DataLoader 0:   0%|                                                                                                                                                        | 0/1 [00:00<?, ?it/s]
Validation DataLoader 0: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 65.49it/s]
Epoch 1:   0%|                                                                                                                                                               | 0/3 [00:00<?, ?it/s, v_num=2](Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
(Running SpatialAE 0.1.0)
2024-03-08 16:38:12
Epoch 1: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:15<00:00,  0.20it/s, v_num=2](Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:21
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22
(Running SpatialAE 0.1.0)
2024-03-08 16:38:22

Validation: |                                                                                                                                                                         | 0/? [00:00<?, ?it/s]
Validation:   0%|                                                                                                                                                                     | 0/1 [00:00<?, ?it/s]
Validation DataLoader 0:   0%|                                                                                                                                                        | 0/1 [00:00<?, ?it/s]
Validation DataLoader 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 154.59it/s]
Epoch 1: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:22<00:00,  0.14it/s, v_num=2]

`Trainer.fit` stopped: `max_epochs=2` reached.


Epoch 1: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:22<00:00,  0.14it/s, v_num=2]
(Running SpatialAE 0.1.0)
2024-03-08 16:38:28
(Running SpatialAE 0.1.0)
2024-03-08 16:38:28
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:28
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:29
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:43
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
(Running SpatialAE 0.1.0)
2024-03-08 16:38:44
input_dim = 256  #  (16x16)
encoding_dim = 64
batch_size = 32
embeddingSavePath="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/"
embeddingSaveName="latent_embedding_multi.csv"

ModelPath = "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_multi_validate_2_model.pth"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/"
multi = True
channels = ["DNA_6", "ELANE", "CD57", 'CD45']


sa.datasets.extractEmbedding(ModelPath, dataset_dir,
                     embeddingSavePath,
                     embeddingSaveName,
                     input_dim = input_dim,
                     encoding_dim = encoding_dim,
                     batch_size = batch_size,
                     multi = multi,
                     channels = channels)
Embeddings have been written to /Users/rthuang/Documents/spatialaeExampleData/SpatialAE/latent_embedding_multi.csv

Visualization

# One channel visualization[DNA1]
multi = False
ModelPath = "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_DNA_validate_2_model.pth"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/DNA_6/"
batch_size = 8
# adata = sc.read(adataPath)
# select_int_list = adata.obs[adata.obs["leiden0.4"] == "4"]["cell"].values.tolist()
# select_str_list = [str(i) for i in select_int_list]

import pandas as pd
embedding  = pd.read_csv("/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/latent_embedding_DNA.csv", index_col=0)
select_int_list = embedding.index.values.tolist()
select_str_list = [str(i) for i in select_int_list]



iterNum = 1
sa.visualizeImages(ModelPath,
                    dataset_dir,
                    searchStrList = select_str_list,
                    input_dim = 256,
                    encoding_dim = 64,
                    batch_size = batch_size,
                    imageViewSize = 16,
                    iterNum = iterNum)
matching_imagefiles: 112

png

iterNum = 2
sa.visualizeImages(ModelPath,
                    dataset_dir,
                    searchStrList = select_str_list,
                    input_dim = 256,
                    encoding_dim = 64,
                    batch_size = batch_size,
                    imageViewSize = 16,
                    iterNum = iterNum)
matching_imagefiles: 112

png


# Multichannels  visualization
multi = True
ModelPath = "/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/models/ln_autoencoder_multi_validate_2_model.pth"
dataset_dir="/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/"
batch_size = 6
# adata = sc.read(adataPath)
# select_int_list = adata.obs[adata.obs["leiden0.4"] == "4"]["cell"].values.tolist()
# select_str_list = [str(i) for i in select_int_list]

import pandas as pd
cellidx  = pd.read_csv("/Users/rthuang/Documents/spatialaeExampleData/SpatialAE/SinglePatch/common_files.txt", header = None)
select_int_list = cellidx[0].str.split("_").str[2].str.split(".").str[0].tolist()
select_str_list = [str(i) for i in select_int_list]
channels = ["DNA_6", "ELANE", "CD57", 'CD45']

iterNum =1
sa.visualizeImages(ModelPath,
                    dataset_dir,
                    searchStrList = select_str_list,
                    input_dim = 256,
                    encoding_dim = 64,
                    batch_size = batch_size,
                    imageViewSize = 16,
                    iterNum = iterNum,
                    multi = multi,
                    channels = channels)
matching_imagefiles: 112

png

iterNum =2
sa.visualizeImages(ModelPath,
                    dataset_dir,
                    searchStrList = select_str_list,
                    input_dim = 256,
                    encoding_dim = 64,
                    batch_size = batch_size,
                    imageViewSize = 16,
                    iterNum = iterNum,
                    multi = multi,
                    channels = channels)
matching_imagefiles: 112

png