AI

Torchvisionのtransforms.Composeを使いこなしてtraining accuracyを上げよう !

torchvisionのtransformsはお手軽にdata augmentationができとても便利です。是非使い込んでほしいので、簡単な例を示しておきたいと思います。

公式ドキュメント

TRANSFORMING AND AUGMENTING IMAGES から入るのがよいでしょうか。特に ILLUSTRATION OF TRANSFORMS は変換後の画像が示されているので、直感的にわかりやすいです。

実装例

多くの場合以下の実装の微調整でいい線行くと思います。

from torchvision import transforms
from PIL import ImageFilter

trans_train = transforms.Compose([
    transforms.ToPILImage(),
    lambda x: x if np.random.random_sample() <= 0.1 else x.filter(ImageFilter.GaussianBlur(radius=3)),
    transforms.ToTensor(),  # this also convert pixel value from [0,255] to [0,1]
    transforms.RandomPerspective(distortion_scale=0.2),
    transforms.RandomGrayscale(p=0.1),
    transforms.ColorJitter(brightness=0.5, hue=0.2, contrast=0.5, saturation=0.5),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225]),
])

GaussianBlurはもちろん

transforms.GaussianBlur(kernel_size=(5, 9), sigma=(0.1, 5))

のような形でも行けますが、ここではあえて自前のカスタムフィルターの導入例にしてみました。PILのImageFilterもさまざまなフィルターをサポートしているので、試してみると面白いです。ただしテンソルへの変換前に施す必要があります。

ElasticTransformとか面白いですね。認識系のdata augmentationには効果的に使えそうです。一方例えば視線推定のようなgeometricalなregression問題を解く場合にはRandomPerspectiveのように形を変えてしまうものは不適当あるいは慎重に扱う必要があると思われますので、状況に応じて使い分けましょう。

というわけで

今回はtransforms.Composeの実装例を紹介しました。超簡単な割に効果が高いので、ぜひお試しあれ。


   
関連記事
  • The NVIDIA driver on your system is too oldって !!!
  • PyTorchで学習済みモデルの中間層出力の取得
  • PyTorch Tutorial その2 – torch.autograd
  • PyTorch Tutorial その4 – Training Classifier
  • PyTorch Tutorial その3 – Neural Network
  • PyTorch LightningのckptファイルをLoadするのにはまった話のその後

    コメントを残す

    *

    CAPTCHA