Skip to content

Releases: albumentations-team/albumentations

Albumentations 1.4.7 Release Notes

14 May 00:43
f7f9596
Compare
Choose a tag to compare
  • Support our work
  • Documentation
  • Deprecations
  • Improvements and bug fixes

Support Our Work

  1. Love the library? You can contribute to its development by becoming a sponsor for the library. Your support is invaluable, and every contribution makes a difference.
  2. Haven't starred our repo yet? Show your support with a ⭐! It's just only one mouse click.
  3. Got ideas or facing issues? We'd love to hear from you. Share your thoughts in our issues or join the conversation on our Discord server for Albumentations

Documentation

Deprecations

ImageCompression

Old way:

transform = A.Compose([A.ImageCompression(
  quality_lower=75,
  quality_upper=100,
  p=0.5
)])

New way:

transform = A.Compose([A.ImageCompression(
  quality_range=(75, 100),  
  p=0.5
)])

by @MarognaLorenzo

Downscale

Old way:

transform = A.Compose([A.Downscale(
  scale_min=0.25,
  scale_max=1,
  interpolation= {"downscale": cv2.INTER_AREA, "upscale": cv2.INTER_CUBIC},
  p=0.5
)])

New way:

transform = A.Compose([A.Downscale(
  scale_range=(0.25, 1),
 interpolation_pair = {"downscale": cv2.INTER_AREA, "upscale": cv2.INTER_CUBIC},  
  p=0.5
)])

As of now both ways work and will provide the same result, but old functionality will be removed in later releases.

by @ternaus

Improvements

  • Buggix in Blur.
  • Bugfix in bbox clipping, it could be not intuitive, but boxes should be clipped by height, width and not height - 1, width -1 by @ternaus
  • Allow to compose only keys, that are required there. Any extra unnecessary key will give an error by @ayasyrev
  • In PadIfNeeded if value parameter is not None, but border mode is reflection, border mode is changed to cv2.BORDER_CONSTANT by @ternaus

Albumentations 1.4.6 Release Notes

04 May 05:33
16a55ae
Compare
Choose a tag to compare

This is out of schedule release with a bugfix that was introduced in version 1.4.5

In version 1.4.5 there was a bug that went unnoticed - if you used pipeline that consisted only of ImageOnly transforms but pass bounding boxes into it, you would get an error.

If you had in such pipeline at least one non ImageOnly transform, say HorizontalFlip or Crop, everything would work as expected.

We fixed the issue and added tests to be sure that it will not happen in the future.

Albumentations 1.4.5 Release Notes

03 May 01:40
8c86616
Compare
Choose a tag to compare
  • Support our work
  • Highlights
  • Deprecations
  • Improvements and bug fixes

Support Our Work

  1. Love the library? You can contribute to its development by becoming a sponsor for the library. Your support is invaluable, and every contribution makes a difference.
  2. Haven't starred our repo yet? Show your support with a ⭐! It's just only one mouse click.
  3. Got ideas or facing issues? We'd love to hear from you. Share your thoughts in our issues or join the conversation on our Discord server for Albumentations

Highlights

Bbox clipping

Before version 1.4.5 it was assumed that bounding boxes that are fed into the augmentation pipeline should not extend outside of the image.

Now we added an option to clip boxes to the image size before augmenting them. This makes pipeline more robust to inaccurate labeling

Example:

Will fail if boxes extend outside of the image:

transform = A.Compose([    
    A.HorizontalFlip(p=0.5)    
], bbox_params=A.BboxParams(format='coco'))

Clipping bounding boxes to the image size:

transform = A.Compose([    
    A.HorizontalFlip(p=0.5)    
], bbox_params=A.BboxParams(format='coco', clip=True))

by @ternaus

SelectiveChannelTransform

Added SelectiveChannelTransform that allows to apply transforms to a selected number of channels.

For example it could be helpful when working with multispectral images, when RGB is a subset of the overall multispectral stack which is common when working with satellite imagery.

Example:

aug = A.Compose(
        [A.HorizontalFlip(p=0.5),
        A.SelectiveChannelTransform(transforms=[A.ColorJItter(p=0.5),
        A.ChromaticAberration(p=0.5))], channels=[1, 2, 18], p=1)],
    )

Here HorizontalFlip applied to the whole multispectral image, but pipeline of ColorJitter and ChromaticAberration only to channels [1, 2, 18]

by @ternaus

Deprecations

CoarseDropout

Old way:

transform = A.Compose([A.CoarseDropout(
  min_holes = 5,
  max_holes = 8,
  min_width = 3,
  max_width = 12,
  min_height = 4,
  max_height = 5
)])

New way:

transform = A.Compose([A.CoarseDropout(
  num_holes_range=(5, 8),
  hole_width_range=(3, 12),
  hole_height_range=(4, 5)
)])

As of now both ways work and will provide the same result, but old functionality will be removed in later releases.

@ternaus

Improvements and bug fixes

Albumentations 1.4.4 Release Notes

