Tensorflowを使用した異論検出とは何ですか? とその仕組み[例]
公開: 2021-06-18目次
物体検出–それはどういう意味ですか?
オブジェクト検出は、コンピュータビジョンの助けを借りて、画像またはビデオ内のオブジェクトを識別または特定できるプロセスです。 猫と人が写っている画像があり、画像内のオブジェクトを分類する必要がある場合は、オブジェクトを検出する手法、つまりオブジェクト検出を適用し、必要なオブジェクト、つまり猫と人を見つけることができます。 これは、検出されたオブジェクトの周囲に描画される境界ボックスを介して実現できます。 したがって、目的のオブジェクトの場所がわかります。
ほとんどの人はまだオブジェクト認識と画像認識と混同しています。 この2つの違いは、画像認識の場合は画像全体にラベルが付けられ、オブジェクト認識の場合は画像内のオブジェクトにラベルが付けられるという事実にあります。
人やテーブルなどのオブジェクトのクラス、および特定の画像内のオブジェクトの位置の座標は、オブジェクトを検出する手法によって識別できます。 オブジェクト検出アルゴリズムのパフォーマンスは、画像内のオブジェクトを見つける能力に依存します。 オブジェクトを検出するそのような例の1つは、顔検出です。
なぜ物体検出なのか?
オブジェクト検出に属する独自の機能により、このプロセスは次のような多くの重要なタスクに適用できます。
- 群衆の中の人々の数え。
- 自動運転車の場合の運転。
- ビデオ監視。
- 顔の検出。
- 異常検出
物体検出アプローチ
オブジェクト検出方法に使用されるアルゴリズムは、使用前にトレーニングされているか、教師なしである可能性があります。
オブジェクトの検出には、機械学習ベースのアプローチと深層学習ベースのアプローチの2つのアプローチが使用されます。
- MLベースのアプローチでは、色ヒストグラムやエッジなど、画像のさまざまな特徴が注目されています。 次に、これらの機能に基づく回帰モデルが生成され、オブジェクトの場所が予測されます。
- 畳み込みニューラルネットワーク(CNN)は、教師なし手法を介してオブジェクトを検出するための深層学習に基づくアプローチの場合に使用されます。
物体検出法の働き
オブジェクト検出タスクは、次の手順で実行できます。
- 入力画像はいくつかの小さなセグメントに分割されます。 一緒にバインドされたボックスのセットは、画像全体にまたがって作成されます。
- セグメント化された各領域は、特徴抽出のプロセスにかけられます。 次に、ボックス内の有効なオブジェクトの存在を予測します。 このプロセスでは、ボックスに視覚的な機能があるかどうかを判断します。
- 重なり合うボックス用に1つのボックスが作成されます。
TensorFlowを使用したオブジェクト検出
TensorFlowは、機械学習用のオープンソースであり、画像認識、音声検索、オブジェクト認識などのいくつかのアプリケーションで広く使用されているライブラリとして定義できます。PythonとC++APIの両方がTensorFlowによって提供されます。
- ディープラーニングアルゴリズムと機械学習アルゴリズムの両方がTensorFlow内に存在します。
- Pythonはフロントエンド言語として採用されており、C++でも効率的に実行されます。
- 計算グラフは、開発者がTensorFlowを使用して作成します。
- 数学演算はグラフのノードで表され、データは接続を介して表されます。
TensorFlowは、GoogleのMachine IntelligenceResearch組織内のGoogleBrainチームによって、機械学習とディープニューラルネットワークの研究を行うために開発されました。
API(Application Programming Interface)は、一連の一般的な操作を提供することにより、開発者がコードを最初から作成することを防ぎます。 TensorFlowオブジェクト検出APIは、オブジェクト検出用のモデルをトレーニングするために適用されます。 フレームワークはTensorFlow上に構築されています。 オブジェクト検出TensorFlowに属する機能は次のとおりです。
- すでにトレーニングされたモデルは「モデル動物園」と呼ばれ、フレームワークで利用できます。
- さまざまなトレーニング済みモデルのトレーニングに使用されるデータセットは次のとおりです。
- COCOデータセット。
- KITTIデータセット。
- 開いている画像のデータセット
オブジェクト検出TensorFlowフレームワークは、さまざまなアーキテクチャ、したがってさまざまな予測精度を持つさまざまなモデルで構成されています。 すでにトレーニングされたモデルのアーキテクチャのタイプは次のとおりです。
1.MobileNet-SSD
シングルコンボリューションのネットワークは、シングルパスでバウンディングボックスの位置を識別します。 このアーキテクチャは、いくつかの畳み込み層を持つ基本層(MobileNet)で構成されています。 バウンディングボックスの位置は、フィーチャマップの操作によって予測されます。 すべてのバウンディングボックスに存在する情報を以下に示します。
- 四隅のバウンディングボックスのオフセット位置(cx、cy、w、h)。
- Cクラスの確率(c1、c2、…cp)
ボックスの形状はSSDによって予測されるのではなく、ボックスの位置が予測されます。 境界ボックスのK個の数は、特徴マップの場所ごとに決定されます。 kバウンディングボックスの形状は、実際のトレーニングの前にすでに設定されています。
次の式は損失を計算します。
L = 1 / N(Lクラス+ Lボックス)
ここで、N:一致したボックスの数、Lクラス:ソフトマックス損失、Lボックス:一致したボックスに関連付けられたエラー。
2. MobileNet
標準化された畳み込みは、畳み込みと点ごとの畳み込み、つまり1*1畳み込みに因数分解されます。 因数分解によるモデルサイズの縮小により、計算が削減されます。
3.インセプション-SSD
Inception-SSDのアーキテクチャはMobileNet-SSDと同じですが、MobileNet-SSDの場合のアーキテクチャのベースはMobileNetであり、ここではInceptionモデルです。
4.より高速なRCNN
オブジェクトの位置の予測は、領域提案のアルゴリズムに基づいています。 検出ネットワークは、SSPnetとFast R-CNNの進歩により、実行時間を短縮しました。 Faster RCNNの場合、入力画像がニューラルネットワークに供給されると、畳み込み特徴マップが生成されます。
次に、領域の提案が畳み込み特徴マップによって識別され、正方形にワープされます。 次に、正方形は、ROLプーリングレイヤー(関心領域レイヤー)を介して固定されるサイズに再形成されます。 次に、完全に接続されているレイヤーへの入力として使用されます。
softmax層は、ROL特徴ベクトルから領域提案クラスを予測するために使用されます。 また、バウンディングボックスのオフセット値も予測されます。
オブジェクト検出TensorFlowモデルの選択
ユーザーの特定の要件に基づいて、TensorFlowAPIから適切なオブジェクト検出TensorFlowモデルを選択できます。 ユーザーが高速モデルを必要とする場合は、シングルショット検出ネットワーク、つまりSSDネットワークを使用できます。 このモデルは非常に高速で、高いfpsでビデオフィードを検出できます。
ただし、より高い精度が必要な場合は、モデルの精度は高いが速度が比較的遅いため、FasterRCNNの方が適している可能性があります。 したがって、ユーザーは自分の要件に従ってさまざまな利用可能な機会を探索できます。
オブジェクト検出用のTensorFlowの例
オブジェクト検出にTensorFlowAPIを使用する場合、機械学習やニューラルネットワークに関する事前の知識は必要ありません。 APIによって提供されるファイルが主に使用されます。 唯一の要件は、Pythonの基礎を知ることです。
1.TensorFlowのダウンロード
- TensorFlowは、gitからダウンロードすることも、手動でダウンロードすることもできます。
- gitを介してTensorFlowをダウンロードすることは、ダウンロードするための最も簡単な方法の1つです。 gitを介してダウンロードするには、システムにgitpreがすでにインストールされている必要があります。 gitをインストールしたら、ターミナルに次のコマンドを入力する必要があります。
- 次のリンクにアクセスして、緑色のボタンをクリックする必要があります。 zipファイルをダウンロードして解凍する必要があります。
- フォルダの名前をmodels-masterからmodelsに変更する必要があります。
- 環境は仮想的に作成する必要があります。 Python仮想環境を作成する主な目的の1つは、分離されたPython環境を作成することです。 Pythonでのプロジェクトに使用されます。 したがって、すべてのプロジェクトの依存関係は異なります。
- 次のコマンドは、anacondaのプロンプトで使用する必要があります。
この場合、仮想環境の名前はobj_detectionです。
conda create-nobj_detection->環境を仮想的にセットアップするため
condaactivateobj_detection->仮想環境をアクティブ化するため
2.依存関係のインストール
- APIに必要な依存関係は、ローカルPCにインストールする必要があります。
- 依存関係は、仮想環境をアクティブ化した後にインストールできます。
- 次のコマンドを入力する必要があります
pip installtensorflow
- GPUが存在する場合は、次のコマンドが必要です
pip install tensorflow-gpu
- その他の依存関係は、次のコマンドを使用してインストールされます
pipインストール枕Cythonlxmljupyter matplotlib contextlib2 tf_slim
3.プロトコルバッファのダウンロード(Protobuff)
- プロトコルバッファは、XMLのようにデータをシリアルに構造化するための特定のメカニズムです。
- 「Protobuff」はリンクからダウンロードする必要があります。
- ファイルを抽出し、ダウンロード済みの「models」フォルダーにある「research」という名前のサブフォルダーにファイルをコピーします。
- protobufファイルを含むフォルダーに移動して、次のコマンドを実行する必要があります
protoc object_detection / protos /*。proto–python_out=。
- コマンドが正常に実行されると、modelsフォルダーのオブジェクト検出の下にあるprotosフォルダー内の各protoファイルに対してpythonファイルが作成されます。
結論
オブジェクト検出は、さまざまなリアルタイムアプリケーションで広く適用されている手法です。 この手法は、機械学習または深層学習アルゴリズムを適用することで実現できることを学びました。
また、API、つまりTensorFlowを適用する場合、ユーザーはPythonプログラミングの概念について事前に知っている必要があります。 そうして初めて、TensorFlowAPIを使用したオブジェクト検出方法を正しく理解できました。 TensorFlowは、機械学習用のオープンソースプラットフォームです。 したがって、TensorFlowとそのアプリケーションの動作メカニズムを理解するには、機械学習の概念についての知識を習得することをお勧めします。
pythonプログラミングを学び、クラウドコンピューティングとともにMLモデルを導入したい中堅の専門家の方は、 upGradが提供する「機械学習と人工知能の科学のマスター」コースをご覧ください。 IIIT BangaloreとLJMUが共同で認定したコースは、専門家のトレーニングに合わせて目標を調整し、夢の企業への参入の準備をします。 必要なのは学士号を取得することだけです。 upGradによるコースに関連する質問がある場合は、サポートチームがご連絡いたします。