GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

mdbloice

Augmentor – 機械学習のためのPythonの画像拡張ライブラリ

投稿日:

機械学習のためのPythonの画像拡張ライブラリ。 http://augmentor.readthedocs.io

Augmentorは機械学習のためのPythonの画像拡張ライブラリです。 プラットフォームやフレームワークに依存しないスタンドアロンのライブラリを目指しています。これは、より便利で、より詳細な制御を可能にし、最も現実的な関連する拡張手法を実装します。 これは、演算をパイプラインでつなぎ合わせることを可能にするビルディングブロックを使用した確率的アプローチを採用しています。

インストール

AugmentorはPythonで書かれています。 パッケージのJulia版も姉妹プロジェクトとして開発されており、 ここで入手できます

コマンドラインからpipを使用してインストールします。

pip install Augmentor

ソースからビルドするためのドキュメントを参照してください。 以前のバージョンからアップグレードするには、 pip install Augmentor --upgrade使用します。

ドキュメンテーション

完全なドキュメントは、ドキュメントを読むことで見つけることができます: http : //augmentor.readthedocs.io/

クイックスタートガイドと使い方

Augmentorの目的は、機械学習アルゴリズム、特にニューラルネットワークと深い学習のための入力としてデータセットを拡張するために、画像拡大(人工データ生成)を自動化することです。

このパッケージは、一連のイメージに対して実行する一連の操作を定義する拡張パイプラインを構築することによって機能します。 補完パイプラインを作成するために、回転や変換などの操作が1つずつ追加されます。完了すると、パイプラインが実行され、拡張されたデータセットが作成されます。

まず、ファイルシステム上のディレクトリを指すPipelineオブジェクトをインスタンス化します。

import Augmentor
p = Augmentor.Pipeline("/path/to/images")

次のように、パイプラインオブジェクトp操作を追加できます。

p.rotate(probability=0.7, max_left_rotation=10, max_right_rotation=10)
p.zoom(probability=0.5, min_factor=1.1, max_factor=1.5)

すべての関数では、確率を指定する必要があります。確率は、画像が拡張パイプラインを通過するときに画像に適用されるかどうかを判断するために使用されます。

パイプラインを作成したら、次のようにサンプリングすることができます。

p.sample(10000)

あなたの仕様に基づいて10,000枚の拡大画像を生成します。 デフォルトでは、これらは上記のpパイプラインオブジェクトを初期化するときに指定されたパスを基準にしたoutputという名前のディレクトリにディスクに書き込まれます。

パイプライン内の各画像を正確に1回process()する場合は、 process()使用しprocess()

p.process()

この関数は、たとえばデータセットのサイズ変更に便利です。 process()メソッドの使用時に、すべての操作の確率が1に設定されているパイプラインを作成することは理にかなっています。

マルチスレッド

Augmentor(version> = 0.2.1)は、マルチスレッド化を使用して画像の生成速度を向上させるようになりました。

元のイメージが非常に小さい場合、これによりパイプラインの速度低下することがあります。 減速が発生した場合は、 multi_threadedFalse設定します。

p.sample(100, multi_threaded=False)

ただし、デフォルトでは、 sample()関数はマルチスレッドを使用します。 これは現在、ディスクに保存するときにのみ実装されています。 ジェネレータは、次のバージョンのアップデートでマルチスレッドを使用します。

地上真理データ

画像は、2つ以上のグループでパイプラインを通過することができ、その結果、地上真理データが同様に増大することができる。

オリジナル画像とマスク[3] 拡張されたオリジナル画像とマスク画像

グラウンドトゥルースデータを元のデータと並列に増やすには、 ground_truth()関数を使用してグラウンドトゥルースディレクトリをパイプラインに追加します。

p = Augmentor.Pipeline("/path/to/images")
# Point to a directory containing ground truth data.
# Images with the same file names will be added as ground truth data
# and augmented in parallel to the original data.
p.ground_truth("/path/to/ground_truth_images")
# Add operations to the pipeline as normal:
p.rotate(probability=1, max_left_rotation=5, max_right_rotation=5)
p.flip_left_right(probability=0.5)
p.zoom_random(probability=0.5, percentage_area=0.8)
p.flip_top_bottom(probability=0.5)
p.sample(50)

KerasとPyTorchのジェネレータ

ディスクに保存したくない場合は、ジェネレータを使用できます(この場合はKerasを使用します)。

g = p.keras_generator(batch_size=128)
images, labels = next(g)

サイズ128の画像とそれに対応するラベルが返されます。 ジェネレータは無期限にデータを返し、拡張されたデータを持つニューラルネットワークをオンザフライでトレーニングするために使用できます。

PyTorchと統合することもできます。

import torchvision
transforms = torchvision.transforms.Compose([
    p.torch_transform(),
    torchvision.transforms.ToTensor(),
])

主な特徴

弾性ひずみ

弾性ひずみを使用すると、実世界で実現可能な多数の画像を生成するために1つの画像を使用することができます。

入力画像 拡張イメージ

入力画像には、元の画像のサイズやアスペクト比を変更したり、新しく生成された画像の周囲に黒色/透明のパディングを入れたりせずに歪みが生じていることを強調する1ピクセルの黒色の枠があります。

機能はここでより明確に見ることができます:

オリジナル画像[1] ランダムな歪みが適用されました

