Classification des pixels sur des GPU compatibles OpenCL#
Alternativement à la segmentation d’objets ou “d’instances”, nous pouvons également effectuer une segmentation sémantique en classifiant les pixels.
Commençons par charger une image d’exemple et une vérité terrain :
from skimage.io import imread
import matplotlib.pyplot as plt
import numpy as np
import apoc
import pyclesperanto_prototype as cle
image = imread('../../data/blobs.tif')
cle.imshow(image)
manual_annotations = imread('../../data/blobs_annotations.tif')
from skimage.io import imshow
cle.imshow(manual_annotations, labels=True)
Entraînement#
Nous allons maintenant entraîner un PixelClassifier, qui est en réalité un RandomForestClassifier de scikit-learn. Après l’entraînement, le classificateur sera converti en code OpenCL compatible avec clij et sauvegardé sur le disque sous un nom de fichier donné.
# define features: original image, a blurred version and an edge image
features = "original gaussian_blur=2 sobel_of_gaussian_blur=2"
# this is where the model will be saved
cl_filename = 'my_model.cl'
apoc.erase_classifier(cl_filename)
clf = apoc.PixelClassifier(opencl_filename=cl_filename)
clf.train(features, manual_annotations, image)
Prédiction#
Le classificateur peut ensuite être utilisé pour classer tous les pixels de l’image donnée. Le point de départ est à nouveau la pile de caractéristiques. Ainsi, l’utilisateur doit s’assurer que les mêmes caractéristiques sont utilisées pour l’entraînement et pour la prédiction.
result = clf.predict(image=image)
cle.imshow(result, labels=True)