Skip to content

Instantly share code, notes, and snippets.

@pangyuteng
Last active November 16, 2022 18:34
Show Gist options
  • Save pangyuteng/d062252d4eb02e25d9ea4b7ffd5bcd54 to your computer and use it in GitHub Desktop.
Save pangyuteng/d062252d4eb02e25d9ea4b7ffd5bcd54 to your computer and use it in GitHub Desktop.
3d image patch extraction
**/.ipynb_checkpoints/*
ok.png
ok.nii.gz
workdir/*

problem statement

When moving the patches generated by tf.extract_volume_patches or tf.image.extract_patches back to its original shape with tf.reshape or np.reshape methods, the result will be incorrect.

Above issue is explained in below extensively.

https://stackoverflow.com/questions/44047753/reconstructing-an-image-after-using-extract-image-patches

Note Stop right here if just need non overlapping patches:

  • see if np.reshape fits your bill - which usually does, then use that! (np-extract-patches.ipynb)

https://stackoverflow.com/questions/31527755/extract-blocks-or-patches-from-numpy-array

  • also for 2d images, for non-overlapping patches, one can use tf.nn.space_to_depth and tf.nn.depth_to_space. See tf-space-to-depth.ipynb.

  • alternatively if you prefer c++, git ITK a try.

https://discourse.itk.org/t/patch-extraction/3630

https://itk.org/ITKExamples/src/Filtering/ImageGrid/ExtractRegionOfInterestInOneImage/Documentation.html

solutions

Several solutions to resolve the above issue are listed below:

notebooks can be executed following below prep script within tf container.
docker run -it -p 8888:8888 -w /workdir -v $PWD:/workdir tensorflow/tensorflow:2.6.1-gpu-jupyter bash
bash prep.sh
jupyter notebook --ip=* --allow-root

additional thoughts

whatever solutions you end up using, doesn't really matter during training.

You will for sure get a performance hit during inference. For problems dealing with 3d patches, tf.extract_volume_patches may be one method, but for medical images, depending on hardware, OOM may occur.

  • thus now you are back to for loops with python/numpy for preprocessing -> batch wise inference -> reshape

  • alternatively, chop up the volume to cubes (faster than for loops) -> feed that asyncronously to multiple serving end points -> gather the results and do the reshape.

  • wait until you get the budget to run jumbo gpus for inference 24/7.

reference


https://stackoverflow.com/questions/41564321/split-image-tensor-into-small-patches
https://stackoverflow.com/questions/44047753/reconstructing-an-image-after-using-extract-image-patches
https://stackoverflow.com/questions/40731433/understanding-tf-extract-image-patches-for-extracting-patches-from-an-image

https://stackoverflow.com/questions/53451728/n-dimensional-sliding-window-operation-in-python-using-gpu-accelerated-libraries
https://stackoverflow.com/questions/35691947/3d-sliding-window-operation-in-theano


vae patch
Discovering Digital Tumor Signatures—Using Latent Code Representations to Manipulate and Classify Liver Lesions
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8269051

pediatric-ct-seg
https://wiki.cancerimagingarchive.net/pages/viewpage.action?pageId=89096588#89096588bcab02c187174a288dbcbf95d26179e8

Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
echo 'pip intalling stuff'
pip install -r requirements.txt
echo 'downloading 2d image'
curl --output ok.png https://i.imgur.com/euaZxKf.png
echo 'downloading 3d image'
python utils.py
pydicom
SimpleITK
imageio
scipy
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import numpy as np\n",
"\n",
"import imageio\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 1024, 1024, 1)\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f7ae89e5bb0>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"img = imageio.imread('ok.png')\n",
"img = np.expand_dims(img[:,:,0],0)\n",
"img = np.expand_dims(img,-1)\n",
"print(img.shape)\n",
"plt.imshow(img.squeeze(),cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 32, 32, 1024)\n"
]
}
],
"source": [
"patches = tf.nn.space_to_depth(img, 32)\n",
"print(patches.shape)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 1024, 1024, 1)\n"
]
}
],
"source": [
"patches = tf.nn.depth_to_space(patches,32)\n",
"print(patches.shape)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f7ae7f04370>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(np.array(patches).squeeze(),cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"ename": "InvalidArgumentError",
"evalue": "Input rank should be 4 instead of 5 [Op:SpaceToDepth]",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mInvalidArgumentError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-10-81d79967f97f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mimg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m128\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m128\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m128\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpatches\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspace_to_depth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpatches\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/util/dispatch.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[0;34m\"\"\"Call target, and fall back on dispatchers if there is a TypeError.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 206\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 207\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;31m# Note: convert_to_eager_tensor currently raises a ValueError, not a\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/array_ops.py\u001b[0m in \u001b[0;36mspace_to_depth_v2\u001b[0;34m(input, block_size, data_format, name)\u001b[0m\n\u001b[1;32m 4007\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mdispatch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_dispatch_support\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4008\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mspace_to_depth_v2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mblock_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_format\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"NHWC\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# pylint: disable=redefined-builtin\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4009\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgen_array_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspace_to_depth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mblock_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_format\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4010\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4011\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/gen_array_ops.py\u001b[0m in \u001b[0;36mspace_to_depth\u001b[0;34m(input, block_size, data_format, name)\u001b[0m\n\u001b[1;32m 9961\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_result\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9962\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 9963\u001b[0;31m \u001b[0m_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraise_from_not_ok_status\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9964\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_FallbackException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9965\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mraise_from_not_ok_status\u001b[0;34m(e, name)\u001b[0m\n\u001b[1;32m 6939\u001b[0m \u001b[0mmessage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\" name: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m\"\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6940\u001b[0m \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6941\u001b[0;31m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraise_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_status_to_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6942\u001b[0m \u001b[0;31m# pylint: enable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6943\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.8/dist-packages/six.py\u001b[0m in \u001b[0;36mraise_from\u001b[0;34m(value, from_value)\u001b[0m\n",
"\u001b[0;31mInvalidArgumentError\u001b[0m: Input rank should be 4 instead of 5 [Op:SpaceToDepth]"
]
}
],
"source": [
"img = np.random.rand(1,128,128,128,1)\n",
"patches = tf.nn.space_to_depth(img, 32)\n",
"print(patches.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
import os
import sys
import requests
import json
import zipfile
import pydicom
import SimpleITK as sitk
def download_images(series_instance_uid,image_root="."):
url = f"https://services.cancerimagingarchive.net/services/v4/TCIA/query/getImage?SeriesInstanceUID={series_instance_uid}"
zip_file_path = os.path.join(image_root,series_instance_uid+'.zip')
r = requests.get(url, allow_redirects=True)
print(r.status_code)
if r.status_code != 200:
raise LookupError(f"ohoh {r.status_code}!")
open(zip_file_path, 'wb').write(r.content)
folder_path = os.path.join(image_root,series_instance_uid)
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
zip_ref.extractall(folder_path)
return folder_path
def imread(folder_path):
file_list = [os.path.join(folder_path,x) for x in os.listdir(folder_path)]
dicom_list = []
for image_file in file_list:
ds=pydicom.dcmread(image_file)
dicom_list.append((ds.InstanceNumber,image_file))
dicom_list = sorted(dicom_list,key=lambda x:x[0])
dicom_names = [x[1] for x in dicom_list]
reader = sitk.ImageSeriesReader()
reader.SetFileNames(dicom_names)
img_obj = reader.Execute()
return img_obj
if __name__ == "__main__":
series_instance_uid='1.3.6.1.4.1.14519.5.2.1.6279.6001.113679818447732724990336702075'
image_root = "/tmp/myimages"
os.makedirs(image_root,exist_ok=True)
folder_path = download_images(series_instance_uid,image_root=image_root)
img_obj = imread(folder_path)
writer = sitk.ImageFileWriter()
writer.SetFileName('ok.nii.gz')
writer.SetUseCompression(True)
writer.Execute(img_obj)
@pangyuteng
Copy link
Author

pangyuteng commented Mar 3, 2022

    ksizes = (1,100,100,1)
    strides = (1,5,5,1)
    rates = [1,1,1,1]
    padding = "SAME"
    
    input_shape = (1,100,100,1)
    volume = np.random.random(input_shape)
    print(volume.shape)
    i = tf.image.extract_patches(
        volume, ksizes, strides, rates, padding, name=None
    )


    print('input_shape',input_shape)
    print('ksizes',ksizes)
    print('strides',strides)
    print('input_shape[1]*input_shape[2]',float(input_shape[1])*float(input_shape[2]))
    print('output_shape',i.shape)
    
input_shape (1, 100, 100, 1)
ksizes (1, 100, 100, 1)
strides (1, 5, 5, 1)
input_shape[1]*input_shape[2] 10000.0
output_shape (1, 20, 20, 10000)
    

@pangyuteng
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment