本文是2020年7月27日发布的博客“多目标在专辑中”的翻译。作者在哈布雷(Habré)上,但我懒得将其翻译成俄文。此翻译是应他的要求进行的。
我已将所有内容翻译成俄文,但英语中的某些技术术语听起来更自然。它们以这种形式保留。如果您想到了足够的翻译,请进行评论并予以更正。
图像增强是一种解释的正则化技术。您可以将现有的标记数据转换为新数据,从而增加数据集的大小。
可以在使用Albumentations PyTorch, Keras, Tensorflow,或任何其他的框架,可以处理图像作为numpy的阵列。
该库最适合用于分类,分割,对象和关键点检测的标准任务。当训练样本的每个元素都不包含一个,而是包含许多不同的对象时,出现问题的可能性就会降低一些。
对于这种情况,已添加了多目标功能。
可能派上用场的情况:
- 连体网络
- 处理视频中的帧
- Image2image任务
- Multilabel semantic segmentation
- Instance segmentation
- Panoptic segmentation
- Kaggle . Kaggle Grandmaster, Kaggle Masters, Kaggle Expert.
- , Deepfake Challenge , Albumentations .
- PyTorch ecosystem
- 5700 GitHub.
- 80 . .
在过去的三年中,我们一直在进行功能和性能优化。
目前,我们专注于 文档 和 教程。
用户要求至少每周一次,以增加对多个分段蒙版的转换支持。
我们已经有很长时间了。
在本文中,我们将分享有关如何在专辑中使用多个目标的示例。
方案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
问:是否可以处理两个以上的图像?
答:您可以拍摄任意数量的图像。
问:图像,蒙版,框和关键点的数量应该相同吗?
答:您可以有N张图像,M个蒙版,K个关键点和B个框。 N,M,K和B可以不同。
问:是否存在多目标功能无法正常工作或无法正常工作的情况?
答:通常,您可以将多目标图像用于一组不同尺寸的图像。某些转换取决于输入。例如,您不能裁剪比图像本身大的作物。另一个例子: MaskDropout,这可能取决于原始蒙版。当我们戴着口罩时,他的行为还不清楚。实际上,它们极为罕见。
问:您可以将多少转换合并在一起?
答:您可以通过多种不同方式将转换组合成复杂的管道。
该库包含30多个空间变换。它们都支持图像和蒙版,大多数支持框和关键点。
→链接到源代码
可以将它们与40多种转换结合使用 ,以更改图像的像素值。例如: RandomBrightnessContrast, Blur,或者像RandomRain这样更具异国情调的东西 。
附加文件
结论
从事开源项目很困难,但非常令人兴奋。我要感谢开发团队:
- 亚历山大·布斯拉耶夫(Alexander Buslaev)
- 弗拉基米尔·德鲁希宁(Vladimir Druzhinin)
- 阿列克谢·帕尔诺夫(Alexey Parnov)
- 叶夫根尼(Evgeny Khvedcheniya)
- 米哈伊尔·德鲁希宁(Mikhail Druzhinin)
以及所有帮助创建该库并将其提升到目前水平的贡献者。