ソートリーダー

リアルタイムビデオ処理にAIを適用する:基礎とその先

mm
Unite.AI を Google の優先ソースに追加

Maksym Tatariants、データサイエンスエンジニア、MobiDev

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

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

続けて読んで、ビデオ処理でAIを使用する際に取り組むことができるアプローチについて学びましょう。

リアルタイムビデオ処理の基礎

まず、基礎から始めましょう。リアルタイムビデオ処理は、オブジェクトと顔認識を使用する監視システムで不可欠な技術です。また、産業界では、AIビジュアルインスペクションソフトウェアを動かすプロセスでもあります。

では、ビデオ処理はどのように機能するのでしょうか。ビデオ処理には、デコード、計算、エンコードの手順が含まれます。以下に必要なことを説明します。

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

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

ビデオファイル分割とは

ビデオファイル分割により、アルゴリズムは同時に作業し、より遅いがより正確なモデルを使用できます。これは、同時に処理される別々のパートにビデオを分割することで実現されます。

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

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

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

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

ここでは、パイプラインアーキテクチャが実践でどのように機能し、リアルタイムで顔検出とぼかしを行うビデオ監視システムで使用されるかを簡単に説明します。

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

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

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

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

では、エンコードとデコードのハードウェアアクセラレーションの選択肢は何でしょうか。以下にいくつかの一般的な選択肢を示します。

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

顔検出とぼかし

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

顔が検出された後には、PythonとOpenCVベースのシステムが、バウンディングボックスと検出信頼度を表示します。最後に、切り取られた領域にぼかしアルゴリズムが適用されます。

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

ビデオ処理、動作するコーデック、必要なハードウェアとソフトウェアは、技術的な性質のものであることは秘密ではありません。

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

以下は、必要な手順の簡単な説明です。

  1. 事前にトレーニングされたニューラルネットワークを調整して、必要なタスクを完了します。
  2. ビデオ処理と必要に応じてスケーリングするためのクラウドインフラストラクチャを構成します。
  3. 特定のユースケース(例:モバイルアプリケーション、管理パネル、またはWebパネル)を統合してプロセスを凝縮するためのソフトウェアレイヤーを構築します。

事前にトレーニングされたニューラルネットワークとシンプルなアプリケーションレイヤーを使用して、同等のビデオ処理ソフトウェアのMVPを開発するには、最大4ヶ月かかる場合があります。ただし、スコープとタイムラインは各プロジェクトの詳細によって異なります。大多数の場合、プロジェクトの詳細を調査し、最適なフローを見つけるために、概念実証開発から始めるのが最も適切です。

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