Skip to content

Releases: rapidsai/cucim

v23.06.00

07 Jun 14:59
fdc657b
Compare
Choose a tag to compare

🚨 Breaking Changes

🐛 Bug Fixes

  • Fix SHA256 check failure in test suite (#564) @grlee77
  • Handle space character in ./run download_testdata (#556) @gigony
  • Fix return_error='always' behavior in phase_cross_correlation (#549) @grlee77
  • Only load versioned libcufile (#548) @jakirkham
  • add a 20 minute timeout for pytest runs on CI (#545) @grlee77
  • protect against possible out of bounds memory access in 2D distance transform (#540) @grlee77

📖 Documentation

  • Fix doc building via run build_package (#553) @grlee77
  • update changelog for release 23.04.00 and 23.04.01 (#552) @grlee77

🛠️ Improvements

v23.04.01

13 Apr 19:07
4e2346c
Compare
Choose a tag to compare

🚨 Breaking Changes

  • Fix inefficiency in handling clipping of image range in resize and other transforms (#516) @grlee77

🐛 Bug Fixes

  • Fix bug in median filter with non-uniform footprint (#521) @grlee77
  • use cp.around instead of cp.round for CuPy 10.x compatiblity (#508) @grlee77
  • Fix error in LZ4-compressed Zarr writing demo (#506) @grlee77
  • Normalize whitespace. (#474) @bdice

🛠️ Improvements

v23.04.00

12 Apr 13:23
d60d728
Compare
Choose a tag to compare

🚨 Breaking Changes

  • Fix inefficiency in handling clipping of image range in resize and other transforms (#516) @grlee77

🐛 Bug Fixes

  • Fix bug in median filter with non-uniform footprint (#521) @grlee77
  • use cp.around instead of cp.round for CuPy 10.x compatiblity (#508) @grlee77
  • Fix error in LZ4-compressed Zarr writing demo (#506) @grlee77
  • Normalize whitespace. (#474) @bdice

🛠️ Improvements

v23.02.00

09 Feb 15:47
b8cfaa2
Compare
Choose a tag to compare

🚨 Breaking Changes

  • Add disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486) @grlee77

🐛 Bug Fixes

📖 Documentation

🚀 New Features

  • Add colocalization measures (#488) @grlee77
  • Add disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486) @grlee77

🛠️ Improvements

v22.12.00

08 Dec 14:58
Compare
Choose a tag to compare

🚨 Breaking Changes

  • Implement additional deprecations carried out for scikit-image 0.20 (#451) @grlee77
  • improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423) @grlee77

🐛 Bug Fixes

  • pin to cmake !3.25.0 on CI to avoid bug with CUDA+conda during build (#444) @grlee77
  • update incorrect argument and deprecated function for tifffile.TiffWriter (#433) @JoohyungLee0106
  • Fix rotate behavior for ndim > 2 (#432) @grlee77

📖 Documentation

  • add whole-slide tiled read/write demos for measuring GPUDirect Storage (GDS) I/O performance (#452) @grlee77
  • Add demo for distance_transform_edt (#394) @grlee77

🚀 New Features

  • Support no-compression method in converter (#443) @gigony
  • add three segmentation metrics (#425) @grlee77
  • add isotropic binary morphology functions (#421) @grlee77
  • Add blob feature detectors (blob_dog, blob_log, blob_doh) (#413) @monzelr

🛠️ Improvements

  • additional minor updates (skimage 0.20) (#455) @grlee77
  • Implement additional deprecations carried out for scikit-image 0.20 (#451) @grlee77
  • Faster hessian_matrix_* and structure_tensor_eigvals via analytical eigenvalues for the 3D case (#434) @grlee77
  • use fused kernels to reduce overhead in corner detector implementations (#426) @grlee77
  • Misc updates for consistency with scikit-image 0.20 (#424) @grlee77
  • improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423) @grlee77
  • analytical moments computations, support pixel spacings in moments and regionprops (#422) @grlee77
  • Forward merge branch-22.10 to branch-22.12 (#420) @grlee77
  • Support sampling kwarg for distance_transform_edt (take pixel/voxel sizes into account) (#407) @grlee77
  • Improve performance of Euclidean distance transform (#406) @grlee77

v22.10.00

12 Oct 14:45
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Correctly use dtype when computing shared memory requirements of separable convolution (#409) @grlee77
  • Forward-merge branch-22.08 to branch-22.10 (#403) @jakirkham
  • Add missing imports of euler_number and perimeter_crofton (#386) @grlee77

📖 Documentation

🚀 New Features

🛠️ Improvements

v22.08.01

01 Sep 18:01
Compare
Choose a tag to compare

This release fixes a bug in the 2D Euclidean distance transform for larger images.

🐛 Bug Fixes

  • Euclidean distance transform: fix bad choice of block parameters (#393) @grlee77

v22.08.00

17 Aug 14:41
Compare
Choose a tag to compare

🚨 Breaking Changes

  • Stain extraction: use a less strict condition across channels when thresholding (#316) @grlee77

🐛 Bug Fixes

  • create SimilarityTransform using CuPy 9.x-compatible indexing (#365) @grlee77
  • Add __init__.py in cucim.core (#359) @jakirkham
  • Stain extraction: use a less strict condition across channels when thresholding (#316) @grlee77
  • Incorporate bug fixes from skimage 0.19.3 (#312) @grlee77
  • fix RawKernel bug for canny filter when quantiles are used (#310) @grlee77

📖 Documentation

🚀 New Features

  • Add segmentation with the Chan-Vese active contours method (#343) @grlee77
  • Add cucim.skimage.morphology.medial_axis (#342) @grlee77
  • Add cucim.skimage.segmentation.expand_labels (#341) @grlee77
  • Add Euclidean distance transform for images/volumes (#318) @grlee77

🛠️ Improvements

v22.06.00

07 Jun 15:37
Compare
Choose a tag to compare

The 22.06.00 release adds a new function cucim.skimage.segmentation.clear_border that can be used to remove any labels touching the image/volume border. There are also new functions for stain extraction and normalization of digital pathology slides stained with hematoxyling and eosin: cucim.core.operations.color.stain_extraction_pca and cucim.core.operations.color.normalize_colors_pca.

Aside from this, there are also a number of performance improvements. Specifically, edge detection with cucim.skimage.feature.canny should be 3-4x faster than previously. Binary and grayscale morphological operations can now be performed much faster for large footprint sizes. To take advantage of this, set the decomposition kwarg of the footprint-generation functions to 'series', 'separable' or 'crosses', as available. This provides a sequence of small footprints (structuring elements) that can be passed to the footprint argument of any morphology function, enabling identical output in a much shorter run time. The specific functions in cucim.skimage.morphology that support this new feature are square, rectangle, diamond, disk, ellipse, octagon, cube, ball and octahedron.

One backward incompatible change was made to the dtype used when casting 8 and 16-bit signed and unsigned integer data types to floating point. Specifically when functions convert these types to floating point, 32-bit precision will now be used. Previously these were promoted to 64-bit floating point as in upstream scikit-image. This change was made to improve performance and reduce memory consumption.

Although not new to this release, we would like to encourage users to set the CUPY_ACCELERATORS environment variable to "cub,cutensor". This improves the performance of many functions involving histograms (e.g. cucim.skimage.filters.threshold_otsu) or reduction operations (e.g. cucim.skimage.transform.integral_image).

Additional details of the changes in this release are given below.

🚨 Breaking Changes

  • Promote small integer types to single rather than double precision (#278) @grlee77

🐛 Bug Fixes

  • Populate correct channel names for RGBA image (#294) @gigony
  • Merge branch-22.04 into branch-22.06 (#258) @jakirkham
  • Fix: return object-typed properties as NumPy arrays in skimage.measure.regionprops_table (#272) @alxndrkalinin

📖 Documentation

🚀 New Features

  • add missing cucim.skimage.segmentation.clear_border function (#267) @grlee77
  • add cucim.core.operations.color.stain_extraction_pca and cucim.core.operations.color.normalize_colors_pca for digital pathology H&E stain extraction and normalization (#273) @grlee77, @drbeh

🛠️ Improvements

  • Update to use DLPack v0.6 (#295) @gigony
  • Remove plugin-related messages temporarily (#291) @gigony
  • Simplify recipes (#286) @Ethyling
  • Use cupy.fuse to improve efficiency hessian_matrix_eigvals (#280) @grlee77
  • Promote small integer types to single rather than double precision (#278) @grlee77
  • improve efficiency of histogram-based thresholding functions (#276) @grlee77
  • Enable footprint decomposition for morphology (#274) @grlee77
  • Remove unused dependencies in GPU tests job (#268) @Ethyling
  • Use conda compilers (#232) @Ethyling
  • Build packages using mambabuild (#216) @Ethyling

New Contributors

v22.04.00

06 Apr 14:51
Compare
Choose a tag to compare

This version would be available through both Conda (https://anaconda.org/rapidsai/cucim) and PyPI package (https://pypi.org/project/cucim/22.04.00/).

cuCIM's GPUDirectStorage (GDS) API was introduced at GTC 2022 Spring "Accelerating Storage IO to GPUs with Magnum IO [S41347]" session on March 24.

cuCIM's GDS API examples are available at https://github.com/NVIDIA/MagnumIO/tree/main/gds/readers/cucim-gds.

In the below sections, ✨ means that the item is a new change in cuCIM's PyPI package, compared with the previous release (v22.02.01).

🚨 Breaking Changes

  • Apply fixes to skimage.transform scheduled for scikit-image 0.19.2 (#208) @grlee77

🐛 Bug Fixes

  • ✨ Fix ImportError from vendored code (#252) @grlee77
  • ✨ Fix wrong dimension in metadata (#248) @gigony
  • Handle file descriptor ownership and update documents for GDS (#234) @gigony
  • Check nullptr of handler in CuFileDriver::close() (#229) @gigony
  • Fix docs builds (#218) @ajschmidt8
  • Apply fixes to skimage.transform scheduled for scikit-image 0.19.2 (#208) @grlee77

🚀 New Features

  1. Randomization of transforms per image per batch (#231) @shekhardw

  2. Expose data type of CuImage object for interoperability with NumPy (#246) @gigony

1. Randomization of transforms per image per batch

Random Color Jitter transform implemented. Random Image Flip, Random Image Rotate90 and Random Zoom transforms are updated to apply transforms per image per batch. Execution of these transforms on per image per batch basis may result in increase in runtime.

2. Expose data type of CuImage object for interoperability with NumPy

  • CuImage object exposes typestr property.
  • DLDataType and DLDataTypeCode type is available under cucim.clara.

Prior to this change, it was not easy to convert CuImage's dtype (DLDataType) to NumPy's dtype and had to use the below workaround.

>>> from cucim import CuImage
>>> a = CuImage("notebooks/input/image.tif")
>>> b = a.read_region((0,0), (10,10))
>>> import numpy as np
>>> np.dtype(b.__array_interface__["typestr"]) # b would expose `__cuda_array_interface__` if memory is in GPU.
dtype('uint8')

With this change, we can convert the data type of CuImage to NumPy's dtype easily, and also can access cuCIM's DLDataType.

>>> from cucim import CuImage
>>> a = CuImage("notebooks/input/image.tif")
>>> b = a.read_region((0,0), (10,10))
>>> import numpy as np
>>> b.typestr
'|u1'
>>> np.dtype(b.typestr) == np.uint8
True
>>> from cucim.clara import DLDataType, DLDataTypeCode
>>> b.dtype == DLDataType(DLDataTypeCode.DLUInt, 8, 1)
True

🛠️ Improvements

  • Remove verbose plugin messages temporarily (only available in the PyPI package)
    • Address #109 ([BUG] - Info messages appearing as warnings in Jupyter notebooks)
    • Will support log level configuration later with the official PR.
  • Temporarily disable new ops-bot functionality (#239) @ajschmidt8
  • Add .github/ops-bot.yaml config file (#236) @ajschmidt8

📖 Documentation