MannLabs / SPARCSpy

9 stars 6 forks source link

Error Message segmentation + extraction + classification pipeline #9

Closed sophiamaedler closed 2 months ago

sophiamaedler commented 2 years ago

Code run to generate error message:

from vipercore.pipeline.project import Project
from vipercore.pipeline.workflows import ShardedWGASegmentation
from vipercore.pipeline.extraction import HDF5CellExtraction
from vipercore.pipeline.classification import MLClusterClassifier
from vipercore.pipeline.selection import LMDSelection
from vipercore.processing.utils import download_testimage

import numpy as np
import os
import csv

slides = ["10h_T002.1",
        "10h_T002.2",
        "10h_T003.1",
        "10h_T004.1",
        "10h_T004.2",
        "10h_T005.1",
        "10h_T005.2",
        "10h_T006.1",
        "10h_T006.2",]

base_path = '/mnt/dss/microscopy_images/Autophagy_Screen/Training_Data'

for slide in slides:
    path = os.path.join(base_path, slide)
    single_images = os.path.join(path, 'merged_files', 'example_images')

    files = os.listdir(single_images)
    files_DAPI = np.sort([x for x in files if 'DAPI' in x])
    files_WGA = np.sort([x for x in files if 'Alexa488' in x])
    files_mcherry =  np.sort([x for x in files if 'mCherry' in x])

    for i in range(0, 5):
        images = [os.path.join(single_images, files_DAPI[i]),
                  os.path.join(single_images, files_WGA[i]),
                  os.path.join(single_images, files_mcherry[i])]

        project_location = os.path.join(path, "individual_segmentation_"+str(i))

        project = Project(project_location,
                          config_path= "config_autophagy.yml",
                          overwrite=True,
                          debug=False,
                          segmentation_f=ShardedWGASegmentation,
                          extraction_f=HDF5CellExtraction,
                          classification_f=MLClusterClassifier,)

        project.load_input_from_file(images)
        project.segment(intermediate_output = False, debug = False)
        project.extract()
        project.classify([[], [], []])

Error occurred when processing slide index 2 (i.e. 10h_T003.1) the first image tile in the classification step.

Error message:

OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipykernel_290196/1473147590.py in <module>
     26         project.segment(intermediate_output = False, debug = False)
     27         project.extract()
---> 28         project.classify([[], [], []])

~/viper-core/src/vipercore/pipeline/project.py in classify(self, *args, **kwargs)
    324             raise ValueError("input was not found at {}".format(input_extraction))
    325 
--> 326         self.classification_f(input_extraction, *args, **kwargs)
    327 
    328     def select(self, 

~/viper-core/src/vipercore/pipeline/classification.py in __call__(self, extraction_dir, accessory, size, project_dataloader, accessory_dataloader)
    224         self.log(f"log transfrom: {self.config['log_transform']}")
    225 
--> 226         self.inference(dataloader, model.network.encoder_c2)
    227         self.inference(dataloader, model.network.forward)
    228 

~/viper-core/src/vipercore/pipeline/classification.py in inference(self, dataloader, model_fun)
    278         d1, d2 = result.shape
    279         pca = PCA(n_components=min(d2, self.config["pca_dimensions"]))
--> 280         embedding_pca = pca.fit_transform(result)
    281 
    282         # save pre dimension reduction pca results

~/miniconda3/envs/viper-core/lib/python3.9/site-packages/sklearn/decomposition/_pca.py in fit_transform(self, X, y)
    381         C-ordered array, use 'np.ascontiguousarray'.
    382         """
--> 383         U, S, Vt = self._fit(X)
    384         U = U[:, :self.n_components_]
    385 

~/miniconda3/envs/viper-core/lib/python3.9/site-packages/sklearn/decomposition/_pca.py in _fit(self, X)
    428         # Call different fits for either full or truncated SVD
    429         if self._fit_svd_solver == 'full':
--> 430             return self._fit_full(X, n_components)
    431         elif self._fit_svd_solver in ['arpack', 'randomized']:
    432             return self._fit_truncated(X, n_components, self._fit_svd_solver)

~/miniconda3/envs/viper-core/lib/python3.9/site-packages/sklearn/decomposition/_pca.py in _fit_full(self, X, n_components)
    444                                  "if n_samples >= n_features")
    445         elif not 0 <= n_components <= min(n_samples, n_features):
--> 446             raise ValueError("n_components=%r must be between 0 and "
    447                              "min(n_samples, n_features)=%r with "
    448                              "svd_solver='full'"

ValueError: n_components=100 must be between 0 and min(n_samples, n_features)=90 with svd_solver='full'