Multi-Target в Albumentations

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Этот текст — это перевод блог поста Multi-Target in Albumentations от 27 июля 2020. Автор есть на Хабре, но переводить текст на русский поленился. И этот перевод сделан по его просьбе.

Я перевела на русский все, что можно, но какие-то технические термины на английском звучат более естественно. В таком виде они и оставлены. Если вам в голову приходит адекватный перевод — комментируйте — поправлю.

Аугментации изображений — это интерпретируемый метод регуляризации. Вы преобразуете существующие размеченные данные в новые, тем самым увеличивая размер датасета.



Вы можете использовать Albumentations в PyTorch, Keras, Tensorflow или любом другом фреймворке, который может обрабатывать изображение как numpy array.

Лучше всего библиотека работает со стандартными задачами классификации, сегментации, детекции объектов и ключевых точeк. Чуть реже встречаются задачи, когда в каждом элементе тренировочной выборки не один, а множество различных объектов.

Для такого рода ситуаций была добавлена функциональность multi-target.
Ситуации, где это может пригодиться:

  • Сиамские сети
  • Обработка кадров в видео
  • Задачи Image2image
  • Multilabel semantic segmentation
  • Instance segmentation
  • Panoptic segmentation

Немного выпендрежа для привлечения внимания


  • Библиотека родилась из топовых решений с Kaggle и других площадок соревновательного машинного обучения. В основной команде разработчиков один  Kaggle Grandmaster, три Kaggle Masters, один Kaggle Expert. 
  • Селим Сефербеков, победитель конкурса Deepfake Challenge с призовыми в миллион долларов, использовал Albumentations в своем решении. 
  • Библиотека является частью  PyTorch ecosystem 
  • 5700 звезд на GitHub.
  • Библиотеку цитировали в научных статьях более 80 раз .  Упоминали в трех книгах.

В течение последних трех лет мы работали над функциональностью и оптимизировали производительность.

Сейчас же мы сосредоточились на  документации и туториалах.

Как минимум раз в неделю пользователи просят добавить поддержку преобразования для нескольких сегментационных масок.

Comment from discussion Geeks_sid's comment from discussion "[D] We need your questions about Albumentations: the best image augmentations Library :)".

Она у нас уже давно есть.

В этой статье мы поделимся примерами того, как работать с multiple targets в albumentations.

Сценарий 1: Одно изображение, одна маска




Наиболее распространенным вариантом использования является сегментация изображений. У вас есть изображение и маска. Вы хотите применить к ним набор пространственных преобразований, и это должен быть один и тот же набор.

В этом коде мы применяем  HorizontalFlip и ShiftScaleRotate.

import albumentations as A

transform = A.Compose([
    A.HorizontalFlip(p=0.5),
    A.ShiftScaleRotate(border_mode=cv2.BORDER_CONSTANT, 
                          scale_limit=0.3,
                          rotate_limit=(10, 30),
                          p=0.5)
], p=1)

transformed = transform(image=image, mask=mask)

image_transformed = transformed['image']
mask_transformed = transformed['mask']

→ Ссылка на gistfile1.py



Сценарий 2: Одно изображение и несколько масок




Для некоторых задач у вас может быть несколько меток, соответствующих одному и тому же пикселю.

Давайте применим  HorizontalFlip, GridDistortion, RandomCrop.

import albumentations as A

transform = A.Compose([
    A.HorizontalFlip(p=0.5),
    A.GridDistortion(p=0.5),    
    A.RandomCrop(height=1024, width=1024, p=0.5),    
], p=1)

transformed = transform(image=image, masks=[mask, mask2])

image_transformed = transformed['image']
mask_transformed = transformed['masks'][0]
mask2_transformed = transformed['masks'][1]

→ Ссылка на gistfile1.py

Сценарий 3: Несколько изображений, масок, ключевых точек и боксов




Вы можете применить пространственные преобразования к нескольким целям.