17 Apr 02:43
35bf09e
Compare
Choose a tag to compare

Albumentations 1.4.4 Release Notes

  • Support our work
  • Highlights
  • Transforms
  • Improvements and bug fixes

Support Our Work

  1. Love the library? You can contribute to its development by becoming a sponsor for the library. Your support is invaluable, and every contribution makes a difference.
  2. Haven't starred our repo yet? Show your support with a ⭐! It's just only one mouse click.
  3. Got ideas or facing issues? We'd love to hear from you. Share your thoughts in our issues or join the conversation on our Discord server for Albumentations

Transforms

Added D4 transform

image

Applies one of the eight possible D4 dihedral group transformations to a square-shaped input, maintaining the square shape. These transformations correspond to the symmetries of a square, including rotations and reflections by @ternaus

The D4 group transformations include:
- e (identity): No transformation is applied.
- r90 (rotation by 90 degrees counterclockwise)
- r180 (rotation by 180 degrees)
- r270 (rotation by 270 degrees counterclockwise)
- v (reflection across the vertical midline)
- hvt (reflection across the anti-diagonal)
- h (reflection across the horizontal midline)
- t (reflection across the main diagonal)

Could be applied to:

  • image
  • mask
  • bounding boxes
  • key points

Does not generate interpolation artifacts as there is no interpolation.

Provides the most value in tasks where data is invariant to rotations and reflections like:

  • Top view drone and satellite imagery
  • Medical images

Example:

Screenshot 2024-04-16 at 19 00 05

Added new normalizations to Normalize transform

  • standard - subtract fixed mean, divide by fixed std
  • image - the same as standard, but mean and std computed for each image independently.
  • image_per_channel - the same as before, but per channel
  • min_max - subtract min(image)and divide by max(image) - min(image)
  • min_max_per_channel - the same, but per channel
    by @ternaus

Changes in the interface of RandomShadow

New, preferred wat is to use num_shadows_limit instead of num_shadows_lower / num_shadows_upper by @ayasyrev

Improvements and bug fixes

Added check for input parameters to transforms with Pydantic

Now all input parameters are validated and prepared with Pydantic. This will prevent bugs, when transforms are initialized without errors with parameters that are outside of allowed ranges.
by @ternaus

Updates in RandomGridShuffle

  1. Bugfix by @ayasyrev
  2. Transform updated to work even if side is not divisible by the number of tiles. by @ternaus

Example:
image

New way to add additional targets

Standard way uses additional_targets

transform = A.Compose(
    transforms=[A.Rotate(limit=(90.0, 90.0), p=1.0)],
    keypoint_params=A.KeypointParams(
        angle_in_degrees=True,
        check_each_transform=True,
        format="xyas",
        label_fields=None,
        remove_invisible=False,
    ),
    additional_targets={"keypoints2": "keypoints"},
)

Now you can also add them using add_targets:

transform = A.Compose(
    transforms=[A.Rotate(limit=(90.0, 90.0), p=1.0)],
    keypoint_params=A.KeypointParams(
        angle_in_degrees=True,
        check_each_transform=True,
        format="xyas",
        label_fields=None,
        remove_invisible=False,
    ),
)
transform.add_targets({"keypoints2": "keypoints"})

by @ayasyrev

Small fixes

Documentation

Albumentations 1.4.3 Release Notes

03 Apr 01:50
657977e
Compare
Choose a tag to compare

Albumentations 1.4.3 Release Notes

  • Request
  • Highlights
  • New transform
  • Minor improvements and bug fixes

Support Our Work

  1. Love the library? You can contribute to its development by becoming a sponsor for the library. Your support is invaluable, and every contribution makes a difference.
  2. Haven't starred our repo yet? Show your support with a ⭐! It's just only one mouse click.
  3. Got ideas or facing issues? We'd love to hear from you. Share your thoughts in our issues or join the conversation on our Discord server for Albumentations

New transform

Screenshot 2024-04-02 at 18 43 51
  • Added Morphological transform that modifies the structure of the image. Dilation expands the white (foreground) regions in a binary or grayscale image, while erosion shrinks them.

Minor improvements and bug fixes

1.4.2

18 Mar 23:02
36719bf
Compare
Choose a tag to compare

Albumentations 1.4.2 Release Notes

  • Request
  • Highlights
  • New transform
  • New functionality
  • Improvements and bug fixes

Request

  1. If you enjoy using the library as an individual developer or as a representative of the company please consider becoming a sponsor for the library. Every dollar helps.
  2. If you did not give our repo a ⭐, it is only one mouse click
  3. If you have feature requests or proposals or encounter issues - submit your request to issues or ask in Discord server for Albumentations

New transform

Left: Original, Middle: Chromatic aberration (default args, mode="green_purple"), Right: Chromatic aberration (default args, mode="red_blue")
(Image is from our internal mobile mapping dataset)

  • Added ChromaticAbberation transform that adds chromatic distortion to the image. Wiki by @mrsmrynk

