Entraînement des classifieurs de pixels à partir de dossiers d’images#

Lors de l’entraînement des classifieurs de pixels, il est souvent logique d’utiliser plusieurs images. Par exemple, lorsque les images ont un aspect différent, en particulier entre les conditions, il est nécessaire d’entraîner les classifieurs avec plusieurs images de toutes les conditions.

Dans ce notebook, nous montrons comment entraîner des classifieurs APOC en utilisant deux dossiers contenant des paires de données d’entraînement.

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

Préparation des données#

Nous commençons par sélectionner deux dossiers d’entrée. Un avec des images, et un avec des images d’étiquettes annotées de manière éparse. Les noms des fichiers dans ce dossier doivent être identiques par paires. Nous allons également jeter un coup d’œil rapide dans ces dossiers.

À des fins de démonstration, nous réutilisons les données du jeu de données BBBC007 version 1 (Jones et al., Proc. ICCV Workshop on Computer Vision for Biomedical Image Applications, 2005), disponibles dans 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)

# montrer toutes les 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()
    
# montrer les images d'étiquettes correspondantes
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

Entraînement#

Si les dossiers sont correctement configurés, nous pouvons les passer à l’entraînement.

# configurer le classifieur et où il doit être sauvegardé
segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl")

# configurer l'ensemble de caractéristiques utilisées pour l'entraînement
features = apoc.PredefinedFeatureSet.object_size_1_to_5_px.value

# entraîner le classifieur sur les dossiers
apoc.train_classifier_from_image_folders(
    segmenter, 
    features, 
    image = image_folder, 
    ground_truth = masks_folder)

Prédiction#

Après l’entraînement, nous pouvons appliquer le classifieur à toutes les images du dossier d’images. La ligne suivante recharge le classifieur depuis le disque. De cette façon, nous pouvons nous assurer qu’il a été correctement stocké.

segmenter = apoc.ObjectSegmenter(opencl_filename="test2.cl")
# montrer toutes les 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[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