YOLOv5自前のデータを水増しして学習する


YOLOv5で自前のデータを学習させる時に精度向上のために
簡単に水増しできる手法を紹介します

pytorchでAlbumentationsを用いて行います
主に屋外での物体検知で使う水増し処理について紹介します

環境

・YOLOv5 https://github.com/ultralytics/yolov5

更新履歴

2021年10月 初版

このシリーズのゴール

学習データの水増し処理を簡単に行えるようになる

1.準備

YOLOv5で自前データを用いてで学習できること
colabにて学習方法が紹介されています

さらに
データ拡張用ライブラリを導入します

pip install albumentations

2.実装

yolov5/utils/augmentations.py
を確認します

albumentationsが導入されていれば
自動的に実行されます

            self.transform = A.Compose([
                A.Blur(p=0.01),
                A.MedianBlur(p=0.01),
                A.ToGray(p=0.01),
                A.CLAHE(p=0.01),
                A.RandomBrightnessContrast(p=0.0),
                A.RandomGamma(p=0.0),
                A.ImageCompression(quality_lower=75, p=0.0)],
                bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))

RandomSnow
RandomRain
RandomFog
RandomSunFlare
RandomShadow
などを必要に応じて追加します

            self.transform = A.Compose([
                A.Blur(p=0.01),
                A.MedianBlur(p=0.01),
                A.ToGray(p=0.01),
                A.CLAHE(p=0.01),
                A.RandomBrightnessContrast(p=0.0),
                A.RandomGamma(p=0.0),
                A.ImageCompression(quality_lower=75, p=0.0)
                A.RandomSnow(p=0.2)
                A.RandomRain(p=0.2)],
                bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))

yolov5/data/hyps/ にも
水増しがあるためかぶらないように注意

hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4  # image HSV-Value augmentation (fraction)
degrees: 0.0  # image rotation (+/- deg)
translate: 0.1  # image translation (+/- fraction)
scale: 0.9  # image scale (+/- gain)
shear: 0.0  # image shear (+/- deg)
perspective: 0.0  # image perspective (+/- fraction), range 0-0.001
flipud: 0.0  # image flip up-down (probability)
fliplr: 0.5  # image flip left-right (probability)
mosaic: 1.0  # image mosaic (probability)
mixup: 0.1  # image mixup (probability)
copy_paste: 0.1  # segment copy-paste (probability)