カメラ画像認識
畳み込みニューラルネットワーク
畳み込みニューラルネットワーク(Convolution Neural Network):CNNは一般的な順伝播型のニューラルネットワークとは違い、全結合層だけでなく畳み込み層(Convolution Layer)とプーリング層(Pooling Layer)から構成されるニューラルネットワークのことです。
畳み込みニューラルネットワークを利用した画像処理の流れを簡単に示します。
-
フィルタを使用し、入力画像の全体に対して畳み込み層でフィルタ処理を行う。
-
処理した画像をプーリング層に流し込む。
-
プーリング層で画像の解像度を下げる(集約する)処理を行う。
-
3の結果を用いて全結合層で結合することで、画像認識が可能という流れになります。
CNNは、AIが画像分析を行うための学習手法の1つで、一部が見えにくくなっているような画像でも解析することができます。またフィルタを使って、入力層データの中で位置を変えながらスキャンしていくので、解析対象が入力層の位置上ずれても解析に影響が出ないという特徴があります。
我々は今回の画像の中で、複数人の姿勢を認識する要求などからCNNの方式が最適と判断し、採用しました。
OpenPoseとTensorFlowの連携
OpenPoseは人の画像から骨格を測定し、骨格座標を作成します。TensorFlowで骨格座標から姿勢認識表示させる処理を連携させた図を以下に示します。
姿勢認識システム概要
以下に姿勢認識システムの概要図を示します。
動画ストリームの精度アップ
動画ストリーム対応について、我々は認識した結果と実際の画像タイミングのずれを極力少なくするため、フレームレイトと前後画像の調整を実施しました。
フレームレイトとは短時間あたりに処理させるフレーム(コマ)数のことで、密であればあるほど画面的にはスムーズな動きに見えますが、システムから見ると密であれば、その分の計算時間も大きくなり、影響を与えます。
我々は人の見た目には問題が無い範囲で極力フレームレイトを下げられないか、試行してバランスを取りました。
前後画像の調整とはある瞬間の画像の前後も判断し、人がどういった行動からどういった行動に移るかを予測した結果を出すことです。
例えば、人が立っているところから歩き出す動きに変わった時、または立っている姿勢から作業している姿勢になった場合、その前後を判断することでより正しい結果を出力することが出来ます。