はじめに
セーフィー株式会社で画像認識AIの開発をしているおにきです。
画像認識AIシステムを構築する際AIのコンピューティング処理を「どこで」「いつ」「どのようなデータに対して」行うか、すなわちサービングパターンを選択することは、システムの性能、コスト、拡張性に大きな影響を与えます。本記事では弊社のクラウド録画サービスを例に、画像認識AIのサービングパターンについて詳しく解説します。適切なサービングパターンを選択することで、より効率的で高性能なシステムを構築できるようになります
画像認識システムのサービングパターンのための要素
弊社のクラウド録画プラットフォームSafieでは、ネットワークに接続されたカメラが常時映像をクラウドにアップロードし、それを保存する仕組みとなっております。
コンピューティング
コンピューティングとは画像認識の主たる処理で画像を入力して認識結果のメタ情報(物体位置など)を出力する処理であり、それをどこで行うかで場合分けを行いました。
- エッジ(カメラ内)
- カメラ(イメージセンサー)と同じハードウェア内にあるCPUもしくはNPU(Neural Processing Unit)で画像認識処理を行います。スマホは防犯カメラの内部で画像認識を行うパターンです。多くの場合、カメラの電力面・コスト面の制約により計算性能が限られます。
- エッジ(AI Box)
- カメラとネットワーク上で近い箇所に別途ハードウェア(AI Box)を設置して画像認識を行う場合です。防犯カメラと同じネットワーク内にJetsonやオンプレGPU PCなどをおいて画像認識処理を行うパターンです。通常カメラ内でのエッジ処理に比べると大きな計算性能を持っています。複数台のカメラに対して1つのAI Boxで認識を行うこともできます。
- クラウド
- カメラから送られてきた画像をクラウド上のコンピューティング環境で画像認識処理を行うパターンです。CPU・GPUなど様々な計算性能を持つインスタンスを選択できますが、エッジ(カメラ内)、エッジ(AI Box)と異なり大きなランニングコストがかかります。
タイミング
画像認識処理を行うタイミングによって以下の3つのパターンに分類することができます
- ストリーミング
- 画像データがコンピューティングモジュールに送られたタイミングで処理するパターンです。
- バッチ
- 画像データをストレージに保存しておいて、あるタイミングでまとめて処理を行うパターンです。本稿では触れませんが、バッチ処理は細かく分けると非同期と同期の2種類にさらに分けることができます。
トリガー
処理を行うタイミングは以下の2パターンに分類できます。
- 一定周期
- あらかじめ定められた周期で処理を行います。
- 外部・UI
- 外部のセンサーによるイベントやUIからのリクエストをトリガーとして処理を行います。
入力データ形式
- 静止画
- 静止画を入力データとして認識処理をします
- 動画
- 動画を入力データとして認識処理をします。
- ※動画は複数枚の静止画として考えることができますが、動画を入力データとして用いる場合はトラッキングなどフレーム間をまたがった処理を行います。
組み合わせのパターン
前述の要素の組み合わせからパターンを検討します。組み合わせによっては、実現性がないものもあります。以下に弊社で利用および利用を計画している代表的なパターンを記載します。
コンピューティング | タイミング | トリガー | 形式 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
# | パターン名 | エッジ(カメラ内) | エッジ(AI Box) | クラウド | ストリー ミング | バッチ | 一定 周期 | 外部・UI | 画像 | 動画 |
1 | エッジ(カメラ内)動画認識 | ○ | ○ | ○ | ○ | |||||
2 | エッジ(AI Box)動画認識 | ○ | ○ | ○ | ○ | |||||
3 | エッジ(カメラ内)静止画認識 | ○ | ○ | ○ | ○ | |||||
4 | エッジ(AI Box)静止画認識 | ○ | ○ | ○ | ○ | |||||
5 | クラウドストリーミング動画認識 | ○ | ○ | ○ | ○ | |||||
6 | クラウドストリーミング静止画認識 | ○ | ○ | ○ | ○ | |||||
7 | クラウドストリーミング外部トリガー認識 | ○ | ○ | ○ | * | * | ||||
8 | クラウドバッチ外部トリガー動画認識 | ○ | ○ | ○ | ○ | |||||
9 | エッジ(カメラ内)・クラウドハイブリッド認識 | ● | ● | ○ | ○ | ○ |
○:利用
●:両方同時に利用
*:どれかを利用
1.エッジ(カメラ内)動画認識
カメラ内で動画の認識を行います。カメラ内のAI処理は計算性能が小さいため、比較的小さいモデルを利用して動画認識を行います。
・動きを伴う分析(人・車両・ベルトコンベア上のモノ)
・姿勢・アクション検出
・属性(人・車種)
・認証(顔・ナンバープレート)
2.エッジ(AI Box)動画認識
AI Boxで動画の認識を行います。認識できるタスクとしては先述のエッジ(カメラ内)動画認識と同じになりますが、より大きいモデルを利用して精度を向上させることができます。
・動きを伴う分析(人・車両・ベルコンベア上のモノ)
・姿勢・アクション検出ト
・属性(人・車種)
・認証(顔・ナンバープレート)
3.エッジ(カメラ内)静止画認識
認識間隔が数分など比較的長い認識のパターンです。エッジ(カメラ内)動画認識に比べて計算時間に余裕があるため、1フレームあたりの計算量がある程度大きくても実行可能です。またメーター読み取りなどカメラごとに違うカスタマイズしたモデルも実行可能です。
・メーター読み取り
4.エッジ(AI Box)静止画認識
認識間隔が数分など比較的長い認識のパターンです。エッジ(カメラ内)静止画認識に比べてより大きなカスタマイズモデルを利用することもできます。
・メーター読み取り
5.クラウドストリーミング動画認識
クラウドでストリーミングで動画を認識するパターンです。サーバーのインスタンスにつねに大きな負荷を掛けるため大きなランニングコストになります。ランニングコストが問題にならない高付加価値な認識機能やPoCなどでは利用できるパターンです。
・動きを伴う分析(人・車両・ベルトコンベア上のモノ)
・姿勢・アクション検出
・属性(車種)
はできる
以下は映像の解像度が低いため精度で不利
・属性(人)
・認証(顔・ナンバープレート)
6.クラウドストリーミング静止画認識
クラウドでストリーミングで静止画を認識するパターンです。複数のデバイスを一つのインスタンスで認識する場合にはカメラごとに認識タイミングをずらすなどの工夫は必要ですが、動画に比べると負荷が低くランニングコストはかなり低くなります。クラウドで処理する場合1つのインスタンスで多数のカメラの静止画を分析するため、カメラごとにカスタムモデルを利用する場合には認識ごとにモデルの切り替えコストが大きくなることに注意が必要です。
・人検出
・河川氾濫判定
・マルチモーダルLLMによる認識
7.クラウドストリーミング外部トリガー認識
外部のセンサーなどをトリガーとして、動画もしくは静止画の認識を行うパターンです。例えば、車両を検出するセンサーが反応した際に、クラウド側で車両のナンバープレートを認識するなどのパターンがあります。
・ナンバープレート認識(外部センサーとの組み合わせ)
8.クラウドバッチ外部トリガー動画認識
クラウド上に撮りためた動画データをUI上で認識期間を指定して認識するパターンです。ある期間における人の動きや交通量を改正したい場合に利用するパターンです。クラウドストリーミング動画認識と比べるとある一定の期間の動画データに対してのみクラウドで認識を行うので比較的コストを低く抑えることができます。
・期間を限った人の流れ認識
・期間を限った交通量分析
9.エッジ(カメラ内)・クラウドハイブリッド認識
カメラ内でリアルタイム性が必要な画像認識を行い、更に詳細な認識をクラウド側で行うパターンです。リアルタイム処理はカメラ内で行い、クラウドでの詳細認識は低頻度であるためランニングコストを抑えることができます。一方で、システムが複雑なため開発難易度が上がるというデメリットもあります。
・顔認証
エッジ(カメラ内):人検出、顔切り出し
クラウド:顔特徴量マッチング
・車番認識
エッジ(カメラ内):車両検出、ナンバープレート切り出し
クラウド:ナンバープレート認識
まとめ
本記事では画像認識システムのサービングパターンにおける要素を示し、その組み合わせから実際に利用できる主なサービングパターンを挙げました。本記事で扱った要素の組み合わせは、主にSafieのシステムを想定しています。みなさんが扱うシステムによって事情は異なってくるとは思いますが、要素に分けて組み合わせで考えることで比較検討を行い適切なシステムを選択することができると思われます。
最後に
セーフィーではエンジニアを積極的に募集しています。どのような職種があるのか気になる方はこちらをご覧ください!
カジュアル面談から受け付けておりますので、気軽に応募いただければと思います! 皆様のご応募、心よりお待ちしております! 最後までお読みいただき、ありがとうございました。