Clasificación de píxeles en GPUs compatibles con OpenCL#
Como alternativa a la segmentación de objetos o “instancias”, también podemos realizar segmentación semántica mediante la clasificación de píxeles.
Comencemos cargando una imagen de ejemplo y algunos datos de verdad terreno:
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)
Entrenamiento#
Ahora entrenamos un PixelClassifier, que internamente es un RandomForestClassifier de scikit-learn. Después del entrenamiento, el clasificador se convertirá a código OpenCL compatible con clij y se guardará en el disco bajo un nombre de archivo dado.
# 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)
Predicción#
El clasificador puede utilizarse entonces para clasificar todos los píxeles de la imagen dada. El punto de partida es, de nuevo, el conjunto de características. Por lo tanto, el usuario debe asegurarse de que se utilizan las mismas características para el entrenamiento y para la predicción.
result = clf.predict(image=image)
cle.imshow(result, labels=True)