ディープラーニングでカウント
このツールを使用して、ディープラーニングベースのアプローチによって、さまざまな方向とスケーリングのオブジェクトを検索してカウントします。
このツールは、トレーニングモードとともに使用されます。 これは、最初に、参照オブジェクトと指定されたトレーニングパラメーターを定義するトレーニング画像に基づいてトレーニングが実行されることを意味します。トレーニング中に、指定されたトレーニングパラメーターに応じて追加のトレーニング画像が生成され、さまざまな方向やスケーリングに対する堅牢性が向上します。
トレーニングエリアは ツールボード の左側にあります。カウントの処理モードとトレーニングモードを切り替えることができます。グラフィックスウィンドウには、現在有効なモードの画像が表示され、トレーニングエリアで青色にハイライトされます。左上の検索パラメータに加えて、このツールには、右上にトレーニング用のパラメータが表示されます。 トレーニングが必要なツールの使用方法の詳細については、トピックトレーニングモードの使用を参照してください。
トレーニングパラメーター
トレーニングエリア
グラフィックウィンドウ
表示された画像
トレーニングセクションには、処理画像とトレーニング画像が表示されます。
- 処理画像: 前のツールから受け取った現在の「画像」。
- トレーニング画像: ディープラーニングモデルのトレーニングに使用する画像。
トレーニング
ディープラーニングモデルをトレーニングするには、まずカウントする参照オブジェクトを少なくとも 1 つ定義し、それに応じてトレーニングパラメーターを調整する必要があります。複数の参照オブジェクトを定義することもできます。この場合、参照オブジェクトごとにトレーニング画像を追加する必要があります。トレーニングの実行後、結果を確認し、必要に応じてさらに調整を行うことができます。
参照オブジェクトの定義
- 「
」ボタンまたはショートカット F3 を使用してトレーニング画像を追加し、カウントするオブジェクトを表示します。
- トレーニング画像のフィルタータイプを「含める」に設定します。
- トレーニング画像で、カウントするオブジェクト上に ROI を描画します。このオブジェクトは、トレーニング用の基準オブジェクトとして使用されます。
- 別のオブジェクトをカウントする場合は、フィルタータイプ「含める」を使用して新しいトレーニング画像を追加し、それぞれの参照オブジェクト上に ROI を描画します。画像内でカウントしたいオブジェクトのタイプごとにこれを繰り返すことができます。
- オプションとして、フィルタータイプ「除外する」を使用して 1 つまたは複数のトレーニング画像を追加し、カウントから除外するオブジェクトを指定します。これは、見た目は似ているもののカウントに含めるべきではないオブジェクトがある場合に便利です。
- 指定した参照オブジェクトの現在の設定が正常に機能するかどうかを確認するには、トレーニングを実行して結果を確認します。ただし、オブジェクトを異なる方向とスケーリングで検出する必要がある場合は、次のセクションで説明するように、まずトレーニング設定を調整できます。
このツールは、トレーニング画像ごとに 1 つのオブジェクトのみをトレーニングするように設計されています。したがって、トレーニング画像ごとにオブジェクトを 1 つだけ選択する必要があります。トレーニング画像に複数の ROI を追加すると、それらは 1 つの複合オブジェクトとみなされます。
トレーニング設定の定義とトレーニングの適用
トレーニングパラメーターを使用して、方向とスケーリングに関する設定を構成できます。トレーニングパラメーターのデフォルト設定では、ディープラーニングモデルは、それぞれのトレーニング画像で定義されている方向とスケーリングでのみオブジェクトを検出するようにトレーニングされます。
- カウントするオブジェクトが異なる方向で発生する可能性がある場合は、トレーニングパラメーター「方向許容範囲」を調整します。
- カウントするオブジェクトの画像内でのスケールが異なる可能性がある場合は、それに応じてトレーニングパラメーター「スケール許容範囲」を調整します。
- 現在のトレーニング設定が正常に機能するかどうかを確認するには、次のセクションの説明に従ってトレーニングを実行して結果を確認します。
トレーニングが適用されると、さまざまな方向とスケーリングのオブジェクトで追加のトレーニング画像が自動的に生成されます。トレーニング中に生成される追加のトレーニング画像の数は、トレーニングパラメーターの設定によって異なります。「方向許容範囲」と「方向許容範囲ステップ」の値が高いほど、より多くの画像がトレーニング用に生成されます。
トレーニングパラメーターの値は、トレーニングの持続時間と処理時間の両方に影響します。トレーニング中に追加のトレーニング画像が生成されるほど、モデルのトレーニングにかかる時間は長くなります。処理中に、ツールはさまざまな向きや倍率でオブジェクトをチェックするため、カウント対象のオブジェクトの検出にも時間がかかります。
「方向許容範囲」と「スケール許容範囲」の値は、目的のすべてのオブジェクトを検索してカウントするために十分な高さの値に設定することをお勧めしますが、必要となるトレーニングに時間がかかることを避けるために、それより高い値には設定しないでください。
カウントされるオブジェクトの方向がわかっている場合は、オブジェクトが発生する可能性のある方向ごとに新しいトレーニング画像を追加することで、わかっている方向についてトレーニングできます。たとえば、オブジェクトが常に 0° または 90° の方向で表示される場合、2 つのトレーニング画像 (1 つでは方向が 0° の参照オブジェクトが定義され、もう 1 つでは方向が 90° の参照オブジェクトが定義されている) を追加できます。このようにして、トレーニングされたディープラーニングモデルは、これら 2 つの参照オブジェクトの方向にあるオブジェクトをカウントできるようになります。この場合、オブジェクトが両方の方向でカウントされるようにトレーニングパラメーター「方向許容範囲」を調整する必要はありません。同じことはオブジェクトのスケーリングにも当てはまります。
トレーニングの実行と結果の確認
それぞれの参照オブジェクトを含むトレーニング画像を追加し、トレーニング設定を確認した場合は、次のようにディープラーニングモデルをトレーニングして結果を確認できます。
- 「トレーニングデータを適用」をクリックしてトレーニングを実行します。
- 一連の画像でアプリケーションを実行し、すべての画像でオブジェクトが正しくカウントされているか確認します。
- 必要に応じて、参照オブジェクトの周囲の ROI を調整したり、トレーニングパラメーターを調整したりするなど、検索パラメーターまたはトレーニングを調整します。トレーニング ROI またはトレーニングパラメーターを調整した場合は、トレーニングを新たに実行する必要があることに注意してください。
Artificial Intelligence Acceleration インターフェース (AI²) のサポート
MERLIC には NVIDIA® TensorRT™ SDK および Intel® Distribution of OpenVINO™ toolkit 用の Artificial Intelligence Acceleration インターフェース (AI²) が付属しています。したがって、AI アクセラレーターハードウェアを NVIDIA® TensorRT™ または OpenVINO™ toolkit と互換性のある処理ユニットとして使用して、それぞれのハードウェア (NVIDIA® GPU、または CPU、Intel® GPU、Movidius™ VPU などの OpenVINO™ toolkit をサポートするハードウェア) で最適化された推論を実行できます。このようにして、ディープラーニングの推論時間を大幅に高速化できます。それぞれのハードウェアは、ツールパラメーター「処理ユニット」で選択できます。
前提条件
OpenVINO™ toolkit をサポートする NVIDIA® GPU および CPU は、MERLIC のインストール直後に使用できます。追加インストールやセットアップは必要ありません。
OpenVINO™ toolkit を処理ユニットとして使用して Intel® GPU および VPU を使用するには、次の前提条件が適用されます。
- 最初に Intel® Distribution of OpenVINO™ toolkit をインストールする必要があります。
- OpenVINO™ toolkit 環境で MERLIC を開始する必要があります。
インストールと前提条件の詳細については、AI² ディープラーニングを使用するツールのインターフェース のトピックを参照してください。
パラメーター
基本パラメーター
画像:
このパラメーターは、オブジェクトをカウントする画像を表します。
最小スコア:
このパラメーターは、検出されたオブジェクトと参照オブジェクトの最小類似性を決定する数値です。オブジェクトの類似性がこのパラメーターに定義された値よりも小さい場合、そのオブジェクトはカウントされません。
このパラメーターは定義済みの実数であり、デフォルト設定値は 0.5 です。対応するコネクターで最小スコアを変更できます。値は 0 より大きく、1 以下の数値にする必要があります。「最小スコア」の値が大きいほど、候補の数が少なくなり、検索が高速になります。
現在の「最小スコア」は、アプリケーションを段階的に実行し、すべての画像でオブジェクトが正しく表示されることを確認します。
追加パラメーター
処理領域:
このパラメーターは、処理する領域を定義します。ROI と「処理領域」の結合部分の外側にある画像部分は処理の対象外になります。また、そのどちらかが空の場合、他の一方の内部にある画像部分は処理されます。どちらも空の場合、画像全体が処理されます。
デフォルトで、「処理領域」は空の領域として定義されます。「処理領域」を指定するには、領域が現在のツールに渡されるよう、パラメーターを前のツールの適切な領域結果に接続します。
ROI:
このパラメーターは、処理用の関心領域 (ROI) を定義します。ROI と「処理領域」の結合部分の外側にある画像部分は処理の対象外になります。 また、そのどちらかが空の場合、他の一方の内部にある画像部分は処理されます。どちらも空の場合、画像全体が処理されます。
デフォルトで、「ROI」は空 ROI として定義されます。空でない ROI を処理に使用する場合は、前のツールの適切な ROI 結果にパラメーターを接続するか、使用可能な ROI ボタンで新しい ROI を画像に描画します。
アライメントデータ:
このパラメータは、ROI のアライメントに使用するアライメントデータを表します。デフォルトでは、アライメントデータが接続されていないため、効果はありません。特定のアライメントデータを使用するには、マッチングによるアライメント、直線境界でアライメントを決定、画像をアライメント、あるいは 画像を回転 など、パラメータを適切な前のツールの結果に接続します。
最大オーバーラップ:
このパラメーターは、カウントされるオブジェクトの最大許容オーバーラップを定義します。オーバーラップは、オブジェクトそのものの領域ではなく、オブジェクト周囲の最小外接矩形で決定します。したがって、2 つのオブジェクトの実際の領域は交差していなくてもそれらのオブジェクトが重複することもあります。
パラメーターはパーセント値で表され、デフォルト設定値は 50% です。このとき、カウントの対象になる検索画像における最大許容閉塞面積は、オブジェクトの最小周囲矩形の 50% です。パラメーターは 0 から 100 の範囲の値に設定できます。値を 0 に設定すると、オーバーラップはまったく許可されず、オーバーラップのないオブジェクトのみがカウントされます。ただし、「最大オーバーラップ」が高ければ高いほど、誤ったオブジェクトが検索されるリスクが高くなります。
処理ユニット:
このパラメーターは、画像の処理に使用するデバイスを定義します。パラメーターの設定値はデフォルトで「自動」です。このモードでは、MERLIC では、CPU よりも処理能力が高いため、処理ユニットに適した GPU が選択されます。ただし、これには各 GPU に 4 GB 以上の利用可能なメモリが必要です。適切な GPU が見つからない場合は、CPU がフォールバックとして使用されます。
処理ユニットを手動で選択することもできます。パラメーターをクリックして、使用可能なすべての処理ユニットのリストからデバイスを選択します。処理ユニットとして GPU を選択している場合は、使用するディープラーニングモデルに十分なメモリが利用可能であることを確認するようお勧めします。そうでない場合、推論時間が遅くなるなどの望ましくない影響が発生する可能性があります。
MERLIC は、NVIDIA® TensorRT™ SDK または OpenVINO™ toolkit と互換性のある AI アクセラレーターハードウェアの使用もサポートしています。
- NVIDIA® GPU
- OpenVINO™ toolkit をサポートする CPU、Intel® GPU、Intel® VPU (MYRIAD および HDDL)
それぞれのデバイスは、接頭辞「TensorRT(TM)」または「OpenVINO(TM)」のいずれかでマークされます。NVIDIA® TensorRT™ または OpenVINO™ toolkit をサポートするデバイスを選択した場合には、メモリは AI² インターフェースのそれぞれのプラグインを介してデバイス上で初期化されます。
AI アクセラレーターハードウェアが処理ユニットとして選択されるとすぐに、ディープラーニングモデルの最適化が開始されます。最適化の後に、モデルパラメーターを表すすべてのパラメーターは、内部的に読み取り専用に設定されます。したがって、選択した AI アクセラレーターが処理ユニットとして使用されている限り、それらの値は変更できません。パラメーターを変更するには、最初に処理ユニットを AI アクセラレーションなしで別の処理ユニットに変更する必要があります。パラメーターを設定した後、処理ユニットをそれぞれの AI アクセラレーターハードウェアに戻すことができます。
OpenVINO™ toolkit をサポートする CPU は、追加のインストール手順なしで使用できます。それらは、使用可能な処理ユニットのリストで自動的に使用可能になります。同じ名前の複数の処理ユニットが使用可能である場合、それらの名前にインデックス番号が割り当てられます。同じことが NVIDIA® TensorRT™ をサポートする GPU にも当てはまります。
処理ユニットとして OpenVINO™ toolkit をサポートする GPU および VPU を使用するには、Intel® Distribution of OpenVINO™ toolkit をコンピューターにインストールし、MERLIC を OpenVINO™ toolkit 環境で開始する必要があります。前提条件の詳細については、AI² ディープラーニングを使用するツールのインターフェースのトピックを参照してください。
AI アクセラレーターハードウェアによる最適化に加えて、MERLIC は NVIDIA® CUDA® Deep Neural Network (cuDNN) によるさらなる動的最適化をサポートします。この最適化は、MERLIC Creator の MERLIC 設定によって有効にすることができます。詳細については、トピック「MERLIC の設定」を参照してください。
精度:
このパラメーターは、ディープラーニングモデルの推論のための最適化に内部的に使用されるデータタイプを定義します。つまり、モデルが変換される精度を定義します。このパラメーターのデフォルト設定値は「高」です。
次の表は、このツールでサポートされているモデルの精度を示しています。
|
値 |
説明 |
|---|---|
|
高 |
ディープラーニングモデルモデルは「float32」の精度に変換されます。 |
|
中 |
ディープラーニングモデルモデルは「float16」の精度に変換されます。 |
ほとんどの処理ユニットは、両方のタイプの精度をサポートしています。ただし、これらの精度の 1 つしかサポートしない処理ユニットもいくらかあります。この場合、パラメーター「処理ユニット」でそれぞれのデバイスが選択されるとすぐに、サポートされている精度のみがパラメーターで使用可能になります。処理ユニットが自動的に選択される場合、つまり「処理ユニット」が「自動」に設定されている場合、精度「高」のみが使用可能になります。
トレーニングパラメーター
トレーニングパラメーターの値は、トレーニングの持続時間と処理時間の両方に影響します。トレーニング中に追加のトレーニング画像が生成されるほど、モデルのトレーニングにかかる時間は長くなります。処理中に、ツールはさまざまな向きや倍率でオブジェクトをチェックするため、カウント対象のオブジェクトの検出にも時間がかかります。
基本トレーニングパラメーター
方向許容範囲:
このパラメーターは、参照オブジェクトがどの方向でトレーニングされるかに影響を与えます。したがって、検索画像内でオブジェクトを回転させた場合に、トレーニングされたディープラーニングモデルがそれぞれのオブジェクトを見つけてカウントするかどうかも決定します。
値は度数で定義され、デフォルト設定値は 0°です。これは、オブジェクトがそれ以上の方向許容範囲なしでトレーニングされ、ディープラーニングモデルは、オブジェクトがトレーニング画像と同じ方向で表示される場合にのみ、処理モードでオブジェクトをカウントすることを意味します。パラメーターは 0° ~ 180° の範囲の値に設定できます。
このパラメーターを調整する場合、トレーニングパラメーター「方向許容範囲ステップ」の値も考慮する必要があります。その値によって、指定された方向許容範囲がトレーニングにどの程度詳細に含まれるかが定義されるからです。トレーニング中に、さまざまな方向のオブジェクトで追加のトレーニング画像が自動的に生成されます。「方向許容範囲」と「方向許容範囲ステップ」の値によって、これらの追加のトレーニング画像がいくつ生成されるかが決まります。「方向許容範囲」は、画像内でオブジェクトをどの程度回転させられるかを定義します。「方向許容範囲ステップ」は、指定された方向許容範囲内のどの角度に対して追加のトレーニング画像が生成されるかを定義します。方向の各ステップで、オブジェクトがそれに合わせて回転するトレーニング画像が生成されます。生成されたトレーニング画像は、元のトレーニング画像に加えて、トレーニング中に組み込まれます。
たとえば、「方向許容範囲」が 20 に設定されている場合、オブジェクトは -20° ~ +20° の方向範囲でトレーニングの対象となります。同時に「方向許容範囲ステップ」を 10 に設定すると、指定された方向許容範囲がトレーニング中に 10° 刻みで適用されます。これは、トレーニング中に 4 つの追加画像が生成されることを意味します。これらの追加のトレーニング画像は、-20°、-10°、10°、20° の異なる方向ステップで参照オブジェクトを表します。0° の方向は、トレーニング画像内のオブジェクトの実際の方向を表します。
スケール許容範囲:
このパラメーターは、参照オブジェクトがどのスケーリングでトレーニングされるかに影響を与えます。したがって、検索画像内でオブジェクトがスケーリングされて表示された場合に、トレーニングされたディープラーニングモデルがそれぞれのオブジェクトを見つけてカウントするかどうかも決定します。
このパラメーターは定義済みの実数であり、デフォルト設定値は 0 です。これは、オブジェクトがそれ以上のスケーリング許容範囲なしでトレーニングされ、ディープラーニングモデルは、オブジェクトがトレーニング画像と同じサイズで表示される場合にのみ、処理モードでオブジェクトをカウントすることを意味します。対応するコネクターでパラメーターを設定できます。
このパラメーターを調整する場合、トレーニングパラメーター「スケール許容範囲ステップ」の値も考慮する必要があります。その値によって、指定されたスケール許容範囲がトレーニングにどの程度詳細に含まれるかが定義されるからです。トレーニング中に、さまざまなスケーリングのオブジェクトで追加のトレーニング画像が自動的に生成されます。「スケール許容範囲」と「スケール許容範囲ステップ」の値によって、これらの追加のトレーニング画像がいくつ生成されるかが決まります。「スケール許容範囲」は、画像内でオブジェクトをどの程度スケーリングできるかを定義します。「スケール許容範囲ステップ」は、指定されたスケーリング許容範囲のどの換算係数に対して追加のトレーニング画像が生成されるかを定義します。スケールステップごとに、オブジェクトがそれに合わせてスケーリングされるトレーニング画像が生成されます。生成されたトレーニング画像は、元のトレーニング画像に加えて、トレーニング中に組み込まれます。
たとえば、「スケール許容範囲」が 0.3 に設定されている場合、オブジェクトは -0.3 ~ +0.3 の範囲の換算係数でトレーニングの対象となります。同時に「スケール許容範囲ステップ」を 0.1 に設定すると、指定されたスケーリング許容範囲がトレーニング中に 0.1 刻みの換算係数で適用されます。これは、トレーニング中に 6 つの追加画像が生成されることを意味します。これらの追加のトレーニング画像は、-0.3、-0.2、-0.1、0.1、0.2、0.3 の異なるスケーリングステップで参照オブジェクトを表します。スケーリングステップ 0 は、トレーニング画像内のオブジェクトの実際のサイズを表します。
追加トレーニングパラメーター
方向許容範囲ステップ:
このパラメーターは、参照オブジェクトがどの方向ステップでトレーニングされるかに影響を与えます。
値は度数で定義され、デフォルト設定値は 5°です。パラメーターは 0° ~ 180° の範囲の値に設定できます。このパラメーターは、「方向許容範囲」の値が 0 に設定されている場合は無効です。
方向ステップは「方向許容範囲」で定義された許容範囲を参照するため、このパラメーターはトレーニングパラメーター「方向許容範囲」のみを考慮して変更する必要があります。「方向許容範囲」で定義された範囲内の各方向ステップで、オブジェクトがそれに合わせて回転するトレーニング画像が生成されます。2 つのトレーニングパラメーターの組み合わせがトレーニングにどのような影響を与えるかの詳細については、パラメーター「方向許容範囲」の説明を参照してください。
スケール許容範囲ステップ:
このパラメーターは、参照オブジェクトがどのスケーリングステップでトレーニングされるかに影響を与えます。
このパラメーターは定義済みの実数であり、デフォルト設定値は 0.1 です。これは、定義された「スケール許容範囲」が、係数 0.1 のスケーリングステップでのトレーニングで考慮されることを意味します。対応するコネクターでその値を変更できます。このパラメーターは、「スケール許容範囲」の値が 0 に設定されている場合は無効です。
スケーリングステップは「スケール許容範囲」で定義された許容範囲を参照するため、このパラメーターはトレーニングパラメーター「スケール許容範囲」のみを考慮して変更する必要があります。「スケール許容範囲」で定義された範囲内の各スケーリングステップで、オブジェクトがそれに合わせてスケーリングされるトレーニング画像が生成されます。2 つのトレーニングパラメーターの組み合わせがトレーニングにどのような影響を与えるかの詳細については、パラメーター「スケール許容範囲」の説明を参照してください。
基本結果
数:
この結果は、現在のパラメーター設定でカウントされたオブジェクトの数を返します。結果は整数として返ります。
スコア:
この結果は、カウントされた各オブジェクトの決定されたスコア、つまり、カウントされたオブジェクトがトレーニング済みモデルとどの程度一致するかを示す実数を返します。画像内で複数のオブジェクトがカウントされた場合、それぞれのスコアがタプルで返されます。
ツール状態:
「ツール状態」はツール状態の情報を返します。したがって、エラー処理に使うことができます。さまざまなツールの状態結果の詳細については、 ツール状態 結果 のトピックを参照してください。
追加結果
オブジェクトの場所:
この結果は、カウントされたオブジェクトの領域輪郭を返します。
方向矢印:
この結果は、トレーニング中に生成されたモデルの方向を示す矢印を返します。結果は輪郭として返されます。
X:
この結果は、カウントされたオブジェクトの X 座標を返します。返された X 座標と Y 座標は、「オブジェクトの場所」で返された領域輪郭の中心に対応します。
Y:
この結果は、カウントされたオブジェクトの Y 座標を返します。返された X 座標と Y 座標は、「オブジェクトの場所」で返された領域輪郭の中心に対応します。
使用処理ユニット:
この結果は、最後の反復で使用された処理ユニットを返します。この結果を使用して、パラメーター「処理ユニット」が「自動」に設定されている場合にどの処理ユニットが実際に使用されたかを確認したり、正しい処理ユニットが使用されたことを確認したりできます。
精度データタイプ:
この結果は、ディープラーニングモデルの推論のための最適化に内部的に使用されたデータタイプを返します。この結果を使用して、問題が発生した場合に正しい精度が使用されたかどうかを確認できます。
パラメーター「精度」が「高」に設定されている場合、ディープラーニングモデルは「float32」の精度に変換する必要があります。したがって、この結果はデータタイプ「float32」を返すことが期待されます。パラメーター「精度」が「中」に設定されている場合、ディープラーニングモデルは「float16」の精度に変換する必要があります。この場合、この結果の期待値はデータタイプ「float16」です。MVApp の反復中に問題が発生した場合は、この結果が予想とは異なるデータタイプを返すかどうかを確認し、ログファイルで詳細を確認することもできます。ログファイルの詳細については、記録のトピックを参照してください
処理時間:
この結果は、ツールの直近の実行の持続時間をミリ秒単位で返します。結果は、追加結果として提供されます。したがって、デフォルトでは非表示になっていますが、ツール結果の横にある ボタンを使用して表示できます。詳細については、ツールリファレンス概要の処理時間の節を参照してください。
アプリケーションの例
このツール、以下の MERLIC Vision App 例で使用します:
- count_bottles_with_deep_learning.mvapp