🚶

GENDA インターン体験記(和久田):監視カメラ映像の人物検出からフロア投影・人数推定、人流データ解析まで

に公開

はじめに

はじめまして! 株式会社GENDA IT戦略部インターン生の和久田です。
現在は大学3年生です。

昨年の8月から約1年間、長期インターン生としてデータサイエンス業務に携わらせていただきました。本記事ではインターン体験記という形でインターンでの取り組みと学びを振り返りたいと思います!

インターン参加のきっかけ

去年の3月から東京大学発のエンジニアサークルUTokyo Tech Clubに5期生として加わり、ゼロからWeb開発の知識を身につけ、実際にアプリ開発を行いハッカソンを修了しました。その後、同サークルのインターン紹介を通じてGENDAに出会いました。

https://www.uttc.dev/

サークルではWeb開発を学びましたが、以前から機械学習にも興味があったため、データサイエンティストとしてインターンに参加することを決めました。GENDAを選んだ主な理由は、以下の3点です。

  • エンタメ企業なので、楽しく働けそうだと感じたこと
  • 個人では扱えない大規模な実データに触れられること
  • 先輩インターン生の方々が非常に生き生きと活躍していたこと

https://zenn.dev/genda_jp/articles/9e99de3181d93c

特にゲームセンターという身近なデータを扱えることに強く惹かれました。

取り組んだこと

インターンでは主に、業務効率化のための社内アプリ開発と、監視カメラを用いた人流データ解析プロジェクトの2つに取り組みました。本記事では特に直近の6ヶ月間で注力した、監視カメラを用いた人流データ解析プロジェクトについてご紹介します。

背景

このプロジェクトは、グループ会社であるGENDA GiGO Entertainmentが運営するアミューズメント施設「GiGO」の店舗に複数の監視カメラが設置されたことから始まりました。

目的は「これまで現場の暗黙知であったお客様の動きのデータ獲得と解析」です。具体的な方針の定まっていないゼロの状態からプロジェクトを一任していただき、非常に高い自由度の中で開発を進めることができました。

プロジェクトの全体像

以下のステップでプロジェクトを進行しました。

  1. 物体検出モデルを用いた人流データ獲得
  2. 店舗フロア上の人流データへの変換
  3. 異なる監視カメラ間の人流データの合成
  4. その他データ処理
  5. 解析

1. 物体検出モデルを用いた人流データ獲得

まず、監視カメラの動画データを物体検出モデルYOLO(You Only Look Once)に入力して獲得したバウンディングボックス(以下、bbox)の下辺の中点を代表点とすることで、カメラ画像上での人流データを獲得しました。YOLOは処理速度が速いことが特徴の代表的な物体検出モデルの一つです。

2. 店舗フロア上の人流データへの変換

次に「カメラ画像上でのピクセル位置データ 」を「現実世界の店舗フロア上の位置データ」に変換しました。

店舗フロア上、カメラ画像上での位置ベクトルをそれぞれ、\boldsymbol{p}^w, \boldsymbol{p}^I とします。

そして、カメラの焦点距離や光学中心を表す、内部パラメータと呼ばれる3×3行列を \boldsymbol{K} とし、店舗フロア上でのカメラの位置を表す位置ベクトルと、カメラの角度を表す回転行列と呼ばれる3×3行列をそれぞれ、\boldsymbol{t}, \boldsymbol{R} と表します。これら二つのパラメータをまとめて外部パラメータとも言います。

最後に、カメラ画像上の2次元データを店舗フロア上の3次元データに変換するときに必要な情報である奥行きを表現するための変数として、スケール変数 s を導入します。

以上の定義のもとで、コンピュータビジョンの分野で広く知られている次式が成り立ちます[1]

\boldsymbol{p}^w = s\ \boldsymbol{R}^{-1} \boldsymbol{K}^{-1} \boldsymbol{p}^I + \boldsymbol{t}

ここで、bboxの下辺の中点を代表点としていること、今回の店舗は床の高さが等しいことから、代表点は床と同じ平面上(平面 z=0 上)にあると考えることができ、 \boldsymbol{p}^wz 成分に注目して得られる制約条件として、

0 = \boldsymbol{p}^w_z = s \ (\boldsymbol{R}^{-1} \boldsymbol{K}^{-1})_z \ \boldsymbol{p}^I + \boldsymbol{t}_z

が得られます。

この制約条件からスケール変数 s を求めると、

s = \frac{-\boldsymbol{t}_z}{(\boldsymbol{R}^{-1} \boldsymbol{K}^{-1})_z \ \boldsymbol{p}^I}

となり、

