業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
プロセスの全体像前処理・特徴量生成Fine Tuning手法まとめ機械学習モデルの選び方モデル評価手法プロトタイピング探索的分析(EDA)
ドミナントカラー検出セグメンテーション技術の基礎と実装局所特徴量抽出Grad-CAMまとめ画像の二値化とその手法モルフォロジー演算とその手法【Vision AI】Painterの紹介pix2structの紹介
AI

執筆者:Handbook編集部

画像データのデータ拡張ツールについて

概要

本記事では画像データのためのデータ拡張ツールについて解説します。

データ拡張とは

データ拡張とは機械学習における学習用の画像データに対して何らかの「変換」を施すことでデータを水増しする手法です。変換の処理は扱うデータの種類やタスクによって様々な方法が存在しています。例えば、画像では、縦横で画像を反転させたり、回転させたりします。

前述の通り、データ拡張は学習データをにある変換を加えることで似ているけど少し異なるデータを生成します。データ拡張を行うことで、サンプル数が少ないデータセットに対してDeep Learningなどのデータ量が必要なモデルを学習できるようになるほか、モデルの過学習(あるデータに対して過剰に適合してしまうこと)を防ぐことができます。

本記事ではオープンソースで画像データのデータ拡張機能を提供しているツールのなかでもっとも利用されている2つを紹介します。

imgaug

imgaugは画像拡張ツールの中でももっともGitHub Star数が多いツールになります。2022年8月現在で 13kほどあります。imgaugは論文などで利用されることも多いツールで信頼性が高くサポートされている拡張手法がの豊富さが特徴です。pipを使ってインストールできます。

pip install imgaug

以下にシンプルな拡張手法の実装例を示します。以下の例でわかるようにiaa.Sequentialで利用する手法のパイプラインを定義し、後は画像を渡してあげれば拡張手法が適用されます。

import numpy as np
import imgaug.augmenters as iaa

def load_batch(batch_idx):
    # dummy function, implement this
    # Return a numpy array of shape (N, height, width, #channels)
    # or a list of (height, width, #channels) arrays (may have different image
    # sizes).
    # Images should be in RGB for colorspace augmentations.
    # (cv2.imread() returns BGR!)
    # Images should usually be in uint8 with values from 0-255.
    return np.zeros((128, 32, 32, 3), dtype=np.uint8) + (batch_idx % 255)

def train_on_images(images):
    # dummy function, implement this
    pass

# Pipeline:
# (1) Crop images from each side by 1-16px, do not resize the results
#     images back to the input size. Keep them at the cropped size.
# (2) Horizontally flip 50% of the images.
# (3) Blur images using a gaussian kernel with sigma between 0.0 and 3.0.
seq = iaa.Sequential([
    iaa.Crop(px=(1, 16), keep_size=False),
    iaa.Fliplr(0.5),
    iaa.GaussianBlur(sigma=(0, 3.0))
])

for batch_idx in range(100):
    images = load_batch(batch_idx)
    images_aug = seq(images=images)  # done by the library
    train_on_images(images_aug)

今回はシンプルな例ですが、より複雑な処理の記述も可能となっており、拡張性に優れています。(参考)

Albumentations

Albumentationsはimgaugについで人気のあるツールになります。論文などで利用される他、mmdetectionyolov5などのオープンソースツールでも利用されています。こちらも先ほど同様pipでインストールします。

pip install -U albumentations

以下がシンプルな例です。利用方法はimgaugと似ており、Composeで利用する手法を定義します。 

import albumentations as A
import cv2

# Declare an augmentation pipeline
transform = A.Compose([
    A.RandomCrop(width=256, height=256),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
])

# Read an image with OpenCV and convert it to the RGB colorspace
image = cv2.imread("image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Augment an image
transformed = transform(image=image)
transformed_image = transformed["image"]

使い分け

両者基本的な手法はサポートされているため特殊な処理でどちらかでしか実装できない場合は実装がサポートされているツールを選びましょう。また、imgaugの方が比較的複雑な処理を記述できるため複雑な処理を記述したい場合はimgaugを選ぶのも良いかと思います。

参考

2025年06月13日に最終更新
読み込み中...