以下に添付図面を参照して、情報処理装置、情報処理システムおよびプログラムの実施形態を詳細に説明する。
図1は、本実施形態にかかる情報処理システム1における複数のプラットフォームの接続構成を模式的に示す図である。
[システム構成]
図1に例示する情報処理システム1においては、PCIe(Peripheral Component Interconnect Express;登録商標)ブリッジコントローラ3および複数(図1に示す例では8つ)のプラットフォーム2−1〜2−8を備える。各プラットフォーム2−1〜2−8は、それぞれPCIeブリッジコントローラ3に接続されている。
なお、以下、プラットフォームを示す符号としては、複数のプラットフォームのうち1つを特定する必要があるときには符号2−1〜2−8を用いるが、任意のプラットフォームを指すときには符号2を用いる。プラットフォーム2は、PCプラットフォーム2といってもよい。
[プラットフォーム]
情報処理装置としてのプラットフォーム2−1は、プロセッサ21−1を備える。同様に、プラットフォーム2−2〜2−8は、プロセッサ21−2〜21−8をそれぞれ備える。PCIeにおいては、プロセッサ21−1〜21−8がホスト側として動作可能なRC(Root Complex)となり、PCIeブリッジコントローラ3に搭載されているデバイスがEP(End Point)となり、ホストとデバイスとの間でのデータ転送が行なわれる。
プロセッサ21−1〜21−8はそれぞれ違うメーカ(ベンダ)から提供されてもよい。例えば、プロセッサ21−1,21−2,21−3,21−4,21−5,21−6,21−7,21−8は、それぞれ、A社,B社,C社,D社,E社,F社,G社,H社が提供するものであるとする。
また、以下、プロセッサ21−1,21−2,21−3,21−4,21−5,21−6,21−7,21−8を、それぞれプロセッサA,B,C,D,E,F,G,Hという場合がある。また、PCIeブリッジコントローラ3に搭載されているEPに対して、それぞれ異なるプラットフォームを接続しても良い。さらに、2つ以上の複数のEPを1つのプラットフォームに接続し、プラットフォーム側が複数のRCを用いてPCIeブリッジコントローラ3と通信しても良い。
なお、以下、プロセッサを示す符号としては、複数のプロセッサのうち1つを特定する必要があるときには符号21−1〜21−8もしくは符号A〜H等を用いるが、任意のプロセッサを指すときには符号21を用いる。
プラットフォーム2−1〜2−8は、AI処理や画像処理等の演算処理を行なうコンピュータ環境である。ここで、図2は、情報処理システム1におけるプラットフォーム2のハードウェア構成を模式的に示す図である。
図2に示すように、プラットフォーム2は、各種情報を一時記憶するメモリ22と、ストレージ23とを有する。また、プラットフォーム2は、各種演算処理を実行するプロセッサ21と、データ入力を受け付ける入力装置24と、モニタ25とを有する。また、プラットフォーム2は、記憶媒体からプログラム等を読み取る媒体読取装置26と、各種装置と接続するためのインタフェース装置27と、他の情報処理装置等と有線または無線により接続するための通信装置28とを有する。また、各装置21〜28は、バス29に接続される。
入力装置24は、例えば、プラットフォーム2の管理者から操作情報等の各種情報の入力を受け付ける。モニタ25は、例えば、プラットフォーム2の管理者に対して表示画面等の各種画面を表示する。インタフェース装置27は、例えば複数の監視カメラ(撮像装置)50(図9参照)、印刷装置等が接続される。監視カメラ50は、画像データを生成するデータ生成装置である。なお、データ生成装置としては監視カメラ50に限るものではなく、AI処理の対象となるデータを生成する各種の装置を適用可能である。
メモリ22はROM(Read Only Memory)およびRAM(Random Access Memory)を含む記憶メモリである。メモリ22のROMには、各種ソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ22上のソフトウェアプログラムは、プロセッサ21に適宜読み込まれて実行される。また、メモリ22のRAMは、一次記憶メモリあるいはワーキングメモリとして利用される。
ストレージ23は、ハードディスクドライブ(Hard Disk Drive:HDD)、SSD(Solid State Drive)、ストレージクラスメモリ(Storage Class Memory:SCM)等の記憶装置であって、種々のデータを格納するものである。ストレージ23には各種ソフトウェアプログラムが記憶される。また、ストレージ23には、混雑度合いテーブルT(図12参照)などの各種データが記憶される。
プロセッサ21は、プラットフォーム2全体を制御する。プロセッサ21は、マルチプロセッサであってもよい。プロセッサ21は、例えばCPU(Central Processing Unit),MPU(Micro Processing Unit),GPU(Graphics Processing Unit),DSP(Digital Signal Processor),ASIC(Application Specific Integrated Circuit),PLD(Programmable Logic Device),FPGA(Field Programmable Gate Array)のいずれか一つであってもよい。また、プロセッサ21は、CPU,MPU,GPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
プラットフォーム2においては、プロセッサ21がメモリ22やストレージ23に格納されたソフトウェアプログラムを実行することで各種機能を実現する。
なお、上記の各種ソフトウェアプログラムは、必ずしもメモリ22やストレージ23に記憶されている必要はない。例えば、プラットフォーム2の媒体読取装置26が読み取り可能な記憶媒体に記憶されたプログラムを、プラットフォーム2が読み出して実行するようにしてもよい。プラットフォーム2が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN等に接続された装置にこの情報処理プログラムを記憶させておき、プラットフォーム2がこれらから情報処理プログラムを読み出して実行するようにしてもよい。
図3は、情報処理システム1におけるプラットフォーム2のソフトウェア構成を例示する図である。なお、図3中においては、便宜上、プラットフォーム2−1〜2−3のソフトウェア構成のみを図示する。
図3に例示する情報処理システム1において、プラットフォーム2−1は、一般的なPC(Personal Computer)システムであり、Windows(登録商標)をOS(Operating System)とする。プラットフォーム2−1は、このOS上において、アプリケーションである店舗管理プログラムを実行する。
プラットフォーム2−2,2−3は、組込みシステムであり、それぞれLinux(登録商標)をOSとする。プラットフォーム2−2,2−3は、このOS上において、AI処理にかかる分散処理プログラム(分散処理A,B)を実行する。
各プラットフォーム2には、ブリッジドライバ20が備えられている。プラットフォーム2は、このブリッジドライバ20を介してPCIeブリッジコントローラ3および他のプラットフォーム2との間で通信を行なう。なお、ブリッジドライバ20による通信方法については後述する。
各プラットフォーム2においては、プロセッサ21およびメモリ(物理メモリ)22を備え、プロセッサ21がメモリ22に格納されたOSや各種プログラム,ドライバ等を実行することでそれぞれの機能を実現する。
各プラットフォーム2に備えられるプロセッサ21は、互いに違うベンダによって提供されるものであってもよい。図1に示す例においては、少なくとも一部のプラットフォーム2(例えば、プラットフォーム2−7)に複数のRCを有するプラットフォーム(例えば、Intel社のx86プロセッサ)が用いられてもよい。
また、各プラットフォーム2は、それぞれ他のドライバ構成に影響を与えないように独立動作可能に構成されている。
プラットフォーム2において、メモリ22の記憶領域の一部は、図8を用いて後述する如く、プラットフォーム2間(プロセッサ21間)において転送されるデータが一時的に格納される通信バッファ221として用いられる。
[PCIeブリッジコントローラ]
PCIeブリッジコントローラ3は、複数のプラットフォーム2−1〜2−8間におけるデータ等の通信を実現する。
図4は、情報処理システム1におけるPCIeブリッジコントローラ3のハードウェア構成を模式的に示す図である。
PCIeブリッジコントローラ3は、例えば、8チャネルのEPを1チップ内に有する中継装置である。このPCIeブリッジコントローラ3は、図4に示すように、CPU31,メモリ32,インターコネクトバス33および複数(図4に示す例では8つ)のスロット34−1〜34−8を備える。
スロット34−1〜34−8にはそれぞれPCIeの規格を満たすよう構成されたデバイスが接続される。特に、情報処理システム1においては、スロット34−1〜34−8のそれぞれにプラットフォーム2が接続される。
なお、以下、スロットを示す符号としては、複数のスロットのうち1つを特定する必要があるときには符号34−1〜34−8を用いるが、任意のスロットを指すときには符号34を用いる。
なお、プラットフォーム2−1〜2−8のように、一つのスロット34に対して一つのプロセッサ2が接続されてもよいが、これに限るものではなく、複数(例えば、2つ)のスロット34に対して一つのプラットフォーム2が接続されてもよく、種々変形して実施することができる。
一つのプラットフォーム2に対して複数のスロット34をアサインすることで、このプラットフォーム2−7に広い通信帯域を用いた通信を行なわせることができる。
各スロット34は、内部バス(Internal Bus)を介してインターコネクトバス33にそれぞれ接続されている。また、インターコネクトバス33には、CPU31およびメモリ32が接続されている。これにより、各スロット34とCPU31およびメモリ32は、インターコネクトバス33を介して相互に通信可能に接続されている。
メモリ32は、例えば、ROMおよびRAMを含む記憶メモリ(物理メモリ)である。メモリ32のROMには、データ通信制御に係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ32上のソフトウェアプログラムは、CPU31に適宜読み込まれて実行される。また、メモリ32のRAMは、一次記憶メモリあるいはワーキングメモリとして利用される。
さらに、PCIeブリッジコントローラ3においては、各スロットに対応させてレジスタ35(図8参照)が備えられる。レジスタ35のBAR(Base Address Register)空間には、スロット毎に記憶領域が備えられる。すなわち、レジスタ35のBAR空間にはスロット#0〜#7のそれぞれに対応する記憶領域が設けられている。
PCIeブリッジコントローラ3においては、後述の如く、BAR空間のスロット毎の記憶領域を用いてプラットフォーム2間のデータ転送を行なう。
CPU31は、PCIeブリッジコントローラ3全体を制御する。CPU31は、マルチプロセッサであってもよい。なお、CPU31に代えてMPU,GPU,DSP,ASIC,PLD,FPGAのいずれか一つが用いられてもよい。また、CPU31は、CPU,MPU,GPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
そして、CPU31がメモリ32に格納されたソフトウェアプログラムを実行することで、PCIeブリッジコントローラ3におけるプラットフォーム2間(プロセッサ21間)のデータ転送を実現する。
PCIeブリッジコントローラ3は、プラットフォーム2間のデータ転送を高速化するためにPCIeを用い、図1に示すように、各プラットフォーム2に備えられるプロセッサをそれぞれRCとして動作させ、デバイスとして動作するEP間でデータ転送を実現する。
具体的には、情報処理システム1においては、各プラットフォーム2のプロセッサを、データ転送インタフェースとしてPCIeのRCとして動作させる。また、各プラットフォーム2(プロセッサ21)に対して、PCIeブリッジコントローラ3を、すなわち、各プラットフォーム2が接続されているスロット34をEPとして動作させる。
PCIeブリッジコントローラ3をプロセッサ21に対してEPとして接続する手法としては、既知の種々の手法を用いて実現することができる。
例えば、PCIeブリッジコントローラ3は、プラットフォーム2との接続時に、EPとして機能することを示す信号を当該プロセッサ21に通知することで、EPとしてプロセッサ21と接続する。
PCIeブリッジコントローラ3においては EPtoEP(End Point to End Point)でデータをトンネリングさせて、複数のRCにデータを転送する。プロセッサ21間の通信は、PCIeのトランザクションが発生したときに論理的に接続され、1つのプロセッサ21にデータ転送が集中しないときは、それぞれのプロセッサ21間で並行してデータ転送できる。
図5は、PCIeのレイヤ構成を示す図である。図5においては、プラットフォーム2−1のプロセッサAとプラットフォーム2−2のプロセッサBとの間で通信を行なう例を示す。
送信元のプラットフォーム2−1においては、RCであるプロセッサAにおいて生成されたデータが、ソフトウェア,トランザクション層,データリンク層および物理層(PHY)を、順次、転送され、物理層においてPCIeブリッジコントローラ3の物理層に転送される。
PCIeブリッジコントローラ3においては、物理層,データリンク層,トランザクション層およびソフトウェアを順次、転送され、送信先のプラットフォーム2のRCに対応するEPにトンネリングによりデータが転送される。
すなわち、PCIeブリッジコントローラ3においては、EP間でデータをトンネリングさせることで、一のRC(プロセッサ21)から他のRC(プロセッサ21)にデータが転送される。
送信先のプラットフォーム2−2においては、PCIeブリッジコントローラ3から転送されたデータが、物理層(PHY),データリンク層,トランザクション層およびソフトウェアを、順次、転送され、送信先のプラットフォーム2−2のプロセッサBに転送される。
情報処理システム1において、プロセッサ21間(プラットフォーム2間)の通信は、PCIeのトランザクションが発生したときに論理的に接続される。
PCIeブリッジコントローラ3が有する8スロットのうちの一つに接続された特定のプロセッサ21に対して複数の他のプロセッサ21からのデータ転送が集中しないときは、異なる任意の複数組のそれぞれのプロセッサ21間で並行してデータ転送してもよい。
例えば、プラットフォーム2−1のプロセッサAに対して、プラットフォーム2−2のプロセッサBおよびプラットフォーム2−3のプロセッサCのそれぞれが通信しようとする場合には、PCIeブリッジコントローラ3は、プロセッサB,Cの通信をシリアルに処理する。
ただし、プロセッサA−プロセッサB,プロセッサC−プロセッサD,プロセッサE−プロセッサFのように、それぞれが異なるプロセッサ同士で通信し、特定のプロセッサに通信が集中しない場合には、PCIeブリッジコントローラ3は、各プロセッサ21間通信を並行して処理する。
図6は、情報処理システム1におけるプロセッサ21−8(プロセッサH)からの他のプロセッサ21の見え方を例示する図であり、図7はプロセッサ21−5(プロセッサE)からの他のプロセッサ21の見え方を例示する図である。
各プロセッサ21間で通信が行なわれている状態においても、各プロセッサ21上のOS(例えばWindowsのデバイスマネージャ)からは、PCIeブリッジコントローラ3しか見えず、接続先の他のプロセッサ21を直接管理する必要がない。すなわち、PCIeブリッジコントローラ3のデバイスドライバでPCIeブリッジコントローラ3の先に接続されたプロセッサ21を管理すれば良い。
そのため、送信元、受信先それぞれのプロセッサ21を動作させるためのデバイスドライバを準備する必要がなく、PCIeブリッジコントローラ3のドライバでPCIeブリッジコントローラ3に対して通信処理を行なうだけでプロセッサ21間の通信を行なうことができる。
[プロセッサ間のデータ転送方法]
次に、上述の如く構成された情報処理システム1におけるPCIeブリッジコントローラ3を介したプロセッサ21間のデータ転送方法について説明する。
ここで、図8は情報処理システム1におけるPCIeブリッジコントローラ3を介したプロセッサ21間のデータ転送方法を説明するための図である。図8に示す例においては、スロット#0に接続されたプラットフォーム2−1からスロット#4に接続されたプラットフォーム2−5にデータを転送する場合について説明する。
データ送信元のプラットフォーム2−1は、ソフトウェアプログラム等によって送信されるデータ(以下、送信データという場合がある)を、プラットフォーム2−1に備えられるストレージ23等からプラットフォーム2−1のメモリ領域35に格納する(符号P1参照)。メモリ領域35は、通信バッファ221の一部であってもよい。メモリ領域35は、プロットフォーム2のそれぞれにメモリ22等に同じ大きさで設けられた領域である。メモリ領域35は、スロット数に応じて分割されている。メモリ領域35の分割された記憶領域は、いずれかのスロットに対応付けられている。例えば、メモリ領域35内にSlot#0で示す記憶領域は、Slot#0に接続されたプラットフォーム2−1に対応付けられ、メモリ領域35内にSlot#4で示す記憶領域は、Slot#0に接続されたプラットフォーム2−5に対応付けられている。プラットフォーム2−1は、メモリ領域35のうち、送信先のスロットに割り当てられた領域(ここでは、Slot#4)に送信データを格納する。
ブリッジドライバ20は、プラットフォーム2のメモリ領域35の記憶領域に基づいて、送信先のスロットを示すスロット情報と、送信先のメモリ領域35における分割領域内におけるアドレスを示すアドレス情報とを取得または生成する(符号P2参照)。
送信元EPにおいて、ブリッジドライバ20は、スロット情報と、アドレス情報と、送信データとを含む転送データを中継装置3に渡す(符号P3参照)。これにより、PCIeブリッジコントローラ3は、スロット情報に基づいてEPtoEPにより送信元のスロットと送信先のスロットとを接続することにより、転送データを送信先のプラットフォーム2−4へ転送する(符号P4参照)。
送信先のブリッジドライバ20は、スロット情報及びアドレス情報に基づいて、送信先のプラットフォーム2のメモリ領域35のスロット#4に対応する記憶領域内のアドレス情報が示すアドレスの領域に送信データ(または転送データ)を格納する(符号P5参照)。
送信先プラットフォーム2において、例えば、プログラムが、メモリ領域35に格納された送信データを読み出して、メモリ(ローカルメモリ)22やストレージ23に移動させる(符号P6,P7参照)。
以上のようにして、転送元のプラットフォーム2−1から転送先のプラットフォーム2−5にデータ(転送データ)が転送される。
このように、情報処理システム1においては、PCIeブリッジコントローラ3において、当該PCIeブリッジコントローラ3内のEP間でデータ転送を媒介する。これにより、PCIeブリッジコントローラ3に接続された複数のRC(プロセッサ21)間でのデータ転送を実現することができる。
すなわち、各プロセッサ21をPCIeのRCとして独立動作させ、PCIeブリッジコントローラ3において、それぞれのプロセッサ21に接続するデバイスをEPとして接続し、EP間でデータ転送を行なう。これにより、デバイスドライバに起因する問題を回避し、高速データ転送を1つのシステムとして動作させることができる。
また、PCIeの規格に適合したデータ通信機能を有してさえいれば異なるプロセッサ21間でのデータ転送が可能となるため、デバイスドライバの有無や、サポートOS等を気にすることなく使用するプロセッサ21の選択肢を広げることが可能となる。
各プロセッサ21はEPとなるPCIeブリッジコントローラ3を介して接続されるため、EPの先のRCのデバイスドライバを追加する必要がない。従って、デバイスドライバの開発が不要であるとともに、デバイスドライバを追加することに起因する不具合が発生することもない。
[情報処理システム1が有している特徴的な機能]
次いで、プラットフォーム2−1〜2−7のストレージ23にインストールされたOSおよびソフトウェアプログラムによりプロセッサ21が実現する機能の内、本実施形態の情報処理システム1が有している特徴的な機能について説明する。尚、以下の説明では、プラットフォーム2−8が、スロット34−8に接続されていないものとして説明する。
図9は、情報処理システム1における機能を示す機能ブロック図である。なお、図9においては、PCIeブリッジコントローラ3を省略している。
プラットフォーム2−2〜2−7は、機械学習、特にディープラーニング(Deep Learning)技術を用いて、店舗等における監視のためのAI処理にかかる分散処理プログラムを実行する。
図9に示すように、プラットフォーム2−2〜2−7は、AI処理部100を実現する。AI処理部100は、監視カメラ50から取得した画像データに対して、ディープラーニング(Deep Learning)技術を利用した人物の認識等のAI処理を実行する。より詳細には、AI処理部100は、店舗等における監視のために、人物特定処理、人物紐付け処理、人物分類処理などのAI処理を、分散して実行する。
人物特定処理は、複数の監視カメラ50で撮像された画像データから、人物そのものや人物を構成するパーツ、持ち物の種類とその検出座標を特定する。図9に示すように、プラットフォーム2−2〜2−4が担当する。すなわち、プラットフォーム2−2〜2−4は、人物特定処理を担当する第1のA1処理部101を構成する。
人物紐付け処理は、特定した人物を時系列で紐付けていく。図9に示すように、プラットフォーム2−5〜2−6が担当する。すなわち、プラットフォーム2−5〜2−6は、人物紐付け処理を担当する第2のA1処理部102を構成する。
人物分類処理は、時系列で紐付けた人物を分類する。図9に示すように、プラットフォーム2−7が担当する。すなわち、プラットフォーム2−7は、人物分類処理を担当する第3のA1処理部103を構成する。
一方、プラットフォーム2−1は、店舗管理プログラムを実行する。
プラットフォーム2−1は、複数の監視カメラ50で撮像された画像データを、プラットフォーム2−2〜2−7に出力する。また、プラットフォーム2−1は、複数の監視カメラ50で撮像された画像データを、同時にモニタ25に表示する。
図9に示すように、プラットフォーム2−1は、画像取得部201と、制御部202と、出力制御部203と、API(Application Programming Interface)部204と、表示制御部205と、判定部206と、動体検知部207と、不審者判定部208と、補助出力制御部209と、を備えている。
画像取得部201は、監視カメラ50から画像データを取得する。画像取得部201は、取得した画像データをキューQ1に順に蓄積する。
API(Application Programming Interface)部は、プラットフォーム2−1からプラットフォーム2−2〜2−7に対するデータ提供のためのインタフェースである。
制御部202は、AI処理部100におけるAI処理の進行具合を監視する。制御部202は、AI処理部100におけるAI処理の進行具合が混んでいない場合、画像データをAI処理部100へ渡すように出力制御部203を制御する。一方、制御部202は、AI処理部100におけるAI処理の進行具合が混んでいる場合、画像データをAI処理部100へ渡さないように出力制御部203を制御する。
例えば、制御部202は、AI処理部100で処理待ちになっている画像の枚数(キュー情報)を監視してAI処理の進行具合を判断する。具体的には、制御部202は、予め設定してある枚数のしきい値に対して、処理待ちになっている画像の枚数が多いか少ないかで、混み具合を判断する。
また、例えば、制御部202は、API部204からプラットフォーム2−2〜2−7までの処理時間を監視してAI処理の進行具合を判断するようにしてもよい。具体的には、制御部202は、予め設定してある時間のしきい値に対して、処理にかかっている時間が長いか短いかで、混み具合を判断する。
出力制御部203は、Gate1、Gate2、Gate4、Gate5のON/OFFを制御することで、制御部202によりAI処理部100が混んでいないと判断した場合、画像データをAI処理部100へ出力し、制御部202によりAI処理部100が混んでいると判断した場合、画像データのAI処理部100への出力をスキップする。
また、出力制御部203は、制御部202によりAI処理部100が混んでいないと判断した場合、スキップされた画像データを蓄積部であるキューQ2に振り分けて蓄積する。
補助出力制御部209は、キューQ2に振り分けられたスキップされた画像データをキューQ3に蓄積する。また、補助出力制御部209は、制御部202により判断されたAI処理部100の混雑具合が所定条件を満たした場合、Gate3のON/OFFを制御することで、キューQ3に蓄積された画像データをAI処理部100へ出力する。
表示制御部205は、キューQ2に蓄積された画像データを監視カメラ50毎に区別してモニタ25に同時に表示する。また、表示制御部205は、AI処理部100でのAI処理された画像データに時間を合わせて他の画像データをモニタ25に表示する。
判定部206は、AI処理部100でAI処理を行った結果を参照し、画像データについてn個のフレーム(nFrame)以上連続で人物が未検出かどうかを判定する。
出力制御部203は、判定部206によってn個のフレーム(nFrame)以上連続で人物が未検出であると判定した場合、AI処理部100への画像データの転送を中止する。また、出力制御部203は、AI処理部100への転送を中止した画像データは、キューQ2に振り分けて蓄積する。
動体検知部207は、画像データのフレーム間の動体物の検知を行う。出力制御部203は、Gate4およびGate5のON/OFFを制御することにより、動体検知部207により新しく動体物を検知するまで、AI処理部100への画像データの転送を中止する。例えば、動体検知部207が動体を検知すると、出力制御部203は、Gate4をONにするとともに、Gate5をOFFにして、AI処理部100への画像データの転送を中止する。一方、動体検知部207が動体を検知していない場合、出力制御部203は、Gate4をOFFにするとともに、Gate5をONにして、AI処理部100へ画像データを転送する。
動体検知部207は、例えば、監視カメラ50から新たに取得した画像データと当該画像データの1フレーム前の画像データとの差分をとって、動体物の検知を行う。また、動体検知部207は、例えば、処理中の画像データと当該画像データの数フレーム前の画像データとの差分をとって、動体物の検知を行う。
不審者判定部208は、AI処理部100でAI処理を行った結果に基づいて、不審者を判定する。
[処理についての説明]
ところで、複数の監視カメラ50で撮像した画像に写った人物の特徴の解析をリアルタイムでAI処理する場合、演算量が大きくなりすぎると遅延が発生してしまう、という課題がある。
そこで、本実施形態においては、プラットフォーム2−2〜2−7は、プラットフォーム2−2〜2−7におけるそれぞれのAI処理の混雑状況を、PCプラットフォーム2(プラットフォーム2−1)に対してフィードバックする。
ここで、図10は情報処理装置としてのプラットフォーム2−1における処理の流れを示すフローチャートである。図10に示すように、制御部202は、AI処理部100からAI処理結果を入手する(ステップS1)。例えば、制御部202は、AI処理部100からJSON(JavaScript(登録商標) Object Notation)形式でタイムスタンプが付されたAI処理結果を入手する。また、JSON形式のAI処理結果には、AI処理に要した時間またはAI処理部100(第1のA1処理部101、第2のA1処理部102、第3のA1処理部103)のキュー情報を混雑情報として含んでいる。
続いて、制御部202は、入手のAI処理結果が制御対象の監視カメラ50の画像のAI処理結果であるかを判断する(ステップS2)。
制御部202は、制御対象の監視カメラ50の画像のAI処理結果でないと判断した場合(ステップS2のNo)、ステップS1に戻る。
一方、制御部202は、制御対象の監視カメラ50の画像のAI処理結果であると判断した場合(ステップS2のYes)、AI処理結果から人物検出情報を抽出する(ステップS3)。
次いで、判定部206は、n個のフレーム(nFrame)以上連続で人物(検出対象物)が未検出であるかを判断する(ステップS4)。なお、n個のフレーム(nFrame)以上連続で人物が未検出かどうかは、AI処理部100側でAI処理を行ったAI処理結果を参照する。例えば、3フレーム連続で人物が検出されなければ、未検出フラグに1をセットする。AI処理部100側のAI処理においては、人物が静止していようが動いていようがどちらでも検出することができる。
判定部206は、n個のフレーム(nFrame)以上連続で人物が未検出であると判断した場合(ステップS4のYes)、フレーム間のピクセル差分の大きさを計算して動体検知を行い(ステップS5)、ステップS6に進む。
具体的には、判定部206は、監視カメラ50から新たに取得した画像データとその1フレーム前の画像データとの差分をとる。これにより、メモリを多く使わなくとも、動体物の検知を行うことができる。動体物があれば、動体物が発生した部分のピクセルの差が大きくなる。画像は行列で表すことができるので、行列の引き算を行うことで差を見ることができる。
なお、判定部206は、監視カメラ50から新たに取得した画像データとその数フレーム前の画像データとの差分をとるようにしてもよい。こうすることにより、動体物の検知精度を高めることができる。
一方、判定部206は、n個のフレーム(nFrame)以上連続で人物が未検出でないと判断した場合(ステップS4のNo)、ステップS8に進む。
動体検知部207は、ステップS5で検出したピクセル差分の大きさに基づき、動体があるかを判断する(ステップS6)。
動体検知部207において動体がないと判断した場合(ステップS6のNo)、出力制御部203は、Gate4をONにし、Gate5をOFFにして、画像データをキューQ2に振り分け(ステップS7)、ステップS1に戻る。すなわち、ステップS6のNoの場合、“人物が存在しない、かつ、動体物がない”ということになるので、新しく動体物が現れるまでは、AI処理部100への画像の転送を中止する。
このようにするのは、人物が全く映り込んでいなくても常に人物検出などのAI処理を行う場合、画像転送によるトラフィックの増加、AI処理部100のAI処理にかかる演算負荷の増加が問題になるからである。このような問題は、システム全体のスループットを悪化させてしまう。
また、複数の監視カメラ50が存在する場合、各監視カメラ50で撮像された画像はAI処理部100を共有する形で、システム全体として処理がなされる。そのため、リアルタイム性の維持を考えると、人物が存在する画像のみに対してAI処理できるのが望ましいためである。
一方、判定部206がn個のフレーム(nFrame)以上連続で人物が未検出でないと判断し(ステップS4のNo)、動体検知部207において動体があると判断した場合(ステップS6のYes)、出力制御部203は、Gate5をONにし、Gate4をOFFにして、画像データをGate1およびGate2へと振り分けて(ステップS8)、ステップS9に進む。
すなわち、n個のフレーム(nFrame)以上連続で人物が未検出でない場合、または、動体がある場合、人物が画像内に存在する可能性が高いので、AI処理部100側に画像が到達できるように制御する。
これにより、特定の監視カメラ50の画像のAI処理を取りやめることによって、トラフィックの軽減、AI処理部100の演算負荷の軽減を行うことができる。トラフィック軽減により、システム全体のスループットを向上させることができ、望まない後述するスキップ処理を減らすことができる。また、他の監視カメラ50で映り込む人物が多いなど負荷が高くなってしまう場合に、AI処理部100の演算負荷軽減により得られたコンピュータリソースを割り当てることができる。
続いて、制御部202は、AI処理に要した時間またはAI処理部100のキュー情報を混雑情報としてJSONより抽出する(ステップS9)。
続いて、制御部202は、AI処理部100の混み具合を判断する処理を行う(ステップS10)。
上述したように、制御部202は、AI処理部100で処理待ちになっている画像の枚数(キュー情報)を監視してAI処理の進行具合を判断する。具体的には、制御部202は、予め設定してある枚数のしきい値に対して、処理待ちになっている画像の枚数が多いか少ないかで、混み具合を判断する。
また、例えば、制御部202は、API部204からプラットフォーム2−2〜2−7までの処理時間を監視してAI処理の進行具合を判断するようにしてもよい。具体的には、制御部202は、予め設定してある時間のしきい値に対して、処理にかかっている時間が長いか短いかで、混み具合を判断する。
ここで、図11はAI処理部100の混み具合を判断する処理の流れを示すフローチャートである。
図11に示すように、制御部202は、混雑情報は第1のA1処理部101の情報であるかを判断する(ステップS101)。
制御部202は、混雑情報が第1のA1処理部101の情報である場合(ステップS101のYes)、混雑状況が第1のA1処理部101用のしきい値Thre1より大きいか(ステップS102)、混雑状況が第1のA1処理部101用のしきい値Thre2(Thre1>Thre2)より大きいか(ステップS103)、を判定する。
制御部202は、混雑状況が第1のA1処理部101用のしきい値Thre1より大きい場合(ステップS102のYes)、第1のA1処理部101の混雑度合:2(高)をセットし(ステップS104)、ステップS118に進む。
制御部202は、混雑状況が第1のA1処理部101用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きい場合(ステップS102のNo、ステップS103のYes)、第1のA1処理部101の混雑度合:1(中)をセットし(ステップS105)、ステップS118に進む。
制御部202は、混雑状況が第1のA1処理部101用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きくない場合(ステップS102のNo、ステップS103のNo)、第1のA1処理部101の混雑度合:0(小)をセットし(ステップS106)、ステップS118に進む。
また、制御部202は、混雑情報が第1のA1処理部101の情報でない場合(ステップS101のNo)、混雑情報は第2のA1処理部102の情報であるかを判定する(ステップS107)。
制御部202は、混雑情報が第2のA1処理部102の情報である場合(ステップS107のYes)、混雑状況が第2のA1処理部102用のしきい値Thre1より大きいか(ステップS108)、混雑状況が第2のA1処理部102用のしきい値Thre2(Thre1>Thre2)より大きいか(ステップS109)、を判定する。
制御部202は、混雑状況が第2のA1処理部102用のしきい値Thre1より大きい場合(ステップS108のYes)、第2のA1処理部102の混雑度合:2(高)をセットし(ステップS110)、ステップS118に進む。
制御部202は、混雑状況が第2のA1処理部102用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きい場合(ステップS108のNo、ステップS109のYes)、第2のA1処理部102の混雑度合:1(中)をセットし(ステップS111)、ステップS118に進む。
制御部202は、混雑状況が第2のA1処理部102用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きくない場合(ステップS108のNo、ステップS109のNo)、第2のA1処理部102の混雑度合:0(小)をセットし(ステップS112)、ステップS118に進む。
また、制御部202は、混雑情報が第1のA1処理部101の情報でなく、かつ、混雑情報が第2のA1処理部102の情報でない場合(ステップS101のNo、ステップS107のNo)、混雑状況が第3のA1処理部103用のしきい値Thre1より大きいか(ステップS113)、混雑状況が第3のA1処理部103用のしきい値Thre2(Thre1>Thre2)より大きいか(ステップS114)、を判定する。
制御部202は、混雑状況が第3のA1処理部103用のしきい値Thre1より大きい場合(ステップS113のYes)、第3のA1処理部103の混雑度合:2(高)をセットし(ステップS115)、ステップS118に進む。
制御部202は、混雑状況が第3のA1処理部103用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きい場合(ステップS113のNo、ステップS114のYes)、第3のA1処理部103の混雑度合:1(中)をセットし(ステップS116)、ステップS118に進む。
制御部202は、混雑状況が第3のA1処理部103用のしきい値Thre1より大きくなく、かつ、しきい値Thre2より大きくない場合(ステップS113のNo、ステップS114のNo)、第3のA1処理部103の混雑度合:0(小)をセットし(ステップS117)、ステップS118に進む。
そして、制御部202は、混雑度合いをテーブルTに上書きして更新する(ステップS118)。ここで、図12は混雑度合いテーブルTを例示的に示す図である。図12に示すように、混雑度合いテーブルTは、監視カメラ50毎に設けられている。図12に示す例によれば、第1のA1処理部101の混雑度合いは混雑度合:1(中)、第2のA1処理部102の混雑度合いは混雑度合:0(小)、第3のA1処理部103の混雑度合いは混雑度合:2(高)である。また、混雑度合いテーブルTにおけるWorstは、第1のA1処理部101〜第3のA1処理部103の最も大きい混雑度合いである。
制御部202は、第1のA1処理部101〜第3のA1処理部103の最も大きい混雑度合いが混雑度合いテーブルTのWorstと異なるかを判定する(ステップS119)。
制御部202は、第1のA1処理部101〜第3のA1処理部103の最も大きい混雑度合いが混雑度合いテーブルTのWorstと異なる場合(ステップS119のYes)、Worstを第1のA1処理部101〜第3のA1処理部103の最も大きい混雑度合いに上書きする(ステップS120)。
制御部202は、第1のA1処理部101〜第3のA1処理部103の最も大きい混雑度合いが混雑度合いテーブルTのWorstと同じ場合(ステップS119のNo)、上書きせずに、ステップS1に戻る。
以上により、AI処理部100の混み具合を判断する処理を終了する。
図10に戻り、出力制御部203および補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが2であるか否かを判定する(ステップS11)。
出力制御部203および補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが2である場合(ステップS11のYes)、Gate2をONし(ステップS12)、Gate3をOFFし(ステップS13)、Gate1をOFFし(ステップS14)、ステップS1に戻る。
出力制御部203および補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが2でない場合(ステップS11のNo)、ステップS34:Worstの混雑度合いが1であるか否かを判定する(ステップS15)。
出力制御部203および補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが1である場合(ステップS15のYes)、Gate1をONし(ステップS16)、Gate3をOFFし(ステップS17)、Gate2をOFFし(ステップS18)、ステップS1に戻る。
出力制御部203および補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが1でない場合(ステップS15のNo)、Gate1をONし(ステップS19)、Gate3をONし(ステップS20)、Gate2をOFFし(ステップS21)、ステップS1に戻る。
なお、ステップS12〜S14、ステップS16〜S18、ステップS19〜S21においては、Gateを同時にON/OFFできない場合に、全GateがOFFになることがないような制御順になっている。ただし、ある瞬間にGate1とGate2がONとなる場合は、Gate2が優先される。また、ある瞬間にGate4とGate5がONとなる場合は、Gate5が優先される。
ステップS20のように、補助出力制御部209は、混雑度合いテーブルTのWorstの混雑度合いが1でない場合にGate3をONすることにより、AI処理部100の混み具合が十分に少ない場合に、転送スキップされた画像をAI処理部100に転送し、遅れながらもAI処理部100におけるAI処理を実行させることができる。
なお、本実施形態においては、出力制御部203は、データ生成装置である監視カメラ50毎の画像データの出力を制御するようにしたが、これに限るものではなく、複数の監視カメラ50の全体の画像データの出力を制御するようにしてもよい。
加えて、表示制御部205は、キューQ2に蓄積された画像データを監視カメラ50毎に区別してモニタ25に同時に表示する。ここで、複数の監視カメラ50で撮像された画像データを同時にモニタ25に表示する場合、監視カメラ50間でのAI処理の遅延の大小がユーザに目に見える形で表れてしまう、という課題がある。
ここで、図13はモニタ25における表示例を示す図である。表示制御部205は、タイムスタンプが付されたJSON形式のAI処理結果および不審者判定部208での不審者判定結果を参照し、AI処理部100でAI処理された画像データに時間を合わせて他の画像データをモニタ25に表示することで、表示画像の時間軸のずれを抑制することができる。図13に示すように、モニタ25に表示されている各画像データの時間が同じになっている。
これにより、複数の監視カメラ50で撮像された画像データを、同時にモニタ25に表示する場合、監視カメラ50間でのAI処理の遅延の大小がユーザに目に見える形で表れてしまうことがなくなる。
このように本実施形態によれば、AIのリアルタイム処理を行う際に、演算量が大きくなってもシステム全体のリアルタイム動作を維持することができる。
また、本実施形態によれば、AI処理をリアルタイムに継続的に行いながらも、その維持のために犠牲となった(AI処理できなかった)画像/フレームについても、AI処理の結果を得ることができる。
さらに、本実施形態によれば、リアルタイムにAI処理できたかどうかも記録しておくことで、リアルタイム処理に向けたAI処理プロセッサの性能が十分であるかを測ることができる。
さらにまた、本実施形態によれば、特定の監視カメラの画像データに対するAI処理を取りやめることによって、トラフィックの軽減、AI処理部100の演算負荷の軽減を行うことができる。トラフィック軽減により、システム全体のスループットを向上させることができ、望まないスキップ処理を減らすことができる。また、他の監視カメラ50で映り込む人物が多いなど負荷が高くなってしまう場合に、AI処理部100の演算負荷軽減により得られたコンピュータリソースを割り当てることができる。
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
例えば、図4に示す構成においては、PCIeブリッジコントローラ3は8つのスロット34−1〜34−8を有しているが、これに限定されるものではなく種々変形して実施することができる。すなわち、PCIeブリッジコントローラ3は7つ以下もしくは9つ以上のスロット34を備えてもよい。
上述の実施形態では、各部のI/OインタフェースとしてPCIeを例に挙げて説明したが、I/OインタフェースはPCIeに限定されない。例えば、各部のI/Oインタフェースは、データ転送バスによって、デバイス(周辺制御コントローラ)とプロセッサとの間でデータ転送を行える技術であればよい。データ転送バスは、1個の筐体等に設けられたローカルな環境(例えば、1つのシステムまたは1つの装置)で高速にデータを転送できる汎用のバスであってよい。I/Oインタフェースは、パラレルインタフェース及びシリアルインタフェースのいずれであってもよい。
I/Oインタフェースは、ポイント・ツー・ポイント接続ができ、データをパケットベースでシリアル転送可能な構成でよい。尚、I/Oインタフェースは、シリアル転送の場合、複数のレーンを有してよい。I/Oインタフェースのレイヤ構造は、パケットの生成及び復号を行うトランザクション層と、エラー検出等を行うデータリンク層と、シリアルとパラレルとを変換する物理層とを有してよい。また、I/Oインタフェースは、階層の最上位であり1または複数のポートを有するルート・コンプレックス、I/Oデバイスであるエンド・ポイント、ポートを増やすためのスイッチ、及び、プロトコルを変換するブリッジ等を含んでよい。I/Oインタフェースは、送信するデータとクロック信号とをマルチプレクサによって多重化して送信してもよい。この場合、受信側は、デマルチプレクサでデータとクロック信号を分離してよい。