第4回 roboflow：データ増強（オーグメンテーション）

:::note info
本記事は、システムズナカシマの[ブログ記事](https://www.systems.nakashima.co.jp/rf/roboflow/blog/)を基に作成しています。
:::

こんにちは、システムズナカシマの松浦です。

今回は、roboflowの特徴的な機能の一つである**データ増強**（オーグメンテーション）の方法について解説します。

<iframe width="560" height="315" src="https://www.youtube.com/embed/_TA_JecCoec?si=APuvn70dj5lSRShf" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

データ増強（オーグメンテーション）は、画像処理を利用し画像を拡大・縮小したり、回転させるなどして学習データを増強する機能です。

AIモデルを構築する際に、はじめから十分な学習データを収集するのは大変な作業です。:pensive:
そんな時にデータ増強（オーグメンテーション）を利用し、初期の学習データを短時間で整備することができます。:yum:

roboflowは、画像処理ライブラリーで最も有名な[OpenCV](https://opencv.org/)のパートナーでもあり、画像処理を用いた強力なデータ増強（オーグメンテーション）機能を提供しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/35b1616e-392d-90ab-70bd-d4bcb07e86f0.png)

本記事をお読みになる前に、アカウントをお持ちでない方（[サインアップ](https://qiita.com/ShingoMatsuura/items/7d7a7940061f8990f50b#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)）、ワークスペース・プロジェクトの準備がお済みでない方は以下の記事をご確認ください。

 - [第1回：ワークスペースとプロジェクトの作成（1/2)](https://qiita.com/ShingoMatsuura/items/7d7a7940061f8990f50b)、[(2/2)](https://qiita.com/ShingoMatsuura/items/407bd9122bf07fd0ac4a)
 - [第2回：データのアップロード](https://qiita.com/ShingoMatsuura/items/5443bd69f2ee51ae6b1f)
 - [第3回：アノテーション（1/2）](https://qiita.com/ShingoMatsuura/items/23d241ec31727efd2e66)、[(2/2)](https://qiita.com/ShingoMatsuura/items/1a078681c6e370faeeb9)

また、roboflowで何ができるか、概要を知りたい方は[「はじめてのroboflow」](https://qiita.com/ShingoMatsuura/items/c2df30e0b6109ab25c32)の記事をご参照ください。

## アノテーションデータのReview申請
まず初めに、前回までの手順にて作成したデータを**Dataset**として登録する必要があります。

**Dataset**として登録するには、**Review**を行い**Approved**（承認）される必要があります。自分にアサインされているアノテーションのバッチを選択すると「**Submit For Review**」ボタンが表示されるので押下します。

バッチを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/b01c3504-6e3d-9417-aacf-a54426ff7543.png)

続けて「**Submit For Review**」ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/8b2778f7-b74c-2e7f-9684-4560e277703f.png)

## アノテーションデータのReview

**Review**の一覧に表示されているバッチを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/82b6573d-6d56-c28f-c466-7e61f1de9785.png)

**Review**画面が表示されますが、ここでは「**Approve All**」ボタンを押下し一括で承認を行います。

続けて、画面右上の「**Add Approved to Dataset**」ボタンを押下し、承認された画像を**Dataset**として登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/50fb43ca-e700-a5a6-6a49-24f8f8ea484b.png)

※「**Annotated**」に表示されている画像を選択すると、一枚づつ確認・承認を行うことができます。

**Dataset**として登録する際に画像を「**学習**（Train）・**評価**（Valid）・**テスト**（Test）」に分割します。その際の割合を設定し「**Add Images**」ボタンを押下します。

※初期のTrain(70%)：Valid(20%)：Test(10%)で問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/9853207a-b003-dedd-e5bd-e532f6b12efa.png)


## データセットの作成
左側に表示されているメニューの「**Versions**」ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/d573377c-d5b1-1c20-bf7f-646c0b30b02a.png)

画面がデータセットの作成画面に切り替わります。以下を順に実行しデータセットを作成していきます。

1. **Preprocessing**（前処理）：画像の前処理、自動画像向きの判定、リサイズ等を指定します。
1. **Augmentation**（データ増強）：データ増強の種類を選択します。
1. **Create**（データ生成）：オーグメンテーションを利用し何倍のデータを生成するかを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/d545a09c-7c3d-5bbe-b1c1-c611ba1b1107.png)


## Preprocessing（前処理）
「**Preprocessing**」は、データセットの全ての画像に適用されます。「**Add Preprocessing Step**」ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/e21d1bfa-1702-4e53-df2f-79cb4474c597.png)


前処理として利用できるものが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/d1f74bdc-e71b-0afd-dd19-c6314c1a5a95.png)


| 機能 | 概要 | 説明 |
|:-:|:-:|:-:|
| **Auto-Orient**  | 画像向き補正  | EXIF情報を無視して画像の向きを判定します。  |
| **Isolate Objects**  | 対象物の画像保存  | バウンディングボックスの範囲で画像を生成します。物体検出のデータを画像分類のデータに変換する際に利用します。  |
| **Static Crop**  | 分割  | 画像を決まった領域で分割します。  |
| **Resize**  | サイズ補正  | 指定した縦横長さに画像サイズを調整します。通常、AIモデルの入力画像サイズにそろえる際に利用します。  |
| **Grayscale**  | グレースケール  | 画像をグレースケールに変換します。  |
| **Auto-Adjust Contract** | コントラスト自動調整  | 画像のコントラストを自動で調整します。  |
| **Tile**  | タイル状に分割  | 画像を縦・横指定した数に分割します。対象物が小さい場合にタイル状に分割することで学習し易くなります。  |
| **Modify Classes**  | クラス補正  | 特定のクラスをデータセットから除外したり、クラス名を別のものに変更することができます。  |
| **Filter Null**  | NULLフィルター  | 学習用のデータに含めるNULL画像（背景画像）の無効化する割合を設定します。0%を指定した場合全て利用されます。  |
| **Filter by Tag**  | Tagフィルター  | 画像に対して設定したタグ文字列にてデータを絞り込みます。  |