New functionality

Improvements and Bugfixes

  • Do not throw deprecation warning when people do not use deprecated parameters in AdvancedBlur by @Aloqeely
  • Updated CONTRIBUTORS.md for Windows users by @Aloqeely
  • Fixed Docstring for DownScale transform by @ryoryon66
  • Bugfix in PadIfNeeded serialization @ternaus

1.4.1

05 Mar 00:25
fb81e6c
Compare
Choose a tag to compare

Albumentations 1.4.1 Release Notes

  • Request
  • Highlights
  • New transform
  • Improvements
  • Bug fixes

Request

  1. If you enjoy using the library as an individual developer or during the day job as a part of the company, please consider becoming a sponsor for the library. Every dollar helps.
  2. If you did not give our repo a ⭐, it is only one mouse click
  3. If you have feature requests or proposals or encounter issues - submit your request to issues or our new initiative, - Discord server for albumentations

New transform

Screenshot 2024-03-04 at 14 52 15
  • Added MixUp transform: which linearly combines an input (image, mask, and class label) with another set from a predefined reference dataset. The mixing degree is controlled by a parameter λ (lambda), sampled from a Beta distribution. This method is known for improving model generalization by promoting linear behavior between classes and smoothing decision boundaries.

Minor changes and Bug Fixes

  • Moved from isort, flake8, black to ruff
  • Added extra checks for docstrings to match Google Style.
  • Updated Who's using
  • Removed quidda dependency, which addresses opencv library inconsistencies issues
  • New, updated version of benchmark.

1.4.0

17 Feb 21:19
004fabb
Compare
Choose a tag to compare

Albumentations 1.4.0 Release Notes

  • Request
  • Highlights
  • New transform
  • Backwards Incompatible Changes
  • Improvements
  • Bug fixes

Request

  1. If you enjoy using the library as an individual developer or during the day job as a part of the company, please consider becoming a sponsor for the library. Every dollar helps.
  2. If you did not give our repo a ⭐, it is [only one mouse click].(https://github.com/albumentations-team/albumentations)
  3. If you have feature requests, proposals, or encounter issues - submit your request to issues or, our new initiative, - Discord server for albumentations

Highlights

In this release, we mainly focused on the technical debt as its decrease allows faster iterations and bug fixes in the codebase. We added only one new transform, did not work on speeding up transforms, and other changes are minor.

  1. We are removing the dependency on the imgaug library. The library was one of our inspirations when we created Albumentations, but maintainers of imgaug ceased its support which caused inconsistencies in library versions. It was done in 2021, say commit ba44eff by @Dipet .

But, somehow, we are cutting this dependency only in 2024.

  1. Added typing in all of the codebase. When we started the library, Python 2 was still widely used; hence, none of the original codebases had types specified for function arguments and return types. Since the end of the support for Python 2, we added types to the new or updated code, but only now have we covered all the codebase.

New transform

Screenshot 2024-02-17 at 13 09 01
  • Added XYMasking transform: applies masking strips to an image, either horizontally (X axis) or vertically (Y axis), simulating occlusions. This transform is helpful for training models to recognize images with varied visibility conditions. It's particularly effective for spectrogram images, allowing spectral and frequency masking to improve model robustness.
    As other dropout transforms CoarseDropout, MaskDropout, GridDropout it supports images, masks and keypoints as targets. (004fabb by @ternaus )

Backward Incompatible Changes

The deprecated code, including 15 transforms, was removed.
Dependency on the imgaug library was removed.

(be6a217 by @ternaus )

Deleted Transforms

  1. JpegCompression. Use ImageCompression instead.
  2. RandomBrightness. Use RandomBrigtnessContrast instead.
  3. RandomContrast. Use RandomBrigtnessContrast instead.
  4. Cutout. Use CoarseDropout instead.
  5. ToTensor. Use ToTensorV2 instead.
  6. IAAAdditiveGaussianNoise. Use GaussNoise instead.
  7. IAAAffine. Use Affine instead.
  8. IAACropAndPad. Use CropAndPad instead.
  9. IAAEmboss. Use Emboss instead.
  10. IAAFliplr. Use HorizontalFlip instead.
  11. IAAFlipud. Use VerticalFlip instead.
  12. IAAPerspective. Use Perspective instead.
  13. IAAPiecewiseAffine. Use PiecewiseAffine instead.
  14. IAASharpen. Use Sharpen instead.
  15. IAASuperpixels. Use Superpixels instead.

Other deprecated functionality

  • Removed eps parameter in RandomGamma
  • Removed lambda_transformsin serialization.from_dict function.

Minor changes and Bug Fixes

1.3.1

10 Jun 07:44
e3b47b3
Compare
Choose a tag to compare

image

New augmentations

Minor changes

Bugfixes

1.3.0

20 Sep 07:33
2a857a8
Compare
Choose a tag to compare

albu_1_3_0

Breaking changes

New augmentations

Bugfixes

Minor changes: