• 日本語
    • English (英語)
Avinton JapanAvinton JapanAvinton JapanAvinton Japan
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
データオーグメンテーション(Data Augmentation)

データオーグメンテーション(Data Augmentation)

By Avinton rk | 技術解説, 技術ブログ&インタビュー | Comments are Closed | 15 5月, 2024 | 1

ディープラーニングにおける画像認識では大量の画像が必要になる場合が多いです。しかし、実際の開発現場ではセキュリティや著作権などの観点から十分な画像を集めることが難しいです。そのような場合、データオーグメンテーションは非常に役立ちます。データオーグメンテーションは、限られたデータセットをもとに、さまざまな手法で新しい画像データを生成することができます。例えば、画像の回転、反転、トリミング、色の変換などがあります。これにより、データセットの多様性を増やし、モデルの汎化性能を向上させることができます。さらに、データオーグメンテーションは過学習を防ぐ効果もあります。データオーグメンテーションを活用することで、少ない画像データでも高性能なモデルを構築することが可能になります。

様々なデータオーグメンテーション

データオーグメンテーションには多くの変換があり、その実装にはtorchvision transformsやAlbumentationsなどのライブラリを利用することができます。ここでは、Albumentationsを使用し、代表的な変換とその実装例を紹介します。
まず必要なライブラリをインポートし、元画像を読み込みます。

1
2
3
4
import cv2
import albumentations as A  
 
img = cv2.imread('avinton.png')  # ご自身の手元にある画像に変更してください  

回転

データオーグメンテーション(回転)

1
conv_img = A.Rotate(p=1)(image=img)['image']

補足:
回転すると余白が生じてしまいます。その場合、余白をどのように埋めるかをborder_modeオプションで指定することが可能です。
アノテーション付きの物体検出やセグメンテーションタスクにおいてはこの点を考慮した変換を行う必要があります。

フリップ

データオーグメンテーションフリップ

1
2
3
4
5
# 水平方向のフリップ  
conv_img = A.HorizontalFlip(p=1)(image=img)['image']
 
# 垂直方向のフリップ  
conv_img = A.VerticalFlip(p=1)(image=img)['image']

明るさ調整

データオーグメンテーション明るさ調整

1
2
3
4
5
6
7
8
# CLAHE  
conv_img = A.CLAHE(p=1)(image=img)['image']
 
# 輝度  
conv_img = A.RandomBrightnessContrast(p=1)(image=img)['image']  
 
# ガンマ補正  
conv_img = A.RandomGamma(p=1)(image=img)['image']  

色調整

データオーグメンテーション色調整

1
2
3
4
5
6
7
8
# グレースケール  
conv_img = A.ToGray(p=1)(image=img)['image']
 
# HueSaturation    
conv_img = A.HueSaturationValue(p=1)(image=img)['image']  
 
# チャンネルシャッフル  
conv_img = A.ChannelShuffle(p=1)(image=img)['image']

ノイズ

データオーグメンテーションノイズ

1
2
3
4
5
# ガウシアンノイズ
conv_img = A.GaussNoise(p=1)(image=img)['image']
 
# ドロップアウト  
conv_img = A.CoarseDropout(p=1)(image=img)['image']  

補足:
画像の解像度が高い場合、肉眼で見ると変化が見られないようなケースもあります。その場合は、本願環境に近い画像を再現するよう度合いを調整するとよいでしょう。

ブラー

データオーグメンテーションブラー

1
2
3
4
5
6
7
8
# ブラー  
conv_img = A.Blur(p=1)(image=img)['image']
 
# ガウシアンブラー    
conv_img = A.GaussianBlur(p=1)(image=img)['image']
 
# モーションブラー  
conv_img = A.MotionBlur(p=1)(image=img)['image']

天候エフェクト

データオーグメンテーション天候エフェクト

1
2
3
4
5
6
7
8
# 雪  
conv_img = A.RandomSnow(p=1)(image=img)['image']
 
# 雨  
conv_img = A.RandomRain(p=1)(image=img)['image']
 
# 霧  
conv_img = A.RandomFog(p=1)(image=img)['image']

テクスチャーエフェクト

データオーグメンテーションテクスチャーエフェクト

1
2
3
4
5
# Perspective    
conv_img = A.Emboss(p=1)(image=img)['image']
 
# Sharpen  
conv_img = A.Sharpen(p=1)(image=img)['image']

変形

データオーグメンテーション変形

1
2
3
4
5
6
7
8
# Perspective    
conv_img = A.Perspective(p=1)(image=img)['image']
 
# アフィン  
conv_img = A.Affine(p=1)(image=img)['image']
 
# OpticalDistortion  
conv_img = A.OpticalDistortion(p=1)(image=img)['image']  

