蛋白质多靶点





本文是2020年7月27日发布的博客“多目标在专辑中”的翻译。作者在哈布雷(Habré)上,但我懒得将其翻译成俄文。此翻译是应他的要求进行的。



我已将所有内容翻译成俄文,但英语中的某些技术术语听起来更自然。它们以这种形式保留。如果您想到了足够的翻译,请进行评论并予以更正。



图像增强是一种解释的正则化技术。您可以将现有的标记数据转换为新数据,从而增加数据集的大小。







可以在使用Albumentations PyTorch,  Keras,  Tensorflow,或任何其他的框架,可以处理图像作为numpy的阵列。



该库最适合用于分类,分割,对象和关键点检测的标准任务。当训练样本的每个元素都不包含一个,而是包含许多不同的对象时,出现问题的可能性就会降低一些。



对于这种情况,已添加了多目标功能。

可能派上用场的情况:



  • 连体网络
  • 处理视频中的帧
  • Image2image任务
  • Multilabel semantic segmentation
  • Instance segmentation
  • Panoptic segmentation






在过去的三年中,我们一直在进行功能和性能优化。



目前,我们专注于  文档 和 教程。



用户要求至少每周一次,以增加对多个分段蒙版的转换支持。





我们已经有很长时间了。



在本文中,我们将分享有关如何在专辑中使用多个目标的示例。



方案1:一张图像一张面具







最常见的用例是图像分割。您有一个图像和一个蒙版。您要对其应用一组空间变换,并且它们必须是同一组。



在此代码中,我们使用  Horizo​​ntalFlip 和 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:一幅图像和多个蒙版







对于某些任务,您可能有多个标签对应于同一像素。



让我们应用  Horizo​​ntalFlip,  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:多个图像,蒙版,关键点和盒子







您可以将空间变换应用于多个目标。



在此示例中,我们有两个图像,两个蒙版,两个框和两组关键点。



让我们应用一系列 Horizo​​ntalFlip 和 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这样更具异国情调的东西 



附加文件





结论



从事开源项目很困难,但非常令人兴奋。我要感谢开发团队:





以及所有帮助创建该库并将其提升到目前水平贡献者



All Articles