Training pixel classifiers from folders of images#
When training pixel classifiers it often makes sense to train using multiple images. For example, when images look differently, especially between conditions, it is necessary to train classifiers with mutiple images from all conditions.
In this notebook we demonstrate how to train APOC classifiers using two folders containing pairs of training data.
import apoc import os from skimage.io import imread import pyclesperanto_prototype as cle import matplotlib.pyplot as plt
We start by selecting two input folders. One with images, and one with sparsely annotated label images. The names of the files in that folder must be pairwise identical. We will also have a quick look into these folders.
For demonstration purposes, we reuse data of the BBBC007 dataset version 1 (Jones et al., Proc. ICCV Workshop on Computer Vision for Biomedical Image Applications, 2005), available from the Broad Bioimage Benchmark Collection Ljosa et al., Nature Methods, 2012.
image_folder = "../../data/BBBC007/images/" masks_folder = "../../data/BBBC007/masks/"
file_list = os.listdir(image_folder) # show all images fig, axs = plt.subplots(1, 4, figsize=(15,15)) for i, filename in enumerate(file_list): image = imread(image_folder + filename) cle.imshow(image, plot=axs[i]) plt.show() # show corresponding label images fig, axs = plt.subplots(1, 4, figsize=(15,15)) for i, filename in enumerate(file_list): masks = imread(masks_folder + filename) cle.imshow(masks, plot=axs[i], labels=True) plt.show()
If the folders are setup properly, we can pass the folders to the training.
# setup classifer and where it should be saved segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl") # setup feature set used for training features = apoc.PredefinedFeatureSet.object_size_1_to_5_px.value # train classifier on folders apoc.train_classifier_from_image_folders( segmenter, features, image = image_folder, ground_truth = masks_folder)
After the training, we can apply the classifier to all images in the image folder. The following line reloads the classifier from disk. In that way we can ensure that it was stored correctly.
segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl")
# show all images for i, filename in enumerate(file_list): fig, axs = plt.subplots(1, 2, figsize=(15,15)) image = imread(image_folder + filename) cle.imshow(image, plot=axs) labels = segmenter.predict(image) cle.imshow(labels, plot=axs, labels=True) plt.show()