
このテキストは、2020年7月27日付けのブログ投稿Multi-Target in Albumentationsの翻訳です。著者はHabréにいますが、私は怠惰すぎてテキストをロシア語に翻訳できませんでした。そして、この翻訳は彼の要求で行われました。
私はできる限りすべてをロシア語に翻訳しましたが、英語のいくつかの専門用語はより自然に聞こえます。それらはこの形式のままです。適切な翻訳が頭に浮かんだら、コメントして修正してください。
画像の拡張は、解釈された正規化手法です。既存のタグ付きデータを新しいデータに変換することで、データセットのサイズを増やします。

あなたにAlbumentationsを使用することができPyTorch、 Keras、 Tensorflow、またはnumpyのアレイとして画像を処理することができる任意の他のフレームワーク。
このライブラリは、分類、セグメンテーション、オブジェクトおよびキーポイントの検出という標準的なタスクで最適に機能します。トレーニングサンプルの各要素に1つではなく、多くの異なるオブジェクトが含まれている場合、問題は少し一般的ではありません。
このような状況のために、マルチターゲット機能が追加されました。
これが役立つ可能性のある状況:
- シャムネットワーク
- ビデオのフレームの処理
- Image2imageタスク
- Multilabel semantic segmentation
- Instance segmentation
- Panoptic segmentation
- Kaggle . Kaggle Grandmaster, Kaggle Masters, Kaggle Expert.
- , Deepfake Challenge , Albumentations .
- PyTorch ecosystem
- 5700 GitHub.
- 80 . .
過去3年間、機能とパフォーマンスの最適化に取り組んできました。
今のところ、ドキュメント と チュートリアルに 焦点を当ててい ます。
少なくとも週に1回、ユーザーは複数のセグメンテーションマスクの変換サポートを追加するように求めます。
私たちは長い間それを持っていました。
この記事では、アルバム作成で複数のターゲットを操作する方法の例を共有します。
シナリオ1:1つの画像、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:1つの画像と複数のマスク

一部のタスクでは、同じピクセルに対応する複数のラベルがある場合があります。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:複数の画像、マスク、キーポイント、ボックス

複数のターゲットに空間変換を適用できます。
この例では、2つの画像、2つのマスク、2つのボックス、および2つのキーポイントのセットがあります。
一連の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:3つ以上の画像を操作することは可能ですか?
A:好きなだけ画像を撮ることができます。
Q:画像、マスク、ボックス、キーポイントの数は同じである必要がありますか?
A: N個の画像、M個のマスク、K個のキーポイント、B個のボックスを使用できます。 N、M、K、およびBは異なる場合があります。
Q:マルチターゲット機能が機能しない、または期待どおりに機能しない状況はありますか?
A:一般に、さまざまなサイズの画像のセットにマルチターゲットを使用できます。一部の変換は入力に依存します。たとえば、画像自体よりも大きいクロップをクロップすることはできません。もう一つの例: MaskDropout。元のマスクに依存する場合があります。私たちがマスクのセットを持っているときに彼がどのように振る舞うかは明らかではありません。実際には、それらは非常にまれです。
Q:いくつの変換を組み合わせることができますか?
A:さまざまな方法で、変換を組み合わせて複雑なパイプラインにすることができます。
ライブラリには、 30を超える空間変換が含まれています。それらはすべて画像とマスクをサポートし、ほとんどのサポートボックスとキーポイントをサポートします。

→ソースへのリンク
これらは、画像のピクセル値を変更する40を超える変換と組み合わせることができます 。例: RandomBrightnessContrast、 Blur、またはRandomRainのようなよりエキゾチックな もの。
追加のドキュメント
- 完全な変換シート
- セグメンテーションタスクのマスク変換
- バウンディングボックスオブジェクト検出の拡張
- キーポイント変換
- マスク、ボックス、キーポイントの同期変換
- パイプラインで変換が適用される確率はどれくらいですか?
結論
オープンソースプロジェクトに取り組むことは困難ですが、非常にエキサイティングです。開発チームに感謝します。
- アレクサンダーブスラエフ
- ウラジミール・ドルジニン
- アレクセイパルノフ
- Evgeny Khvedcheniya
- ミハイル・ドルジニン
そして、ライブラリの作成と現在のレベルへの移行を支援したすべての貢献者。