GitHubじゃ!Pythonじゃ!

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

matterport

Mask_RCNN – KerasおよびTensorFlowでのオブジェクト検出およびインスタンスセグメンテーションのためのマスクR-CNN

投稿日:

KerasおよびTensorFlowでのオブジェクト検出およびインスタンスセグメンテーションのためのマスクR-CNN

オブジェクトの検出とセグメンテーションのためのマスクR-CNN

これは、Python 3、Keras、TensorFlow上のMask R-CNNの実装です。 このモデルは、画像内のオブジェクトの各インスタンスに対してバウンディングボックスとセグメンテーションマスクを生成します。 Feature Pyramid Network(FPN)とResNet101バックボーンをベースにしています。

リポジトリには、

  • FPNとResNet101上に構築されたマスクR-CNNのソースコード。
  • MS COCOのトレーニングコード
  • MS COCOの事前訓練された体重
  • ジュピターのノートブックは、すべてのステップで検出パイプラインを視覚化する
  • マルチGPUトレーニング用ParallelModelクラス
  • MS COCOメトリクス(AP)の評価
  • 自分のデータセットのトレーニングの例

コードは文書化され、拡張が容易になるように設計されています。 あなたの研究でそれを使用する場合は、このリポジトリを参照することを検討してください。 3Dビジョンで作業する場合は、最近リリースされたMatterport3Dデータセットも役立ちます。 このデータセットは、学術利用のために公に利用できるようにすることに合意したお客様の3D再構成空間から作成されました。 ここでもっと例を見ることができます

このモデルを使用するプロジェクト

このモデルを他のデータセットに拡張したり、それを使用するプロジェクトを作成したりする場合は、ぜひご連絡ください。

  • OSMへの画像 :TensorFlow、Bing、およびOSMを使用して、衛星画像内のフィーチャを検索します。 目標は、高品質の野球、サッカー、テニス、サッカー、バスケットボールのフィールドを追加してOpenStreetMapを改善することです。
  • 4Kビデオデモ4Kビデオの美しいデモ、Karol Majek

入門

  • demo.ipynb最も簡単な方法です。 これは、MS COCOで事前にトレーニングされたモデルを使用して、自分の画像内のオブジェクトをセグメント化する例を示しています。 任意の画像に対してオブジェクト検出とインスタンスセグメンテーションを実行するためのコードが含まれています。

  • train_shapes.ipynbは、自分のデータセットでMask R-CNNを訓練する方法を示しています。 このノートブックでは、新しいデータセットのトレーニングを実演するためのおもちゃデータセット(図形)を紹介します。

  • model.pyutils.pyconfig.py ):これらのファイルには、メインのRCNN実装が含まれています。

  • inspect_data.ipynb このノートブックでは、さまざまな前処理ステップを視覚化してトレーニングデータを準備しています。

  • inspect_model.ipynbこのノートブックでは、オブジェクトの検出とセグメント化を行うための手順について詳しく説明します。 パイプラインのすべてのステップを視覚化します。

  • inspect_weights.ipynbこのノートブックでは、訓練されたモデルの重みを調べ、異常と奇妙なパターンを探します。

ステップバイステップ検出

モデルのデバッグと理解を助けるために、多くの視覚化を提供する3つのノートブック( inspect_data.ipynbinspect_model.ipynbinspect_weights.ipynb )があり、モデルを段階的に実行して各ポイントの出力を検査することができます。 いくつかの例があります:

1.アンカーのソートとフィルタリング

第1ステージの地域提案ネットワークのすべてのステップを視覚化し、アンカーボックスの洗練と一緒にプラスとマイナスのアンカーを表示します。

2.境界ボックスの細分化

これは、最終検出ボックス(点線)の例であり、第2段階でそれらに適用された細分化(実線)です。

3.マスク生成

生成されたマスクの例 これらの画像は、スケーリングされ、適切な場所に配置されます。

4.レイヤーのアクティベーション

さまざまなレイヤーのアクティベーションを調べて、問題の兆候(すべてゼロまたはランダムノイズ)を探すことはしばしば役に立ちます。

5.体重ヒストグラム

もう1つの有用なデバッグツールは、ウェイトヒストグラムを検査することです。 これらはinspect_weights.ipynbノートブックに含まれています。

6. TensorBoardへのログ記録

TensorBoardは、もう1つの優れたデバッグおよびビジュアライゼーションツールです。 このモデルは、各エポックの終わりに損失を記録し、重みを保存するように構成されています。

6.異なる部分を最終結果に合成する

MS COCOトレーニング

私たちは、MS COCOの開始を容易にするための事前訓練されたウエイトを提供しています。 これらの重みを出発点として使用して、ネットワーク上の独自のバリエーションを訓練することができます。 トレーニングと評価のコードはsamples/coco/coco.pyます。 このモジュールをJupyterのノートブックにインポートすることもできます(例については、ノートブックを参照してください)。あるいは、コマンドラインから次のように直接実行することもできます。

# Train a new model starting from pre-trained COCO weights
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco

# Train a new model starting from ImageNet weights
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet

# Continue training a model that you had trained earlier
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

# Continue training the last model you trained. This will find
# the last trained weights in the model directory.
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=last

COCO評価コードは、次のように実行することもできます。

# Run COCO evaluation on the last trained model
python3 samples/coco/coco.py evaluate --dataset=/path/to/coco/ --model=last

トレーニングスケジュール、学習率、およびその他のパラメータは、 samples/coco/coco.py設定する必要があります。

独自のデータセットのトレーニング

独自のデータセットでモデルをトレーニングするには、2つのクラスをサブクラス化する必要があります。

Configこのクラスにはデフォルト設定が含まれています。 それをサブクラス化し、変更する必要がある属性を変更します。

Datasetこのクラスは、あらゆるデータセットを扱う一貫した方法を提供します。 モデルのコードを変更することなくトレーニング用に新しいデータセットを使用できます。 複数のデータセットを同時にロードすることもできます。これは、検出するオブジェクトが1つのデータセットですべて利用可能でない場合に便利です。

Datasetクラス自体が基本クラスです。 それを使用するには、それを継承する新しいクラスを作成し、データセットに固有の関数を追加します。 utils.py基本Datasetクラスと、 samples/coco/train_shapes.ipynbsamples/coco/coco.pyで拡張した例を参照してください。

公式紙との違い

この実装は、ほとんどの場合マスクRCNNの文書に従いますが、コードの単純さと一般化に賛成していない場合がいくつかあります。 これらは我々が認識している違いのいくつかです。 他の違いに遭遇した場合は、お知らせください。

  • 画像のサイズ変更:バッチごとに複数の画像を訓練するため、すべての画像を同じサイズにリサイズします。 たとえば、MS COCOでは1024x1024pxです。 アスペクト比は保存されているので、画像が正方形でない場合は、ゼロで埋めます。 この論文では、最小の面が800px、最大の面が1000pxにトリミングされるようにサイズ変更が行われています。

  • バウンディングボックス :一部のデータセットはバウンディングボックスを提供し、一部はマスクのみを提供します。 複数のデータセットのトレーニングをサポートするため、データセットに付属しているバウンディングボックスを無視し、代わりにそれらを生成することにしました。 マスクのすべてのピクセルをカプセル化する最小のボックスを境界ボックスとして選択します。 これにより、実装が簡素化され、イメージの回転など、境界ボックスに適用するのが困難なイメージの拡大を簡単に適用できます。

    このアプローチを検証するために、我々は計算されたバウンディングボックスをCOCOデータセットによって提供されるボックスと比較しました。 我々は、境界ボックスの〜2%が1px以上異なっており、〜0.05%が5px以上異なっており、0.01%のみが10px以上異なることを見出した。

  • 学習率:この論文では0.02の学習率が使用されていますが、それは高すぎることがわかりました。特に小さなバッチサイズを使用すると、ウェイトが爆発することがよくありました。 これは、CaffeとTensorFlowがどのように勾配を計算するか(バッチとGPUの平均値と平均値)の違いに関連している可能性があります。 または、公式モデルでは、この問題を回避するためにグラデーションのクリッピングを使用するかもしれません。 グラデーションクリッピングを使用しますが、あまりにも積極的に設定しないでください。 いずれにしても、より小さい学習率がより速く収束することが分かりました。

  • アンカーストライド:ピラミッドの最下位レベルは画像に対して4ピクセルのストライドを持つので、アンカーは4ピクセル間隔ごとに作成されます。 計算とメモリ負荷を減らすために、アンカーのストライドを2に設定します。アンカーの数は4で、精度に大きな影響はありません。

貢献する

このリポジトリへの投稿は大歓迎です。 貢献できるものの例:

  • スピードの向上。 TensorFlowやCythonでPythonコードを書き直すのと同じように。
  • 他のデータセットのトレーニング。
  • 精度の向上。
  • 視覚化と例。

私たちのチームに参加して、このようなさらに多くのプロジェクトを構築するのに役立てることもできます。

要件

Python 3.4、TensorFlow 1.3、Keras 2.0.8、 requirements.txtリストされているその他の一般的なパッケージ

MS COCO要件:

MS COCOのトレーニングやテストには、以下のものも必要です。

Dockerを使用する場合、コードはこのDockerコンテナで動作することが確認されています。

インストール

  1. 依存関係をインストールする

    pip3 install -r requirements.txt
  2. このリポジトリを複製する

  3. リポジトリのルートディレクトリからセットアップを実行する

    python3 setup.py install
  4. リリースのページから事前にトレーニングしたCOCOの重み(mask_rcnn_coco.h5)をダウンロードしてください

  5. (オプション)MS COCOでトレーニングまたはテストするには、これらのreposのいずれかからpycocotoolsをインストールします。 Python3とWindowsのための修正を備えたオリジナルのpycocotoolsのフォークです(公式レポはもうアクティブではないようです)。

より多くの例







-matterport
-, , , ,

執筆者:

関連記事

関連記事はありませんでした