予め「**Auto-Orient**」と「**Resize**（640x640）」が、初期の前処理として選択されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/bff8aabd-ba63-1a43-08a1-faf8eb69c5c1.png)


## Augmentation（データ増強）
続けて「**Augmentation**」を選択します。

「**Add Augmentation Step**」ボタンを押下すると、データ増強の種類（オーグメンテーションの種類）が一覧表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/1adbf59f-0428-cb30-f151-8466176c69b3.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/6f432a81-18f1-1670-72fe-6db42eb5eaf7.png)


### 画像レベルでのデータ増強（オーグメンテーション）

| 機能 | 概要 | 説明 |
|:-:|:-:|:-:|
| **Flip**  | 反転  | 画像を縦方向または横方法に反転します。  |
| **90°Rotate**  |  90度回転 | 時計周り・反時計回りに画像を90度回転します。  |
| **Crop**  | 切り取り  |  画像を特定の範囲で切り抜きます。 |
| **Rotation**  |  回転 | 時計周り・反時計回りに指定した角度で回転します。  |
| **Shear**  | 歪み  | 画像を歪ませます。  |
| **Grayscale**  | グレースケール  | 一部の画像をグレースケールに変換します。  |
| **Hue**  | 色相  | 画像の色相を調整します。  |
| **Saturation**  |  彩度 | 画像の彩度を調整します。  |
| **Blightness**  |  明るさ | 画像の明るさを調整します。  |
| **Exposure**  | 露光・露出  | 画像の露光・露出の調整を行います。  |
| **Blur**  |  ぼかし | 画像に対してぼかしを入れます。フォーカスが当たってい対象物を検出したい場合に利用します。  |
| **Noise**  |  ノイズ | 画像にドット上のノイズを入れます。過学習を抑える効果があります。  |
| **Cutout**  | カットアウト  | 画像の一部をマスクし対象物が隠れた画像を生成します。  |
| **Mosaic**  |  モザイク | 分割した画像を組み合わせモザイク状の画像を生成します。  |

ここでは、「**Flip**」で左右反転、「**Crop**」で部分的に拡大、「**Rotation**」で左右に5度回転、「**Blightness**」で暗くした画像・明るくした画像を生成するように設定してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/b47f338b-0a43-69b1-156d-39a79bca116b.png)

### バウンディングボックスレベルでのデータ増強（オーグメンテーション）
アノテーションしたバウンディングボックス単位に回転したり、色を変更することができます。

例えば、背景画像はそのままで対象物のみ回転したい場合に有効な機能です。
※例：ベルトコンベヤー上を流れる対象物を上部からカメラで撮影し、その対象物が回転するようなケース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/f0d92902-be9e-8197-eab9-7971e39c7188.png)



## Create（データ生成）
最後に、設定したデータ増強（オーグメンテーション）を利用し、データを何倍に増やすかを設定します。
ここでは、「**5倍**」を選択しています。元は226画像が、オーグメンテーションを実行し858画像に増幅されるのが確認できます。:punch_tone1:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/e01c0daf-50ec-dbfc-7d43-43cd1af4ba76.png)


「**Create**」ボタンを押下しデータセットを生成します。


## 生成されたデータセット
「**Create**」ボタンの押下でデータの生成が開始され、完了すると以下の画面が表示されます。:confetti_ball:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/2ec126e1-765b-cdd5-d1fe-364d1ead743d.png)

「**View All Images**」ボタンを押下すると生成された画像を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/1d008961-4772-3b33-77f9-e8ad7cdad9ba.png)


元の画像には無かった少し回転した画像などデータ増強（オーグメンテーション）により生成された画像が一覧に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882762/8685a8a7-fbf8-950e-3398-62dd0780ca4a.png)


## 最後に

いかがでしたでしょうか？:wink:
今回は、roboflowの特徴的な機能であるデータ増強（オーグメンテーション）について解説しました。

**第5回 roboflow：学習とデプロイ**については[こちら](https://qiita.com/ShingoMatsuura/items/4ef2e9edd96191337c00)をご確認ください。

次回は、生成したデータセットを使ってroboflow上でAIモデルの学習、学習したモデルの利用方法について解説したいと思います。楽しみにしておいてください。:thumbsup_tone1:

> ※記事一覧
> - [第1回：ワークスペースとプロジェクトの作成（1/2)](https://qiita.com/ShingoMatsuura/items/7d7a7940061f8990f50b)、[（2/2）](https://qiita.com/ShingoMatsuura/items/407bd9122bf07fd0ac4a)
> - [第2回：データのアップロード](https://qiita.com/ShingoMatsuura/items/5443bd69f2ee51ae6b1f)
> - [第3回：アノテーション（1/2）](https://qiita.com/ShingoMatsuura/items/23d241ec31727efd2e66)、[（2/2）](https://qiita.com/ShingoMatsuura/items/1a078681c6e370faeeb9)
> - [第4回：データ増強（オーグメンテーション）](https://qiita.com/ShingoMatsuura/items/64f0255c058b425fe8c1)
> - [第5回：学習](https://qiita.com/ShingoMatsuura/items/4ef2e9edd96191337c00)
> - [第6回：推論結果の確認](https://qiita.com/ShingoMatsuura/items/14c5d717e9d9637f81c8)

システムズナカシマでは、roboflowに関する個別相談・無料デモを行っております。
是非お気軽にご相談ください。

https://www.systems.nakashima.co.jp/inquiry/roboflow/contact/