これらの変換を組み合わせて複合的なデータオーグメンテーションを行うことも可能です。たとえば、以下のように異なる変換をランダムに適用する関数を定義できます。

組み合わせ

データオーグメンテーション組み合わせ

以下はtranformに含まれる複数の変換をp=0.5、つまり50%の確率でそれぞれ適用させる関数です。
このとき、transformに含まれる順番に乱数で適用されるため、変換の順番も考慮するとなおよいでしょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def augmentation(p=0.5):
   tranform = [
       A.OpticalDistortion(p=p),
       A.Perspective(p=p),
       A.Emboss(p=p),
       A.HorizontalFlip(p=p),
       A.VerticalFlip(p=p),
       A.ShiftScaleRotate(p=p),
       A.Affine(p=p),
       A.Blur(p=p),
       A.Sharpen(p=p),
       A.GaussNoise(p=p),
       A.CoarseDropout(p=p),
       A.Perspective(p=p),
       A.ToGray(p=p),
       A.CLAHE(p=p),
       A.RandomBrightnessContrast(p=p),
       A.RandomGamma(p=p),
       A.HueSaturationValue(p=p),
   ]
   return A.Compose(tranform)
 
conv_img = augmentation()(image=img)['image']  

データオーグメンテーションは、モデルの性能向上に貢献する一方で、タスクやデータセットの特性に応じて適切に選択・調整する必要があります。
そのため、実際の開発現場で適切なデータオーグメンテーションを行うためには、実験や評価が欠かせません。

まとめ

データオーグメンテーションは、限られたデータセットをもとに新しい画像データを生成する手法です。この手法は、ディープラーニングにおける画像認識タスクにおいて特に有用であり、モデルの汎化性能を向上させることができます。さらに、過学習を防ぐ効果もあります。データオーグメンテーションは、画像の回転、反転、色の変換などさまざまな手法を組み合わせることで実現されます。この手法を活用することで、少ない画像データでも高性能なモデルを構築することが可能です。データオーグメンテーションの実装には、Albumentationsなどのライブラリが利用されます。さまざまな変換を組み合わせることで、複合的なデータオーグメンテーションを行うことも可能です。ただし、タスクやデータセットの特性に応じて適切な変換を選択・調整する必要があります。

Avintonでは、ITエンジニアリングトレーニングとチームメンバーの継続的な教育に特に重点を置いています。この分野でのスキルの活用、最先端のテクノロジーへの取り組み、国際的なクライアントへのソリューション提供に興味がある場合は、採用情報のページをご覧ください。ご連絡をお待ちしております!

Avintonで働く魅力
機械学習, 技術, データオーグメンテーション(Data Augmentation), albumentations, データ生成

Related Post

  • G検定合格体験記

    G検定合格体験記

    By Avinton rk | Comments are Closed

    Read more

  • Kubernetes入門:初心者からプロフェッショナルへ – 学び方とおすすめリソース

    Kubernetes入門:初心者からプロフェッショナルへ – 学び方とおすすめリソース

    By Avinton rk | Comments are Closed

    Read more

  • deploying-postgresql-operator-in-Kubernetes

    PostgreSQL Operator on Kubernetes

    By Avinton rk | Comments are Closed

    Read more

  • AIモデルの最適化

    AIモデルの最適化

    By Avinton rk | Comments are Closed

    Read more

  • Pytorch Datasets & DataLoaders

    PyTorch – Datasets & DataLoaders

    By Avinton rk | Comments are Closed

    Read more

採用情報

採用情報

Categories

  • 相互学習
  • 採用
  • 社員インタビュー
  • 学習&資格取得
  • 技術解説
  • イベント告知
  • 学内説明会&講義
  • 産学連携
  • 就職活動
  • イベントレポート
  • その他
  • 技術ブログ&インタビュー
  • mainpage
  • New Graduates Interviews
  • 中途エンジニア
  • カテゴリーなし
  • ニュースリリース&イベント

Avinton SDGs

SDGsへの貢献

Search

タグ

AI時代の経営 AvintonAcademy on Campus AWS Docker DQN FINOLAB Git IoT James Cauchi LPIC LPIC-2 PM&PMO Predictive Maintenance Raspberry Pi Sound Analysis SSD イベントレポート インターン インフラ エッジコンピューティング エリクソン クラウトネイティブ セミナー ディープラーニング データ生成 データ解析 ファンダフルリレーマラソン モブワーク リスキリング リードエンジニア 中瀬幸子 企業説明会 勉強会 大学&専門学校 帰社日 強化学習、機械学習 技術ブログ 採用 掲載告知 未経験 田中 研之輔 画像分類 社員紹介 第一級陸上特殊無線技士 観光データ
© 2023 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
  • 日本語
    • English (英語)
Avinton Japan