📕

Albumentations で XYZ軸回転のデータ拡張をするメモ

2023/08/12に公開

Albumentations で XYZ軸回転のデータ拡張をするメモです🦔
と言っても、Albumentations.Lambda()と自作のcv_rotate_3dを組み合わせただけの覚書です。

Google Colaboratory で動くサンプルノートブックを用意しているので、興味がある方は動かしてみてください。


以下、使い方メモ👀
サンプル画像は、ぱくたそ様の食後のケーキを利用しています。

cv_rotate_3dスクリプトダウンロード

!wget https://raw.githubusercontent.com/Kazuhito00/cv_rotate_3d/main/cv_rotate_3d.py

Albumentations準備

Lambda()内でcv_rotate_3d()を呼び出しています。
ランダム値の指定はrandom.uniform()を利用。

import random
import albumentations as album
from cv_rotate_3d import rotate_3d

def rotate_3d_for_albumentations(image, **params):
    theta = int(random.uniform(45, -45))
    phi = int(random.uniform(45, -45))
    gamma = int(random.uniform(45, -45))

    image = rotate_3d(
        image,
        theta=theta,       # X軸回転
        phi=phi,           # Y軸回転
        gamma=gamma,       # Z軸回転
        dx=0,              # X軸平行移動
        dy=0,              # Y軸平行移動
        dz=0,              # Z軸平行移動
        color=(0, 255, 0), # 余白色
    )
    return image

def preprocessing_augmentation_function(param_p=0.0):
    augmentation_function = album.Lambda(image=rotate_3d_for_albumentations, p=param_p)

    def augmentation(x):
        augmentation_image = augmentation_function(image=x)
        return augmentation_image['image']

    return augmentation
augmentation = preprocessing_augmentation_function(param_p=1.0) # param_pは適用確率

オリジナル画像

データ拡張結果





Discussion