\boldsymbol{p}^w = \frac{-\boldsymbol{t}_z}{(\boldsymbol{R}^{-1} \boldsymbol{K}^{-1})_z \ \boldsymbol{p}^I} \ \boldsymbol{R}^{-1} \boldsymbol{K}^{-1} \boldsymbol{p}^I + \boldsymbol{t}

が最終的に式として得られます。

この変換式をカメラ画像上での各位置データに適用し、獲得した店舗フロア上での位置データを人物IDに基づいて結合することで、店舗フロア上での人流データを獲得することができます。

3. 異なる監視カメラ間の人流データの合成

取得した人流データには、同一人物であっても複数カメラ間で人物IDが連携されず、別人として扱われる問題があります。そのため、同一人物の移動が監視カメラの画角によって分割され、複数の人流データとして処理されています。

そこで、以下のアルゴリズムに基づき、複数カメラ間の人流データを合成しました。

2台のカメラ c \in \{1,2\} における検出人数を n_c とし、人物インデックス集合を \mathcal{I}_c = \{1,2,\dots,n_c\} とします。

人物 i がカメラ c によって観測された時刻の集合を T_{c,i} として、時刻 tでカメラcによって観測された人物iの位置ベクトルを \boldsymbol{x}_{c,i}(t) と表します。

カメラ1の人物 i \in \mathcal{I}_1 とカメラ2の人物 j \in \mathcal{I}_2 の類似度 \sigma を、

\sigma(i,j) = \sum_{t \in T_{1,i} \cap T_{2,j}} \left\| \boldsymbol{x}_{1,i}(t) - \boldsymbol{x}_{2,j}(t) \right\|

と定義します。

類似度が最小となり、かつ閾値 \tau 以下である組を同一人物とみなします。

すなわち、

(i^\ast, j^\ast) = \arg\min_{\substack{i \in \mathcal{I}_1,\, j \in \mathcal{I}_2 \\ \sigma(i,j) \leq \tau}} \sigma(i,j)

とします。選ばれたペアは順次対応付けられ、以後の探索から除外します。

4. その他データ処理

他にも、魚眼レンズの歪みの補正や座標データのメッシュ化、ルールベースでの補正などの中間処理を行いました。

連続的な座標データに対して区画に分割するメッシュ化処理を行うことで、データ量の圧縮と測定誤差と検出誤差の吸収ができます。
ルールベースの補正は、データ処理の過程であり得ない位置データが生成されてしまうため、そのようなデータを処理する工程です。具体的には、あり得ない位置データの生じる原因に応じて正しい位置データへと変換しました。

最終的に得られた結果が以下のものです。

5. 解析

こうして得られた人流データを用いて、大きく分けて二つの方法で解析を行いました。

1つ目は、確率遷移図です。
店舗をいくつかの領域に分割し、先ほど言及した離散化のロジックをもう一度適用して、ある領域から別の領域への移動割合を可視化するデータを獲得しました。領域分割は先述の離散化と同様のロジックを用いて行いました。

2つ目は、ヒートマップです。
人流の多さを色の濃さで表したヒートマップを用いて解析を行いました。

現場の方に上記2つの解析結果を見ていただいたところ、経験として得ていた感覚と今回の解析結果は一致しているという評価をいただくことができ、当初の目的であった現場の勘でしか知り得なかった顧客の人流データの定量化・可視化を達成することができました!

現在進行中の店舗レイアウト改善においてこの可視化・定量化されたデータを活用する予定です。

成果発表

GENDAでは、長期インターン生は半年に1回の頻度で業務内容の発表会があり、6ヶ月間の成果をCTOの梶原さんやVPoEの荒井さんを始めとする多くの社員の方々の前で発表することができます!

自らの取り組みを正しくかつ、わかりやすく伝えることの難しさと大切さを改めて実感しました。

終わりに

今回はインターン体験記という形で、自身が直近6ヶ月間に取り組んだ内容をお伝えしました!

非常に大きな裁量を与えていただいたおかげで、データの獲得から解析まで一気通貫で担当してアウトプットを出すという貴重な経験ができました。
また、本プロジェクトへの取り組みを通じ、GENDAの柔軟性・スピードの速さ・連携のしやすさに何度も驚かされました。事業会社において内製でプロジェクトを進めることの意義を考えさせられる良い機会にもなりました。

まだまだやりたいことはたくさんあるので、今回の経験を糧にさらに成長できるように引き続き努力していきます!


脚注
  1. 米谷竜, 斎藤英雄 編著『コンピュータビジョン : 広がる要素技術と応用』森北出版, 2022. ↩︎

GENDA

Discussion