Releases: tue-bmd/zea
v0.1.0a1 (OpenH-RF)
This dev pre-release v0.1.0a1 finalizes the new zea data format designed for the OpenH-RF initiative (see #318). Most important changes included the parameter redesign and updates to the zea file format.
Parameter redesign
Simplified parameter handling from loading parameters from file to usage in a zea.Pipeline.
zea.Scanwas renamed tozea.Parameters- A
zea.Filewill store two groups of parameters,scanandprobe. These are loaded together into thezea.Parametersclass upon loading throughzea.File.load_parameters(). See the Getting Started page in the docs for more info.
import zea
path = ...
with zea.File(path) as f:
data = f.data.raw_data[:] # or one of the other data keys if present
params = f.load_parameters() # returns a `zea.Parameters` class
# f.scan and f.probe will still work, but will give you `ScanSpec` and `ProbeSpec` containers.
# the recommend way is to use `f.load_parameters` to load all parameters at once.Passing these parameters to a zea.Pipeline is now also simplified. Instead of juggling with both scan and probe objects, you now only manage a single zea.Parameters class.
pipeline = ... # define a `zea.Pipeline` through a config, in code, etc.
inputs = pipeline.prepare_parameters(parameters) # precomputes and converts to tensors, puts on device
outputs = pipeline(data=data, **inputs)File redesign
zea.File contents were updated for improved standardization and robustness. While "legacy" files (stored with zea version pre v0.1.0) are still accepted they will be deprecated in the future. There are mainly more standardized fields in the file, but there are also some breaking changes (which are currently handled by the legacy path):
- Additionally to
scangroup, we now also store aprobegroup with parameters belonging specifically to the probe (zea.data.spec.ProbeSpec). This was previously only aprobe_namewhich is now deprecated. data/raw_datais the only flat array still.data/aligned_data,data/beamformed_data,data/envelope_dataanddata/imageare now all hdf5 datasets (zea.data.spec.Map) which havevaluesandcoordinatesstored such that the extent is known.data/image_scwas removed as a standardized field (as one can specify the coordinates now). Custom fields are still allowed.- There is now the possibility to store multiple "tracks" in one file. These are considered transmits from the same acquisition (so share the same probe parameters) but generally require different set of scan parameters and a different processing pipeline after loaded. Think of transmit events belong to a B-mode acquisition and a Doppler acquisition. For more info see multi track files docs.
- Compression default was changed to
lzffromgzip(#396) probe.center_frequencywas renamed toprobe.probe_center_frequencyto distinguish from the transmitscan.center_frequency. Also all names found inscanandprobeare required to be none-overlapping as they are merged inzea.Parametersclass.- Raw data (
data/raw_data) can now also be stored asint16which is a good and efficient default due to the sampling limit of most ADCs. This does mean that you might need to add a casting operationzea.ops.Cast(dtype="float32")at the start of your pipeline to make sure to not get any dtype errors later in the pipeline.
New Features
zea.models.speckle2self.Speckle2Selfdespeckling model was added.from zea.models.flow_matching.FlowMatchingModelgenerative model was added.- Percentile based normalization in
zea.ops.Normalizewas added. - PICMUS, CAMUS and CETUS dataset are now stored with all their metadata (segmentation maps, probe information etc.) as supported by the new zea file format.
What's Changed
- Add percentile based normalization by @wesselvannierop in #353
- Dataloader: option to disable re-shuffle by @wesselvannierop in #352
- Speed up pfield computation, and fix near-field artifact by @wesselvannierop in #267
- Move
Maps fromextent->coordinatesby @OisinNolan in #362 - Speed up simulation notebook pytest by @tristan-deep in #371
- Add warnings for optional scan fields, fix nested warnings by @swpenninga in #361
- File operations CLI now works with folders too by @wesselvannierop in #354
- Add legacy data format support for v0.1.0 by @swpenninga in #368
- Allow broadcasting of
Map.coordinatesby @OisinNolan in #380 - Do not run heavy-tests on openh-rf by @wesselvannierop in #381
- Acquisition tracks in DataSpec by @OisinNolan in #359
- Merge main into openh-rf by @tristan-deep in #382
- Make aligned data spatial map & Allow 2D segmentations by @swpenninga in #383
- Extended ProbeSpec by @tristan-deep in #379
- Improved pipeline docs by @tristan-deep in #384
- Updated conversion scripts (PICMUS, CAMUS, CETUS) by @tristan-deep in #385
- Improve Tracks docs wording by @OisinNolan in #387
- Split heavy tests by @swpenninga in #393
- 🚨 Less warnings file and scan loading by @tristan-deep in #395
- Add FlowMatching model by @swpenninga in #378
- Bump ruff from 0.15.12 to 0.15.14 in the python-packages group across 1 directory by @dependabot[bot] in #370
- Adding timeouts to all workflows by @tristan-deep in #397
- Speckle2Self implementation by @tristan-deep in #377
- Changed compression default to lzf by @tristan-deep in #399
- Replace zeahub link in 3D notebook by @OisinNolan in #403
- Add preset for 12ch flowmatching model by @swpenninga in #406
- Parameters redesign by @wesselvannierop in #392
- Add HF
--uploadoption to verasonics conversion CLI by @OisinNolan in #404
Full Changelog: v0.1.0a0...v0.1.0a1
v0.1.0a0 (OpenH-RF)
First dev pre-release v0.1.0a0 which includes the new dataspec for OpenH-RF (see #318).
What's Changed
- Update CITATION.cff (JOSS publication) by @tristan-deep in #342
- Fix citation display documentation by @tristan-deep in #343
- Dataloader: adds shape attribute and seeds pipeline by @wesselvannierop in #339
- Bump the python-packages group with 2 updates by @dependabot[bot] in #341
- Add REFoCUS Pipeline operation by @swpenninga in #336
- Add CONTRIBUTING.md by @tristan-deep in #346
- Fix dependabot ignore by @dependabot[bot] in #345
- Improve diffusion docstrings by @Copilot in #337
- Don't cancel heavy-tests on main branch by @Copilot in #348
- Improve device handling by @tristan-deep in #349
- New zea dataspec by @tristan-deep in #307
New Contributors
- @Felixduelmer made their first contribution in #307
Full Changelog: v0.0.13...v0.1.0a0
v0.0.13
Addition of nuclear diffusion method for cardiac dehazing, see the added notebook example for a usage of zea.func.dehaze_nuclear_diffusion. Also small fix in the JAX docker image.
What's Changed
- Bump ruff from 0.15.10 to 0.15.11 in the python-packages group across 1 directory by @dependabot[bot] in #326
- Don't downgrade
keras_ops.pywhen developer uses older Keras version in #325 - Fix protobuf version mismatch warning when importing zea with JAX in #332
- Change docker build arg defaults in #334
- Nuclear diffusion for cardiac ultrasound dehazing by @tristan-deep in #335
Full Changelog: v0.0.12...v0.0.13
v0.0.12
Lot's of dev improvements, but most notably a new dataloader backend, relying on Grain 🌽. While the previous dataloader required a TensorFlow installation, zea.Dataloader is backend agnostic and will work with any of the ML backends. Also try out the new adaptive ultrasound beamformers with:
import zea
zea.ops.Beamform(
beamformer="generalized_coherence_factor", # or "coherence_factor"
)API changes
- New
zea.Dataloaderclass, which is a drop-in replacement for the now deprecatedmake_dataloader()function. - New
zea.display.overlay_masks()func to overlay segmentation masks on B-mode images. - More Beamformers!
zea.ops.CoherenceFactorandzea.ops.GeneralizedCoherenceFactor.
What's Changed
- Move dataloader to Grain by @tristan-deep in #256
- Add
Parameters.update()to avoid needless recomputation by @benluijten in #294 - Fix link in README.md by @tristan-deep in #299
- Concurrency settings for heavy tests by @tristan-deep in #300
- Add dependabot.yml by @tristan-deep in #298
- Fix torch custom model notebook issue by @tristan-deep in #302
- Speed up HVAE notebook testing by @tristan-deep in #303
- Bump the github-actions group across 1 directory with 8 updates by @dependabot[bot] in #304
- Respect
CUDA_VISIBLE_DEVICESwhen usingzea.init_deviceby @tristan-deep in #316 - Add overlay_masks func by @tristan-deep in #310
- Fix echonet shape tracing with JAX backend by @tristan-deep in #309
- Implementation of (Generalized) Coherence Factor Beamformer by @SajjadAfrakhteh in #320
- Bump dependency versions by @tristan-deep in #311
- Add OpenH-RF announcement to docs by @tristan-deep in #322
- Fix sphinxcontrib.bibtex version issue by @tristan-deep in #323
- Replace nans with dynamic range in
zea.display.to_8bitby @tristan-deep in #321
New Contributors
- @SajjadAfrakhteh made their first contribution in #320
Full Changelog: v0.0.11...v0.0.12
v0.0.11
Main updates include variable speed-of-sound map support in the differentiable beamformer, and improved Pipeline to config generation. Also addition of the CETUS dataset (zea conversion scripts and support).
API changes
zea.Dataset()now does not take thekeyargument anymore.- Removed
zea.ops.Merge,zea.ops.Stackandzea.ops.BranchedPipelineoperations / pipeline. zea.Config.to_yamlin favor ofzea.Config.save_to_yaml(in line withzea.Pipeline.to_yaml)zea.Pipeline.from_pathadded (in line withzea.Config.from_pathandzea.Model.from_path)
What's Changed
- Change channel dim mapping Tensorflow dataloader by @swpenninga in #254
- Add about page reference to main page docs by @tristan-deep in #257
- Fix UNet hardcoded embedding size by @Louisvh in #263
- Update zeahub phantom location by @OisinNolan in #265
- Add agent docs reference by @OisinNolan in #266
- Fix latest tagging issue with CI image by @tristan-deep in #269
- JOSS review @benfrey by @tristan-deep in #261
- Added DBUA and SOS map support by @RobinVV in #264
- Simplify Dataset & Folder, key is not needed by @wesselvannierop in #273
- Add jit speedup to example notebook by @swpenninga in #282
- Fix issues torch in ApplyWindow and FirFilter by @tristan-deep in #285
- Clean markdown block notebook example by @swpenninga in #286
- Relax Python versions by @tristan-deep in #287
- CETUS dataset by @tristan-deep in #277
- Pipeline serialization to config improvements by @tristan-deep in #288
- Clean up some agent code by @wesselvannierop in #290
New Contributors
Full Changelog: v0.0.10...v0.0.11
v0.0.10
Lots of smaller updates to pipeline, scan and config objects for improved robustness and speed. As well as the addition of the highlighted features below:
- Extended data format with new
demodulation_frequencyandtransmit_originsfields. Also added HDF5 compression support. - New
zea.ops.ApplyWindowoperation #218 - New
zea.ops.BandPassFilteroperation #223 - New generative model: Hierarchical VAE with notebook example #217
- Better 3D imaging support #202
- Harmonic imaging support #223
What's Changed
- Enable HDF5 compression for zea data format by @vincentvdschaft in #219
- Implemented windowing operation by @vincentvdschaft in #218
- EchoNetLVH Conversion Tests + Fixes by @OisinNolan in #220
- 3D Beamforming Grid by @OisinNolan in #202
- Add n_frames to scan by @vincentvdschaft in #221
- Replace shape with ops.shape in GreedyEntropy agent by @swpenninga in #224
- Add
average_entropy_across_batchto GreedyEntropy by @OisinNolan in #226 - Allow specifying batch size in metrics computation by @OisinNolan in #227
- Skip keys in
scan.to_tensorthat are provided as kwargs toprepare_parametersby @wesselvannierop in #228 - Add notebook accelerator warning by @tristan-deep in #229
- Fix default option in docstring of display funcs by @tristan-deep in #230
- Addition of HVAE by @swpenninga in #217
- Add more phantoms by @swpenninga in #234
- Configs can be pickled by @wesselvannierop in #236
- Remove backends installations from ReadTheDocs environment by @tristan-deep in #239
- Allow mixed precision for diffusion model by @tristan-deep in #237
- Harmonic imaging support by @wesselvannierop in #223
- Improve assert_equal_spacing=False by @wesselvannierop in #238
- Clarify use of L2 in DPS implementation by @OisinNolan in #240
- Update paper bibliography about page by @tristan-deep in #243
- Optimize EchoNet-LVH conversion by @OisinNolan in #225
- Add option to jit metrics (on by default) by @wesselvannierop in #235
- Allow specifying
axes_padinplot_image_gridby @OisinNolan in #244 - Add batch_dim to simulate by @swpenninga in #241
- Keep
selected_transmitsonscan.copyby @wesselvannierop in #242 - Implemented conversion fix by @vincentvdschaft in #246
- Hilbert transform fixes by @tristan-deep in #247
- Test for checking ops API imports by @tristan-deep in #248
- Simplify, generalize and improve GaussianBlur by @wesselvannierop in #250
- Catch tests where we accidentally do not test backend equivalence by @wesselvannierop in #251
- Set package version dynamically by @tristan-deep in #249
Full Changelog: v0.0.9...v0.0.10
v0.0.9
Big change to the zea API, with a better structure of zea.ops and zea.func, clearly separating the functional and operational API. Also data conversion scripts for common ultrasound datasets were cleaned up, with better documentation and tests to ensure they are up to date. Added feature is the Delay Multiply and Sum method in #205.
What's Changed
- Update papers list by @tristan-deep in #196
- Implemented delay multiply and sum by @vincentvdschaft in #205
- Add
n_eltoget_parametersof the Probe class by @swpenninga in #201 - Ensure pitch is positive by @vincentvdschaft in #210
- Clean-up workflow files by @tristan-deep in #200
- Added tests for dataset conversion to zea format by @swpenninga in #198
- Fix file permission issues in self-hosted runners by @benluijten in #212
zea.opssubpackage and beamform pipeline refactor by @tristan-deep in #204- Fix
PatchedGridcomputing pfield even when not needed by @wesselvannierop in #214 - Improve verasonics conversion script by @wesselvannierop in #211
Full Changelog: v0.0.8...v0.0.9
v0.0.8
This release brings several new features along with numerous improvements across documentation, conversion scripts, and core operations 🚀.
Some highlighted features:
- Added speckle tracking algorithms in #170
- new
zea.ops.Mapoperation in #176 - new
zea.ops.FirFilteroperation in #178 - Improved conversion scripts of public ultrasound datasets to zea format in #173
- 3D compatible beamforming in #168
- Expanding training infrastructure of diffusion models in #167 and #172
What's Changed
- Fix docker image latest tag by @tristan-deep in #157
- Update task-based notebook to use test params by @OisinNolan in #163
- Improve docs and set seed for tests by @wesselvannierop in #164
- Standardize RNG in all tests by @swpenninga in #165
- Feature/file operations by @vincentvdschaft in #132
- Fix search_file_tree regarding issue #130 by @swpenninga in #161
- Optimize shared color palette generation, add histogram function by @swpenninga in #169
- Make PatchedGrid 3D-compatible by @vincentvdschaft in #168
- Add diffusion model
test_stepfunction by @OisinNolan in #167 - Speckle tracking by @tristan-deep in #170
- Fix error when there are multiple buffers by @vincentvdschaft in #166
- Set weights for ema network during diffusion
train_stepby @OisinNolan in #172 - Set fill mode in interpolate data by @tristan-deep in #171
- Align
zea.Fileindexing withnumpyandh5pyby @wesselvannierop in #180 - Standardizing conversion scripts by @swpenninga in #173
- Additions RandomCircleInclusion augmentation by @tristan-deep in #159
- Fix hugging face links by @tristan-deep in #185
- Generalize
zea.ops.PatchedGridtozea.ops.Mapby @wesselvannierop in #176 - Set
shared_color_paletteto True by default by @swpenninga in #187 - Add FirFilter and LowPassFilter by @wesselvannierop in #178
- Added arXiv paper by @tristan-deep in #189
- Rename matlab.py data conversion script to verasonics.py by @swpenninga in #188
apply_along_axisfollows JAX implementation by @wesselvannierop in #190- Remove broken
zea.ops.Splitby @tristan-deep in #184 - Add/update docstrings of zea conversion scripts by @swpenninga in #193
- Fix discrepancy
LeeFilterwith and without batch dim by @wesselvannierop in #195
New Contributors
- @swpenninga made their first contribution in #165
Full Changelog: v0.0.7...v0.0.8
v0.0.7
Many smaller improvements to the pipeline, beamforming, parameter dependencies, and documentation.
Also fixed the import bug for missing package tkinter and more intuitive import error handling for missing backend installations. All docstrings are now tested with Sphinx doctest.
Some highlighted features:
- Decomposed Diffusion Sampling in #116
- Added waveforms and TGC to scan in #125
- A few funcs were relocated to more appropriate modules, see #126
zea.tensor_ops.vmapin #144
Important
Starting from zea v0.0.7, the minimum required Keras version is >=3.12
What's Changed
- Import(ant) fix (tkinter + backend missing) by @tristan-deep in #115
- Decomposed Diffusion Sampling Implementation by @OisinNolan in #116
- Simplified phase rotation and improved documentation by @vincentvdschaft in #123
- Pipeline traces outputs of Operations to see which keys are actually needed at the input by @wesselvannierop in #117
- Fix pipeline timing, rename fnum & angles and posterior_sampling more generic by @wesselvannierop in #118
- Fix dependency error with selected_transmits in Scan object by @vincentvdschaft in #128
- Improved documentation for transmit indexing in load_file by @vincentvdschaft in #124
- Fix Scan pickling and equality comparison after pickling by @wesselvannierop in #121
- Adding waveforms and TGC to scan, changing waveform saving by @vincentvdschaft in #125
- Feature time to peak by @vincentvdschaft in #131
- Refactor utilities: migrate save_to_gif to zea.io_lib, translate to zea.ops by @tristan-deep in #126
- Attributes of Parameters can be updated in-place now by @wesselvannierop in #133
- Map coordinates func dtype fix for higher order interpolation by @tristan-deep in #136
- Update papers list on about page and reformat BibTeX by @tristan-deep in #135
- Plot frustum vertices extended visualization options and improved tests by @tristan-deep in #137
- Remove deprecated firebase docs hosting files by @benluijten in #141
- Manually specify output keys of Pipeline for more robust tracing by @wesselvannierop in #139
- Added Sphinx doctests by @tristan-deep in #142
- Adds functional ops
envelope_detect,normalizeandlog_compressby @wesselvannierop in #140 - Refactor mapping functions into
zea.tensor_ops.vmapby @wesselvannierop in #144 - Update model documentation by @tristan-deep in #148
- Split the examples toc into multiple levels by @Louisvh in #149
Full Changelog: v0.0.6...v0.0.7
v0.0.6
Improved metrics module and new segmentation and image quality models with corresponding example notebook.
What's Changed
- Refresh metrics module by @wesselvannierop in #108
- Add task-based action selection function + tutorial by @OisinNolan in #107
- Notebook pre-commit by @tristan-deep in #109
- Add segmentation and quality models by @gillesvntnu in #105
New Contributors
- @gillesvntnu made their first contribution in #105
Full Changelog: v0.0.5...v0.0.6