В этом примере мы имеем два изображения, две маски, два бокса и два набора ключевых точек.

Давайте применим последовательность из HorizontalFlip и ShiftScaleRotate.

 import albumentations as A

transform = A.Compose([A.HorizontalFlip(p=0.5),
                       A.ShiftScaleRotate(border_mode=cv2.BORDER_CONSTANT, scale_limit=0.3, p=0.5)],
                         bbox_params=albu.BboxParams(format='pascal_voc', label_fields=['category_ids']),
                         keypoint_params=albu.KeypointParams(format='xy'),
                         additional_targets={
                             "image1": "image",
                             "bboxes1": "bboxes",
                             "mask1": "mask",
                             'keypoints1': "keypoints"},
                         p=1)

transformed = transform(image=image,
                        image1=image1,
                        mask=mask,
                        mask1=mask1,
                        bboxes=bboxes,
                        bboxes1=bboxes1,
                        keypoints=keypoints,
                        keypoints1=keypoints1,
                        category_ids=["face"]
                        )

image_transformed = transformed['image']
image1_transformed = transformed['image1']

mask_transformed = transformed['mask']
mask1_transformed = transformed['mask1']

bboxes_transformed = transformed['bboxes']
bboxes1_transformed = transformed['bboxes1']

keypoints_transformed = transformed['keypoints']
keypoints1_transformed = transformed['keypoints1']

→ Ссылка на gistfile1.py



Q: Можно ли работать более чем с двумя изображениями?
А: Вы можете брать столько изображений, сколько захотите.

Q: Должно ли количество изображений, масок, боксов и ключевых точек быть одинаковым?
A: У вас может быть N изображений, M масок, K ключевых точек и B боксов. N, M, K и B могут быть разными.

Q: Существуют ли ситуации, когда функциональность multi target не сработает или сработает не так, как ожидалось?
A: В целом, вы можете использовать multi-target для набора изображений, имеющих разные размеры. Некоторые преобразования зависят от входных данных. Например, вы не можете сделать crop, который больше самого изображения. Другой пример: MaskDropout, который может зависеть от исходной маски. Как он поведет себя, когда у нас будет набор масок, непонятно. На практике они встречаются крайне редко.

Q: Сколько преобразований можно сочетать вместе?
A: Вы можете сочетать преобразования в сложный пайплайн кучей разных способов.

В библиотеке более 30 пространственных преобразований. Все они поддерживают изображения и маски, большинство поддерживают боксы и ключевые точки.


→ Ссылка на источник

Их можно сочетать с   более чем 40 преобразованиями, которые изменяют значения пикселей изображения. Например: RandomBrightnessContrast, Blur, или что-то более экзотическое, например RandomRain.

Дополнительная документация


  • Полный лист преобразований
  • Преобразования масок для задач cегментации
  • Bounding boxes аугментация для обнаружения объектов
  • Преобразования ключевых точек
  • Синхронное преобразование масок, боксов и ключевых точек
  • С какой вероятностью применяются преобразования в пайплайне

Заключение


Работа над open-source проектом сложная, но очень увлекательная. Я хотел бы поблагодарить команду разработчиков:

  • Александр Буслаев
  • Владимир Дружинин
  • Алексей Парнов
  • Евгений Хведчения
  • Михаил Дружинин 

и всех контрибьюторов, которые помогли создать библиотеку  и довести ее до текущего уровня.
Источник: https://habr.com/ru/post/514316/


Интересные статьи

Интересные статьи

Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...
Эта статья посвящена одному из способов сделать в 1с-Битрикс форму в всплывающем окне. Достоинства метода: - можно использовать любые формы 1с-Битрикс, которые выводятся компонентом. Например, добавле...
Если Вы используете в своих проектах инфоблоки 2.0 и таблицы InnoDB, то есть шанс в один прекрасный момент столкнуться с ошибкой MySQL «SQL Error (1118): Row size too large. The maximum row si...