{ "cells": [ { "cell_type": "markdown", "id": "ce720e69", "metadata": {}, "source": [ "# Pixel classification on OpenCL-compatible GPUs\n", "APOC is based on [pyclesperanto](https://github.com/clEsperanto/pyclesperanto_prototype) and [sklearn](https://scikit-learn.org/stable/).\n", "\n", "Let's start with loading an example image and some ground truth:" ] }, { "cell_type": "code", "execution_count": 1, "id": "030613f9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from skimage.io import imread, imshow\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import apoc\n", "\n", "image = imread('blobs.tif')\n", "imshow(image)" ] }, { "cell_type": "code", "execution_count": 2, "id": "85d92c3b", "metadata": {}, "outputs": [], "source": [ "if False: # you can use this to make manual annotations\n", " import napari\n", "\n", " # start napari\n", " viewer = napari.Viewer()\n", " napari.run()\n", "\n", " # add image\n", " viewer.add_image(image)\n", "\n", " # add an empty labels layer and keep it in a variable\n", " labels = np.zeros(image.shape).astype(int)\n", " viewer.add_labels(labels)\n", "else:\n", " labels = imread('annotations.tif')" ] }, { "cell_type": "code", "execution_count": 3, "id": "f9ce5403", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\rober\\miniconda3\\envs\\bio_39\\lib\\site-packages\\skimage\\io\\_plugins\\matplotlib_plugin.py:150: UserWarning: Low image data range; displaying image with stretched contrast.\n", " lo, hi, cmap = _get_display_range(image)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "manual_annotations = labels\n", "\n", "from skimage.io import imshow\n", "imshow(manual_annotations, vmin=0, vmax=3)" ] }, { "cell_type": "markdown", "id": "f0299779", "metadata": {}, "source": [ "## Training\n", "We now train a PixelClassifier, which is under the hood a [scikit-learn RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html). After training, the classifier will be converted to [clij-compatible OpenCL code](https://github.com/clEsperanto/clij-opencl-kernels) and save to disk under a given filename." ] }, { "cell_type": "code", "execution_count": 4, "id": "8c162a7f", "metadata": {}, "outputs": [], "source": [ "# define features: original image, a blurred version and an edge image\n", "features = \"original gaussian_blur=2 sobel_of_gaussian_blur=2\"\n", "\n", "# this is where the model will be saved\n", "cl_filename = 'my_model.cl'\n", "\n", "apoc.erase_classifier(cl_filename)\n", "clf = apoc.PixelClassifier(opencl_filename=cl_filename)\n", "clf.train(features, manual_annotations, image)" ] }, { "cell_type": "markdown", "id": "5e231f60", "metadata": {}, "source": [ "## Prediction\n", "The classifier can then be used to classify all pixels in the given image. Starting point is again, the feature stack. Thus, the user must make sure that the same features are used for training and for prediction. " ] }, { "cell_type": "code", "execution_count": 5, "id": "efe2721c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\rober\\miniconda3\\envs\\bio_39\\lib\\site-packages\\skimage\\io\\_plugins\\matplotlib_plugin.py:150: UserWarning: Low image data range; displaying image with stretched contrast.\n", " lo, hi, cmap = _get_display_range(image)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "result = clf.predict(image=image)\n", "imshow(result)" ] }, { "cell_type": "code", "execution_count": null, "id": "3cf56937", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" } }, "nbformat": 4, "nbformat_minor": 5 }