A grid sampler for N-dimensional images
Project description
Patchly
Patchly is a grid sampler for N-dimensional images enabling inference and other processing steps on extremely large images. Especially for 3D images, it has been proven successfully to inference large images patch-wise in a sliding-window approach. Patchly does just that with a very simple interface to sample and aggregate images.
The main functionalities of Patchly consist of a Sampler, which samples patches from an image based on a grid, and an Aggregator, which assembles the patches back into the shape of the original image. There is a multitude of libraries providing similar functionality already. However, they tend to work only for a limited number of usage scenarios before becoming unusable.
Patchly is the first library providing an advanced set of features for users working with sophisticated image processing pipelines requiring patch-based processing.
A complete overview of how the Sampler and Aggregator work and an in-depth explanation of the features can be found here.
Feature Summary
Patchly provides the following advanced features:
- N-dimensional image handling (1D, 2D, 3D, ...)
- Multiple border-handling strategies
- Support for any array-like images (Numpy, Tensor, Zarr, Dask, ...)
- Memory-mapped image support
- Patch overlap
- Gaussian patch averaging
- Support for images with non-spatial dimensions (channel dimension, batch dimension, ...)
- Chunk aggregation to minimize memory consumption
Numpy padding techniques
Installation
You can install patchly
via pip:
pip install patchly
Usage
Demonstration on how to use Patchly for sliding-window patchification and subsequent aggregation:
sampler = GridSampler(image, spatial_size, patch_size, step_size)
aggregator = Aggregator(sampler, output_size)
for patch, patch_bbox in sampler:
aggregator.append(patch, patch_bbox)
prediction = aggregator.get_output()
Example
Working example for inference of a 2D RGB image with Patchly in PyTorch:
import numpy as np
from patchly.sampler import GridSampler
from patchly.aggregator import Aggregator
from torch.utils.data import DataLoader, Dataset
import torch
class ExampleDataset(Dataset):
def __init__(self, sampler):
self.sampler = sampler
def __getitem__(self, idx):
# Get patch
patch, patch_bbox = self.sampler.__getitem__(idx)
# Preprocess patch
patch = patch.transpose(2, 0, 1)
return patch, patch_bbox
def __len__(self):
return len(self.sampler)
def model(x):
y = torch.rand((x.shape[0], 8, x.shape[2], x.shape[3])) # Batch, Class, Width, Height
return y
# Init GridSampler
sampler = GridSampler(image=np.random.random((1000, 1000, 3)), spatial_size=(1000, 1000), patch_size=(100, 100), step_size=(50, 50))
# Init dataloader
loader = DataLoader(ExampleDataset(sampler), batch_size=4, num_workers=0, shuffle=False)
# Init aggregator
aggregator = Aggregator(sampler=sampler, output_size=(8, 1000, 1000), spatial_first=False, has_batch_dim=True)
# Run inference
with torch.no_grad():
for patch, patch_bbox in loader:
patch_prediction = model(patch)
aggregator.append(patch_prediction, patch_bbox)
# Finalize aggregation
prediction = aggregator.get_output()
print("Inference completed!")
print("Prediction shape: ", prediction.shape)
Further examples can be found in examples
.
License
Distributed under the terms of the Apache Software License 2.0 license, "Patchly" is free and open source software
Acknowledgements
Patchly is developed and maintained by the Applied Computer Vision Lab (ACVL) of Helmholtz Imaging and the Division of Medical Image Computing at the German Cancer Research Center (DKFZ).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file patchly-0.0.17.tar.gz
.
File metadata
- Download URL: patchly-0.0.17.tar.gz
- Upload date:
- Size: 33.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ce8efcf953edac2f3c0a94a3dbab32b2676c62a082f16d5ab66062fab8ae71a |
|
MD5 | 2b3e8bb47d87b5ef64b48dc3d97d22a7 |
|
BLAKE2b-256 | 0965c8401a236d33359a2ba3dd9b5ec3bdc0cba796ee3035b9e6931a8efe03db |
File details
Details for the file patchly-0.0.17-py3-none-any.whl
.
File metadata
- Download URL: patchly-0.0.17-py3-none-any.whl
- Upload date:
- Size: 41.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a27b24f979f20693c60de2680689faf6f17c2a0c047bc7d46669482b46d0cc23 |
|
MD5 | 9f71143737e9c49ef0c2348822e36e8b |
|
BLAKE2b-256 | 17f60e5fbd0d94705386fb77ce6e6f3966cc7734071cbed3aa513dea74977053 |