Created
July 7, 2023 17:57
-
-
Save kaczmarj/41c351be6f52aa6a553cc12ba98a9103 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "30a2e806", | |
"metadata": {}, | |
"source": [ | |
"# Benchmark openslide vs tiffslide\n", | |
"\n", | |
"With CMU images from OpenSlide test data, Tiffslide is generally faster than Openslide. With SVS slides from TCGA, however, Tiffslide is much slower." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "cdb427ed", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"tiffslide 2.1.2\n", | |
"openslide 1.2.0\n", | |
"tifffile 2023.7.4\n", | |
"numpy 1.25.0\n", | |
"PIL 9.5.0\n", | |
"Python 3.10.12 | packaged by conda-forge | (main, Jun 23 2023, 22:40:32) [GCC 12.3.0]\n" | |
] | |
} | |
], | |
"source": [ | |
"import tiffslide\n", | |
"import openslide\n", | |
"import tifffile\n", | |
"import numpy as np\n", | |
"import PIL\n", | |
"\n", | |
"for m in [tiffslide, openslide, tifffile, np, PIL]:\n", | |
" print(f\"{m.__name__:<11}{m.__version__}\")\n", | |
" \n", | |
"import sys\n", | |
"print(\"Python\", sys.version)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "43bad576", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def benchmark(wsi_path):\n", | |
" t = tiffslide.TiffSlide(wsi_path)\n", | |
" o = openslide.OpenSlide(wsi_path)\n", | |
" \n", | |
" print(\"Openslide -- get thumbnail\")\n", | |
" %timeit o.get_thumbnail((256, 256))\n", | |
" print(\"Tiffslide -- get thumbnail\")\n", | |
" %timeit t.get_thumbnail((256, 256))\n", | |
" print()\n", | |
" \n", | |
" kwargs = dict(location=(20_000, 15_000), level=0, size=(256, 256))\n", | |
" print(\"Openslide -- read region at level 0\")\n", | |
" %timeit o.read_region(**kwargs)\n", | |
" print(\"Tiffslide -- read region at level 0\")\n", | |
" %timeit t.read_region(**kwargs)\n", | |
" print()\n", | |
" \n", | |
" kwargs = dict(location=(20_000, 15_000), level=2, size=(256, 256))\n", | |
" print(\"Openslide -- read region at level 2\")\n", | |
" %timeit o.read_region(**kwargs)\n", | |
" print(\"Tiffslide -- read region at level 2\")\n", | |
" %timeit t.read_region(**kwargs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "c12da821", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Openslide -- get thumbnail\n", | |
"711 ms ± 18.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", | |
"Tiffslide -- get thumbnail\n", | |
"2.27 s ± 38.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", | |
"\n", | |
"Openslide -- read region at level 0\n", | |
"1.89 ms ± 17.8 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", | |
"Tiffslide -- read region at level 0\n", | |
"77.5 ms ± 2.1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", | |
"\n", | |
"Openslide -- read region at level 2\n", | |
"6.93 ms ± 250 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"Tiffslide -- read region at level 2\n", | |
"73.5 ms ± 1.21 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"# From https://portal.gdc.cancer.gov/files/d46167af-6c29-49c7-95cf-3a801181aca4\n", | |
"benchmark(\"/tmp/tiffslide/images/TCGA-SVS/TCGA-3C-AALI-01Z-00-DX1.F6E9A5DF-D8FB-45CF-B4BD-C6B76294C291.svs\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "e6d1017d", | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Openslide -- get thumbnail\n", | |
"215 ms ± 14.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", | |
"Tiffslide -- get thumbnail\n", | |
"117 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", | |
"\n", | |
"Openslide -- read region at level 0\n", | |
"1.86 ms ± 20.3 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", | |
"Tiffslide -- read region at level 0\n", | |
"2.46 ms ± 110 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"\n", | |
"Openslide -- read region at level 2\n", | |
"6.86 ms ± 149 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"Tiffslide -- read region at level 2\n", | |
"2.67 ms ± 60 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"# From https://openslide.cs.cmu.edu/download/openslide-testdata/Aperio/CMU-1.svs\n", | |
"benchmark(\"/tmp/tiffslide/images/Aperio/CMU-1.svs\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "11b22c45", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Openslide -- get thumbnail\n", | |
"5.03 ms ± 125 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"Tiffslide -- get thumbnail\n", | |
"5.04 ms ± 158 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"\n", | |
"Openslide -- read region at level 0\n", | |
"1.84 ms ± 7.96 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", | |
"Tiffslide -- read region at level 0\n", | |
"1.65 ms ± 30.3 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", | |
"\n", | |
"Openslide -- read region at level 2\n", | |
"7.09 ms ± 198 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", | |
"Tiffslide -- read region at level 2\n", | |
"1.93 ms ± 22.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"# From https://openslide.cs.cmu.edu/download/openslide-testdata/Generic-TIFF/CMU-1.tiff\n", | |
"benchmark(\"/tmp/tiffslide/images/Generic-TIFF/CMU-1.tiff\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "8a930846", | |
"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.10.12" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment