Albumentationsのaugmentationをひたすら動かす

# Albumentationsとは
* https://github.com/albumentations-team/albumentations
* 機械学習用データ拡張用Pythonライブラリ
* Data augmentationでよく使われる機能が豊富に揃っている
* `pip install albumentations`

# この記事
* 50程のAugmentationをひたすらパラメータとかを変えながら動作を確認した
* version 0.4.6
* [テスト用に書いたノードブック(Jupyter, Colab)](https://github.com/tkuri/albumentations_test/blob/master/albumentations_test.ipynb)
 -  画像を用意すれば全部同じように確認できます


#ボカす系 (Blur)

## Blur
* ランダムサイズのカーネルでボカす
* blur_limit (int) – ブラーの最大カーネルサイズ。 Default: (3, 7)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/164123a5-d8f5-89ee-87d8-2fb00ae1fd32.png)

## MotionBlur
* ランダムなカーネルサイズでモーションブラー(ボックスフィルタ)をかける
* blur_limit (int) – ブラーの最大カーネルサイズ。Default: (3, 7).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/034d003c-dad4-b8a5-eb3f-1c67c8b9f50f.png)

## GaussianBlur
* ランダムなカーネルサイズでガウシアンフィルタをかける
* blur_limit (int) – ブラーをかけるカーネルサイズの最大値、奇数である必要がある。Default: (3, 7).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/689f8272-29fb-28dc-a1e5-f5feb8046f7c.png)

## GlassBlur
* グラスノイズ(曇りガラスのような効果)を付加
* sigma (float) – ガウシアンカーネルの標準偏差。 Defalt: 0.7.
* max_delta (int) – スワップされる画素間の最大距離。. Defalt: 4.
* iterations (int) – リピート回数。Default: (2).
* mode (str) – 計算モード。Fastかexact。Default: “fast”.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/36121dd2-62ed-0223-8dc2-caf962f391ba.png)

# ノイズ系 (Noise, Compression)
## GaussNoise
* ガウスノイズを付加
* var_limit ((float, float) or float) – ノイズ分散。Default: (10.0, 50.0).
* mean (float) – ノイズ平均。 Default: 0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/67660dd4-8849-2354-a721-c8ea0aed7f1f.png)

## JpegCompression
* Jpegの圧縮ノイズを適用
* quality_lower (float) – 品質の下限値。
* quality_upper (float) – 品質の上限値。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/e5bb579b-297e-17f4-9752-e9f811023587.png)

## ImageCompression
* Jpeg/WebPの圧縮ノイズを適用
* quality_lower (float) – 品質の下限値。
* quality_upper (float) – 品質の上限値。
* compression_type (ImageCompressionType) – 圧縮タイプ（JPEG/WEBP）。should be ImageCompressionType.JPEG or ImageCompressionType.WEBP. Default: ImageCompressionType.JPEG

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/415ed8fe-ab99-b4a0-88b2-22211a01a651.png)

## ISONoise
* カメラセンサーのノイズを付加する
* color_shift (float, float) – 色相変化量。
* intensity ((float, float) – 色・輝度ノイズの強さ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/3b94d49a-b7d3-ae38-1b54-3c6dfa1a3acf.png)

## MultiplicativeNoise
* 乱数配列と乗算する
* multiplier (float or tuple of floats) – 乗算する数値の範囲。 Default: (0.9, 1.1).
* per_channel (bool) – False：すべてのチャンネルで同じ、True：各チャンネルのサンプル値を使用。 Default False.
* elementwise (bool) – False：画像内のすべての画素に乗算、True：画素単位でランダムにサンプリングして乗算。 Defaule: False.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/6d901474-c118-3500-14e1-908a0d1657ff.png)

## Downscale
* ダウンスケールした後にアップスケールして画質を低下させる
* scale_min (float) – スケールの下限値。 Should be < 1. Default: 0.25.
* scale_max (float) – スケールの上限値。 Default: 0.25.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/ca7ef9d8-43a8-abaa-f6aa-ea708183b1ec.png)

# 単純幾何変化系 (Flip, Crop, Rotate, Scale, Transpose)
## Flip
* 水平、垂直、または水平と垂直の両方のどれかにランダムに反転

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/7ead49a5-db86-f540-a3b8-f781408bc0ce.png)

## VerticalFlip
* x軸を中心に垂直に反転

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/a2c32338-c9ec-3770-dd7e-d1c06f50e876.png)


## HorizontalFlip
* y軸を中心に水平に反転

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/24468832-9643-1e77-0c22-5b1aa7d9bf87.png)

## Crop
* 領域を切り取る
* x_min (int) – 左上x座標の最小値。
* y_min (int) – 左上y座標の最小値。
* x_max (int) – 右下x座標の最大値。
* y_max (int) – 右下y座標の最大値。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/778cbdd4-2c99-1bd0-bc2f-fd97511d46fe.png)

## RandomCrop
* ランダムに切り取る
* height (int) – 切り取る高さ。
* width (int) – 切り取る幅。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/308412ad-9d56-2490-d0b9-ba8dc51838f2.png)

## CenterCrop
* 中心部分をクロップする
* height (int) – クロップする高さ。
* width (int) – クロップスする幅。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/a461a8e5-9334-383f-a7a5-8ea2a5166634.png)

## RandomSizedCrop
* ランダムに切り取り、特定の大きさにリスケールする
* min_max_height ((int, int)) – クロップサイズの範囲。
* height (int) – リサイズ後の高さ。
* width (int) – リサイズ後の幅。
* w2h_ratio (float) – クロップのアスペクト比。 Default: 1.0.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/e88d42fe-5156-9c18-0f68-51671606ab88.png)

## RandomResizedCrop
* ランダムに切り取り、特定の大きさにリスケールする（Torchvisionのバリアント）
* height (int) – リサイズ後の高さ。
* width (int) – リサイズ後の幅。
* scale ((float, float)) – クロップする領域のサイズの範囲。 Default: (0.08, 1.0).
* ratio ((float, float)) – クロップする領域のアスペクト比の範囲。 Default: (0.75, 1.3333333333333333).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/5479daf6-ad4b-bdb8-5234-197ba7a958f9.png)

## Rotate
* ランダムな角度で回転させる
* limit: 角度の範囲、単一数値の場合は(-limit, limit)。 Default: (-90, 90)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/980d9511-12f7-6f03-2afc-565488331eea.png)

## RandomScale
* 画像サイズをランダムに変更する
* scale_limit ((float, float) or float) – 拡大縮小率の範囲 (0が変化なしなので注意). Default: (0.9, 1.1).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/773027c3-e5f8-d803-5d18-983186e2d2d0.png)
※同じサイズでプレビューされているので見た目にはわからないが元の画像サイズが変わっている

## RandomRotate90
* ランダムに90°単位で回転させる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/415afe65-9b29-2b05-73b6-fc04db451f41.png)

## Transpose
* 行と列を入れ替えて転置

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/b1065804-13cf-6be8-8f15-e6162e328932.png)

#高度幾何変換系 (Affine, Distortion)

## ShiftScaleRotate
* ランダムにアフィン変換を適用する（平行移動、拡大縮小、回転）
* shift_limit: 平行移動の範囲。Default: (-0.0625, 0.0625)。
* scale_limit: 拡大縮小率の範囲 (0が変化なしなので注意)。Default: (-0.1, 0.1).
* rotate_limit: rotation range. 回転の範囲。 Default: (-45, 45).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/850c7b34-f8c8-0e71-1a87-39d299fd0a03.png)

## OpticalDistortion
* 光学的な歪みを再現する
* distort_limit (float, (float, float)) – 歪みの範囲。Default: (-0.05, 0.05).
* shift_limit (float, (float, float))) – シフトする範囲。Default: (-0.05, 0.05).
* Bounding BoxとKeypointsには適用できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/f78f4c8f-d52c-af72-b5e8-e832ec9459c6.png)

## GridDistortion
* Grid歪みを再現する
* num_steps (int) – 各辺のグリッドセルの数を指定。Default: 5.
* distort_limit (float, (float, float)) – 歪みの範囲。Default: (-0.03, 0.03).
* Bounding BoxとKeypointsには適用できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/1939c444-0f6e-7d0b-0a63-d3a8f5b178ab.png)

## ElasticTransform
* 弾性変形
* alpha (float) – 変形パラメータ. Default: 1.
* sigma (float) – ガウシアンフィルタパラメータ。 Default: 50.
* alpha_affine (float) – alpha_affineの範囲。 Default: 50.
* Bounding BoxとKeypointsには適用できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/d6c4408c-bcf1-1abc-8d85-643c75612469.png)

## RandomGridShuffle
* ランダムにグリッドのセルをシャッフルする
* grid ((int, int)) – 画像を分割するグリッドのサイズ。Default: (3,3).
* Bounding BoxとKeypointsには適用できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/158e7d36-460e-47bd-7261-c1450dc4d70b.png)

# 色いじる系
## HueSaturationValue
* ランダムに色相、彩度、輝度を変える
* hue_shift_limit ((int, int) or int) – 色相の範囲。Default: (-20, 20).
* sat_shift_limit ((int, int) or int) – 彩度の範囲。Default: (-30, 30).
* val_shift_limit ((int, int) or int) – 輝度の範囲。Default: (-20, 20).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/27a07b22-7eb7-febc-f42a-260f08c1bcdf.png)

## RGBShift
* ランダムにRGBの各チャンネルの値を変える
* r_shift_limit ((int, int) or int) – Redチャネルの変化範囲。Default: (-20, 20).
* g_shift_limit ((int, int) or int) – Greenチャネルの変化範囲。Default: (-20, 20).
* b_shift_limit ((int, int) or int) – Blueチャネルの変化範囲。Default: (-20, 20).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/d4fb3754-9c5f-681c-5579-5a7ceceae9ad.png)

## ChannelShuffle
* RGBのチャンネルをランダムに並べ替える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/f308555c-8663-539f-1874-d8d70d44da3c.png)

## ChannelDropout
* ランダムにチャンネルをドロップする
* channel_drop_range (int, int) – ドロップするチャンネル数の範囲。
* fill_value (int, float) – ドロップされたチャンネルを代わりに埋める画素値.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/40fc70b4-48c5-50f7-e32f-28108e67422a.png)

## Posterize
* 各色チャンネルのビット数を減らす
* num_bits ((int, int) – ビット数の範囲。Default: 4.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/aa5f3f6b-20be-ba62-a4f3-2c85df555cc8.png)

## ToGray
* RGB画像をグレースケールに変換する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/506e9259-4c2c-e245-fec6-cf08f6e884f8.png)

## ToSepia
* セピアフィルタを適用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/7870cc17-46d2-74b9-573d-82baeb181e1b.png)

# 輝度やコントラストいじる系
## InvertImg
* 画素値を反転させる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/0808bc0e-f89a-945a-a1a1-5624cc8f4ce8.png)

## Normalize
* 画素値を255で除算→チャンネルごとの平均値を減算→チャンネルごとの標準偏差で除算
* **平均値と標準偏差は単なるパラメータに過ぎず内部で暗黙に計算されない**
* mean (float, list of float) – 平均値。Dafault: (0.485, 0.456, 0.406).
* std (float, list of float) – 標準偏差。Dafault: (0.229, 0.224, 0.225).
* max_pixel_value (float) – 画素値の最大値。Dafault: 255.0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/b7d1ce48-ba54-4796-0774-f2b3568c3133.png)

## RandomGamma
* ランダムにガンマ変換をかける
* gamma_limit (float or (float, float)) – ガンマの上限値。Default: (80, 120).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/9230bd39-798a-1d25-c525-cc998b8ca9d4.png)

## RandomBrightness
* ランダムに明るさを変える
* limit ((float, float) or float) – 明るさの変化範囲。Default: (-0.2, 0.2).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/4a2edcc9-581f-87d9-5882-25b3bc2c786f.png)

## RandomContrast
* ランダムにコントラストを変える
* limit ((float, float) or float) – コントラストの変化範囲。Default: (-0.2, 0.2).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/f1a3b737-3b12-6158-20a9-079f4f812de6.png)

## RandomBrightnessContrast
* ランダムに明るさとコントラストを変える
* brightness_limit ((float, float) or float) – 明るさの変化範囲。Default: (-0.2, 0.2).
* contrast_limit ((float, float) or float) – コントラストの変化範囲。Default: (-0.2, 0.2).
* brightness_by_max (Boolean) – コントラストの調整方法。Default: True.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/82a62803-2bd7-a6bc-ac25-03c4dbc5d206.png)

## CLAHE
* コントラスト制限適応型ヒストグラム均等化
* clip_limit (float or (float, float)) – コントラスト制限の上限閾値。Default: (1, 4).
* tile_grid_size ((int, int)) – ヒストグラム均等化のためのグリッドサイズ。Default: (8, 8).

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/d6707309-1d38-bb39-1d3f-b4ecb1b428d0.png)

