Entrenamiento de clasificadores de píxeles a partir de carpetas de imágenes#

Al entrenar clasificadores de píxeles, a menudo tiene sentido entrenar utilizando múltiples imágenes. Por ejemplo, cuando las imágenes se ven diferentes, especialmente entre condiciones, es necesario entrenar clasificadores con múltiples imágenes de todas las condiciones.

En este notebook demostramos cómo entrenar clasificadores APOC utilizando dos carpetas que contienen pares de datos de entrenamiento.

import apoc
import os
from skimage.io import imread
import pyclesperanto_prototype as cle
import matplotlib.pyplot as plt

Preparación de datos#

Comenzamos seleccionando dos carpetas de entrada. Una con imágenes y otra con imágenes de etiquetas anotadas de forma dispersa. Los nombres de los archivos en esa carpeta deben ser idénticos por pares. También echaremos un vistazo rápido a estas carpetas.

Con fines de demostración, reutilizamos datos del conjunto de datos BBBC007 versión 1 (Jones et al., Proc. ICCV Workshop on Computer Vision for Biomedical Image Applications, 2005), disponible en la 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)

# mostrar todas las imágenes
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()
    
# mostrar las imágenes de etiquetas correspondientes
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()
../_images/cd120adece0f14c46ff32cf120b41938b7d68e763014467cc9d9e434f7e903ab.png ../_images/e4aa9a74644f61961925d1a0bd5290e63b260953eb3e289bd4ec3ce9a9fb2f8d.png

Entrenamiento#

Si las carpetas están configuradas correctamente, podemos pasar las carpetas al entrenamiento.

# configurar el clasificador y dónde debe guardarse
segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl")

# configurar el conjunto de características utilizado para el entrenamiento
features = apoc.PredefinedFeatureSet.object_size_1_to_5_px.value

# entrenar el clasificador en las carpetas
apoc.train_classifier_from_image_folders(
    segmenter, 
    features, 
    image = image_folder, 
    ground_truth = masks_folder)

Predicción#

Después del entrenamiento, podemos aplicar el clasificador a todas las imágenes en la carpeta de imágenes. La siguiente línea recarga el clasificador desde el disco. De esta manera, podemos asegurarnos de que se almacenó correctamente.

segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl")
# mostrar todas las imágenes
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[0])
    
    labels = segmenter.predict(image)
    cle.imshow(labels, plot=axs[1], labels=True)
    
    plt.show()
../_images/87104cad79a596217019fd247bffb31553d50efb1674aed8d1bff864f6c52974.png ../_images/20de8cbf90df9a0c549e32b707649368178f0b9ed64eb7b4311350131333d58f.png ../_images/36804e8e6857907f95887f070873b3bf099ff433abdd0f6249f549cc14a58ae0.png ../_images/4f59401cd2bbe2dbe36d79bbbd1f469f6e507dc8e24efc23b1a60672b9d324da.png