パースペクティブ変換

合計12種類の透視変換が利用可能です。 最も一般的な4つを以下に示します。

左に傾斜 右に傾ける 傾ける 後傾

残りの8種類の変換は次のとおりです。

スキュータイプ0 スキュータイプ1 スキュータイプ2 スキュータイプ3
スキュータイプ4 スキュータイプ5 スキュータイプ6 スキュータイプ7

サイズを保持するサイズ

ローテーションは、デフォルトで元の画像のファイルサイズを保持します。

元画像 10度回転、自動的に切り取られる

他のソフトウェアによるローテーションと比較して:

元画像 10度回転

サイズのせん断保存

シアリングは、シャープされたイメージから自動的に正しい領域を切り抜くので、黒いスペースやパディングのないイメージが得られます。

元画像 せん断(x軸)20度 せん断(y軸)20度

これが通常どのように行われているかをこれと比較してください:

元画像 せん断(x軸)20度 せん断(y軸)20度

トリミング

トリミングは、機械学習用の画像拡大に適した方法でも処理できます。

元画像 ランダム作物+リサイズ操作

ランダム消去

ランダム消去は、モデルをオクルージョンに強くするために使用される技法です。 これは、例えば、ナビゲーションシナリオにおける物体検出に使用されるニューラルネットワークの訓練に有用であり得る。

オリジナル画像[2] ランダム消去

使用方法については、 Pipeline.random_erasing()のドキュメントを参照してください。

パイプラインでの連鎖操作

わずかな操作で、単一の画像を拡張して、多数の新しいラベル保存サンプルを生成することができます。

元画像 歪み+ミラーリング

上記の例では、3つの操作を適用しました。まず、画像をランダムに歪ませ、次に0.5の確率で水平方向に反転し、次に0.5の確率で垂直方向に反転します。 このパイプラインから100回サンプリングして100個の新しいデータを作成します。

p.random_distortion(probability=1, grid_width=4, grid_height=4, magnitude=8)
p.flip_left_right(probability=0.5)
p.flip_top_bottom(probability=0.5)
p.sample(100)

チュートリアルノート

ジェネレータを使用したKerasとの統合

Augmentorは、Kerasの拡張機能の代わりに使用できます。 Augmentorは、定義したパイプラインに従って、拡張データを無期限に生成するジェネレーターを作成できます。 詳細については、以下のノートブックを参照してください。

クラスごとの増強戦略

Augmentorでは、クラスごとにパイプラインを定義できます。 つまり、特定の分類問題に対してクラスごとに異なる拡張戦略を定義することができます。

次のJupyterノートブックの例を参照してくださいPer_Class_Augmentation_Strategy.ipynb

完全な例

Augmentorのパイプラインといくつかの機能を実演しながら、単一の画像で拡張タスクを実行しましょう。

最初にパッケージをインポートし、Pipelineオブジェクトをイメージが格納されているディレクトリに渡して初期化します。

import Augmentor

p = Augmentor.Pipeline("/home/user/augmentor_data_tests")

これで、パイプラインオブジェクトに操作を追加することができます。

p.rotate90(probability=0.5)
p.rotate270(probability=0.5)
p.flip_left_right(probability=0.8)
p.flip_top_bottom(probability=0.3)
p.crop_random(probability=1, percentage_area=0.5)
p.resize(probability=1.0, width=120, height=120)

必要な操作を追加したら、このパイプラインから画像をサンプリングできます。

p.sample(100)

いくつかのサンプル出力:

入力画像[3] 拡張イメージ

拡張された画像は、例えば、境界検出タスクに有用であり得る。

ライセンスと謝辞

Augmentorは、MITライセンスの条件で利用可能になります。 Licence.md参照してください。

[1] Wikimedia Commonsから入手したチェッカーボード画像で、公開されています: https : //commons.wikimedia.org/wiki/File :Checkerboard_pattern.svg

[2]ストリートビューの画像はパブリックドメインです: http : //stokpic.com/project/italian-city-street-with-shoppers/

[3] ISICアーカイブから得られた皮膚病変画像:

上記の拡張画像を再現するために、 urllibを使用して皮膚病変画像を取得することができます:

>>> from urllib import urlretrieve
>>> im_url = "https://isic-archive.com:443/api/v1/image/5436e3abbae478396759f0cf/download"
>>> urlretrieve(im_url, "ISIC_0000000.jpg")
('ISIC_0000000.jpg', <httplib.HTTPMessage instance at 0x7f7bd949a950>)

注:Python 3ではfrom urllib.request import urlretrieve使用from urllib.request import urlretrieve

テスト

自動テストを実行するには、リポジトリをクローンして実行します。

$ py.test -v

コマンドラインから。 各コミット後に実行されるCIテストを表示するには、 https: //travis-ci.org/mdbloice/Augmentorを参照してください

引用Augmentor

このパッケージが有用であり、それを引用したい場合は、

Marcus D. Bloice、Christof Stocker、Andreas HolzingerAugmentor:機械学習用画像増強ライブラリ 、arXiv preprint arXiv:1708.04680https ://arxiv.org/abs/1708.04680,2017

Asciicast

使用中のAugmentorのビデオデモンストレーションを見るには、以下のプレビューをクリックしてください:







-mdbloice
-, , ,

執筆者: