Connect with us

ソートリーダー

AIをリアルタイム動画処理に適用する:基礎とさらに詳しく

mm

By Maksym Tatariants, Data Science エンジニア at MobiDev

動画処理に人工知能(AI)を使用することは、新しいことではありません。画像処理を見ていくよりも、AIの最も一般的なユースケースの1つです。画像処理と同様に、動画処理も、コンピュータビジョン、オブジェクト認識、機械学習、ディープラーニングなどの確立されたテクニックを使用してこのプロセスを強化します。

コンピュータビジョンとNLPを動画編集と生成、動画コンテンツの自動タグ付けタスクにおけるオブジェクト認識、AI動画分析のための機械学習、または背景除去のためのディープラーニングを使用する場合、ユースケースは毎日増え続けています。

動画処理でAIを使用する際に取り組むことができるアプローチについて学ぶために、続けてください。

リアルタイム動画処理の基礎

まず基礎から始めましょう。リアルタイム動画処理は、オブジェクト認識と顔認識を使用する監視システムで不可欠な技術です。また、工業界のAI視覚検査ソフトウェアを動作させるプロセスでもあります。

那么、動画処理はどのように機能しますか?動画処理には、デコード、計算、エンコードのシリーズのステップが含まれます。以下は、知っておくべきことです:

  • デコード:圧縮されたファイルから動画をその生の形式に戻すために必要なプロセスです。
  • 計算:生の動画フレームで実行される特定の操作です。
  • エンコード:処理されたフレームをその元の圧縮状態に戻すプロセスです。

今、動画処理タスクの目標は、これらのステップをできるだけ迅速かつ正確に完了することです。これを達成する最も簡単な方法は、並列に作業し、アルゴリズムを速度に最適化することです。単純に言えば?ファイル分割とパイプラインアーキテクチャを利用する必要があります。

動画ファイル分割とは何か

動画ファイル分割により、アルゴリズムは同時に作業し、より遅いより正確なモデルを使用できます。これは、動画を個別の部分に分割し、それらを同時に処理することで実現されます。

動画分割は、サブファイル生成ではなく、仮想ファイル生成の一種と考えることができます。

しかし、動画ファイル分割はリアルタイム動画処理の最適な選択肢ではありません。なぜでしょうか?このプロセスにより、ファイルを一時停止、再開、巻き戻しすることが難しくなります。

パイプラインアーキテクチャとは何か

もう一つの選択肢はパイプラインアーキテクチャです。このプロセスは、動画そのものを分割するのではなく、処理中に実行されるタスクを分割して並列化します。

ここでは、パイプラインアーキテクチャが実践でどのように機能し、リアルタイムで顔認識とぼかしを行う動画監視システムで使用される方法の簡単な例を示します。

この例では、パイプラインはタスクをデコード、顔認識、顔ぼかし、エンコードに分割しています。而且、パイプラインの速度を向上させるには、パイプラインのディープラーニング技術を使用できます。

デコードとエンコードの説明

デコードとエンコードについてはどうでしょうか?これらのプロセスを完了するには2つの方法があります。ソフトウェアとハードウェアです。

あなたはすでにハードウェアアクセラレーションの概念に精通しているかもしれません。このプロセスは、最新のNVIDIAグラフィックカードに搭載されたデコーダーとエンコーダー、およびCUDAコアによって可能になります。

那么、エンコードとデコードのプロセスに対して利用可能なハードウェアアクセラレーションの選択肢は何ですか?以下は、いくつかの一般的な選択肢です:

  • CUDAサポートを使用したOpenCVのコンパイル:CUDAサポートを使用したOpenCVのコンパイルにより、デコードとOpenCVを使用したパイプライン計算の両方が最適化されます。ただし、Pythonラッパーはこれをサポートしていないため、C++で書く必要があります。しかし、GPUを使用してCPUメモリへのコピーなしでデコードと数値計算を行う必要がある状況では、まだ選択肢の1つです。
  • FFmpegまたはGStreamerをNVDEC/NVENCコーデックサポートでコンパイルする:もう1つの選択肢は、NVIDIAデコーダーとエンコーダーを使用することです。これらは、FFmpegとGStreamerのカスタムインストールに含まれています。 ただし、可能であればFFmpegを使用することをお勧めします。メンテナンスが少なく済みます。また、ほとんどのライブラリはFFmpegによって動作しているため、ライブラリのパフォーマンスを自動的に向上させることができます。
  • NVIDIA Video Processing Frameworkを使用する:最後の選択肢は、Pythonラッパーを使用して、GPU上のPyTorchテンソルに直接フレームをデコードすることです。この選択肢により、CPUからGPUへの余分なコピーが削除されます。

顔認識とぼかし

顔認識を完了するために、オブジェクト検出モデル(SSDまたはRetinaFace)が一般的な選択肢です。これらのソリューションは、フレーム内の人間の顔を検出するために機能します。而且、私たちの経験に基づくと、Caffe Face trackingとTensorFlowオブジェクト検出モデルを好みます。なぜなら、これらは最も優れた結果をもたらしたからです。而且、両方とも、OpenCVライブラリのdnnモジュールを使用して利用可能です。

そして、顔が検出された後はどうなるのでしょうか?次に、PythonとOpenCVベースのシステムは、バウンディングボックスと検出信頼度を示します。最後に、トリミングされた領域にぼかしのアルゴリズムが適用されます。

AI駆動のライブ動画処理ソフトウェアを構築する方法

動画処理、動画を動作させるコーデック、必要なハードウェアとソフトウェアは、技術的にかなり複雑です。

しかし、それでも、これらのツールを使用して、独自のライブ動画処理ソフトウェアを構築することは可能です。

以下は、実行する必要があることの簡単な説明です:

  1. 事前トレーニング済みのニューラルネットワークを調整して、必要なタスクを完了します。
  2. クラウドインフラストラクチャを構成して、動画処理を処理し、必要に応じてスケーリングします。
  3. ソフトウェアレイヤーを構築して、プロセスを凝縮し、モバイルアプリケーションや管理パネルなどの特定のユースケースを統合します。

事前トレーニング済みのニューラルネットワークとシンプルなアプリケーションレイヤーを使用して、同様の動画処理ソフトウェアのMVPを開発するには、最大4か月かかります。しかし、スコープとタイムラインは、各プロジェクトの詳細によって異なります。ほとんどの場合、Proof of Concept開発から始めて、プロジェクトの詳細を調査し、最適なフローを見つけることが意味があります。

Maksymは、データサイエンスと機械学習における新しい知見と経験を積むことに熱心です。特に、ディープラーニングベースの技術とそれらのビジネス用途への応用に興味を持っています。