セグメンテーションにおけるデータ拡張をAlbumentationsで試してみる

画像分類タスクでは、データ拡張は入力画像のみおこなえばOKでしたが(教師データは拡張しようがない)

物体検出やセグメンテーションなどのタスクでは、教師データも変換しないと入力変数と整合性が合わなくなります。

Albumentations を使うと簡単に実装できるとのことで、チュートリアルを眺めてみました。

 

おしながき

・サンプルデータとサンプルマスクの用意

・Alnumentations でデータ拡張

 

サンプルデータとサンプルマスクの用意

 

適当な画像をここからダウンロードさせて頂き・・・

https://unsplash.com/photos/7RQf2X6aXXI

labelme でアノテーションを行い・・・

labelme_json_to_dataset sample.json -o output として pngマスク画像を生成します。

 

 

Albumentations でデータ拡張

 

こちらに、各タスク用にチュートリアルがのっています。

Image Segmentation のチュートリアルをなぞります。

入力画像をマスク画像を与えるとプロットしてくれる関数を作成します。(画像が横長なので、figsizeを横長に調整)

 

trochvision のものと使い勝手はほぼ一緒で、以下のようにして複数の拡張処理を束ねて実行することができます。

 

実際に画像を読みこんで試してみます。

できました!

 

PyTorchでのモデルの入力の前処理で使いたい場合には、torchvisionのtransforms の代わりに使えます。transforms.ToTensor みたいな処理も、albumentations.pytorch.ToTensor~ として用意されています。

https://albumentations.readthedocs.io/en/latest/api/pytorch.html

ToTensorとToTensorV2 がありますが、違いは255で割って正規化するかどうかの差のようです。V2だと正規化しません。

 

セグメンテーションの場合のデータ拡張のメモでした。