Deep Sort(人物トラッキングモデル)を用いて歩行者数、人流方向を推定する
はじめに
交通量のチェック、特に街中で偶に見かけるカウンターを片手に座って歩行者を数えているのはシステムに置き換えたら良いのに、とずっと思っていました。
実際に札幌駅前通地下歩行空間(通称チ・カ・ホ)ではセンサーを用いて交通量を測っています。ここでは天井と地面に設置したセンサーを用いて歩行者数と人流方向を検出しています。他にも赤外線で歩行者検出しているものもありますが、センサーを遮ったかどうかで歩行者数をカウントするため、複数人が同時にセンサー前を通過しても複数カウントをするのは難しいです。
現在ではセンサーに代わり、深層学習(AI)が使われるようになりました。カメラから取得した映像から歩行者を検出します。カメラであれば後付けも用意であり、設置場所もかなり自由が効くため今後も増えていくと思っています。
手法
歩行者を検出、カウントするためにDeepSortを利用します。
DeepSortは動画内のオブジェクト(今回は人)をトラッキングするための手法です。
DeepSortは二つの要素から構成されており、一つ目がYoloなどの物体認識、二つ目が物体追跡です。まず、物体認識系のモデルを用いて人と位置座標(バウンディングボックス)を推定します。その時の座標の動き方から、動画内で同一の物体かどうかを識別していきます。
具体的な実装は以下が参考になります。
DeepSort系は多くの人が実装してくれているので、探せば他にも見つかると思います。
https://github.com/axinc-ai/ailia-models/tree/master/object_tracking/deepsort
https://github.com/LeonLok/Deep-SORT-YOLOv4
歩行者カウントの手順
歩行者のカウント方法はいくつかありますが、今回は線分交差検出を使用しました。これは任意の地点に境界線を引き、現在のフレームの人間と過去に検知された同一人物の人間を結ぶ線の二つが交わった時に歩行者としてカウントする手法です。
現在のフレームとn-1枚目以降に人が検出されたフレームの差分なので、検出不具合を補填できる構造です。不具合に強いだけでなく、人流方向も検出することが可能です。
結果
歩道に対して、垂直に境界線(赤線)を引きました。これを超えた際に歩行者を検出しています。
おわりに
今回は歩行者数カウントを実装してみました。やっぱり動くデモが作れるとテンション上がります。この記事では歩行者で紹介しましたが、車に置き換えることで交通量調査も同様に行うことが可能です。
また、エッジデバイスを使ってカメラとエッジだけで歩行者数の検出にも興味があるのでエッジ端末を買ったら挑戦してみようと思います。(もう少し安くなって欲しい。)