## Solarize
* 閾値以上の画素値を反転させる（ソラリ）
* threshold ((int, int) or int, or (float, float) or float) – 反転の閾値。Default: 128.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/c5cb2b6c-60c3-2cb5-a900-7aaa693d5a74.png)

# Dropout系
## Cutout
* 矩形領域の粗いDropout
* num_holes (int) – ゼロに落とす領域数。Defalt: 8.
* max_h_size (int) – 領域の最大高さ。Defalt: 8.
* max_w_size (int) – 領域の最大幅。Defalt: 8.
* fill_value (int, float, lisf of int, list of float). 落とした領域の画素値。Defalt: 0.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/23d488f4-9ddc-3ba3-a298-760411316b1e.png)


## CoarseDropout
* 矩形領域の粗いDropout（最小値も指定可能）
* max_holes (int) – ゼロに落とす領域数の最大数。
* max_height (int) – 領域の最大高さ。Defalt: 8.
* max_width (int) – 領域の最大幅。Defalt: 8.
* min_holes (int) – ゼロに落とす領域数の最小数。Default: None.
* min_height (int) – 領域の最小高さ。Default: None.
* min_width – 領域の最小幅。Default: None.
* fill_value (int, float, lisf of int, list of float). 落とした領域の画素値。Defalt: 0.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/d6071c76-b3fb-bd94-1b35-56d4f502066a.png)

# 天候変化・環境・光学再現系
## RandomSnow
* 雪をシミュレートする
* snow_point_lower (float) – 雪の下限値。Default: 0.1.
* snow_point_upper (float) – 雪の上限値。Default: 0.3.
* brightness_coeff (float) – 値が大きいと雪が多くなる。Should be >= 0. Default: 2.5.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/1ff27889-ce9b-05b0-0713-f9b66584fa1a.png)

## RandomRain
* 雨のエフェクト
* slant_lower – 斜め下具合。Default: -10.
* slant_upper – 斜め上具合。Default: 10.
* drop_length – 雨の長さ。Default: 20.
* drop_width – 雨の幅。Default: 1.
* drop_color (list of (r, g, b)) – 雨線の色。Default: (200, 200, 200).
* blur_value (int) – 雨粒のブラー。Default: 7.
* brightness_coefficient (float) – 明るさ。Default: 0.7.
* rain_type – 雨のタイプ。[None, “drizzle”, “heavy”, “torrestial”]. Default: None.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/8ae98cd6-e913-b6fd-f6ae-0a07d0fc375b.png)

## RandomFog
* 霧をシミュレートする
* fog_coef_lower (float) – 霧の強度の下限。
* fog_coef_upper (float) – 霧の強度の上限。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/ec44172f-5e32-429d-1d24-23a42600b521.png)

## RandomSunFlare
* 太陽フレアをシミュレートする
* flare_roi (float, float, float, float) – フレアが現れる領域 (x_min, y_min, x_max, y_max)。
* angle_lower (float) – 角度の下限値.
* angle_upper (float) – 角度の上限値.
* num_flare_circles_lower (int) – フレアの数の下限。
* num_flare_circles_upper (int) – フレアの数の上限。
* src_radius (int) – フレアの半径。
* src_color ((int, int, int)) – フレアの色。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/b7f620f4-17b3-806d-64e2-dcc2d5841797.png)

## RandomShadow
* 影をシミュレートする
* shadow_roi (float, float, float, float) – 影が現れる領域 (x_min, y_min, x_max, y_max)。
* num_shadows_lower (int) – 影の数の下限。
* num_shadows_upper (int) – 影の数の上限。
* shadow_dimension (int) – 影ポリゴンの辺の数。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/a75d1c83-a2d3-0387-049a-be8bfc231240.png)

# 他
## FancyPCA
* FancyPCAでの拡張
* alpha (float) – 固有ベクトルと固有値をどの程度スケールするか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/94d0276f-e6ac-bd8d-ddfa-fab2b972ba41.png)

## PadIfNeeded
* 所望の解像度にするために画像端をパディングする
* min_height (int) – 画像高さの最小値。Default: 1024.
* min_width (int) – 画像幅の最小値。Default: 1024.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/6f90d6b8-1484-c231-65a5-344d673a7d2e.png)