YOLOXとmotpyを使った人物検知と追跡
イントロダクション
本記事では、YOLOXで人物検出を行い、motpyで追跡を行いました。人物の検出・追跡により交通管理、スポーツとエンターテイメント、リアルタイム分析、自動運転とロボティクスなどさまざまな場面への利用が考えられます。
カメラモジュール(シキノハイテック社 KBCR-S03MU-JSD2625)とJetsonOrinNanoDeveloperKitを使用して、オープンソースソフトウェアYOLOXとmotpyを利用して人物の検出と追跡を行うプロセスを説明します。
YOLOX, およびmotpyの詳細技術につきましては、参考文献をご参照ください。
環境の構築
KBCR-S03MU-JSD2625をJetson Orin Nano Developer KitのUSBポートと接続をします。
Jetson Orin Nano Developer KitのOSはubuntu20.04で、V4L2Linuxドライバが搭載されています。 これにより、KBCR-S03MU-JSD2625はJetson Orin Nano Developer Kitが処理できる形式に変換した映像信号を出力することができます。
YOLOXのインストール方法、KBCR-S03MU-JSD2625、およびJetson Orin Nano Developer Kitにつきましては「参考」をご参照ください。
※ Jetson Orin Nano Developer KitにNVMe SSDを装着し、ubuntu20.04をインストールしております。本記事ではNVMe SSDの装着,ubuntu20.04のインストール方法は割愛します。
人物の検出と追跡
YOLOXを用いて人物の検出を行い、motpyで追跡を行います。 KBCR-S03MU-JSD2625の最大解像度(1280×960)で映像を取り込みます。
Jetson Orin Nano Developer KitのGPUは 1024 core Ampere architecture GPU で、CUDAを使ってGPUを動作させます。CUDAを使用しないと、Jetson Orin Nano Developer KitのGPUを活用できず、CPUだけで動作するため処理時間が遅くなり、動作が「カクカク」します。
YOLOXはCUDAを使って処理をすることができますが、motpyはGPUを使って処理をすることができません。
人物の検出にはGPUを使い、追跡はCPUで動作させることになります。
そのため、YOLOXで利用する学習済みモデルは軽量のものを利用しました。
YOLOXには6種類の学習済みモデルがあります。
・YOLOX-s
・YOLOX-m
・YOLOX-l
・YOLOX-x
・YOLOX-tiny
・YOLOX-nano
YOLOX-s,YOLOX-m,YOLOX-l,YOLOX-xはStandard Modelsで、YOLOX-tiny, YOLOX-nanoはLight Modelsです。
検出,追跡共CPUだけで処理をするよりも処理速度は速くなり、YOLOXの学習済みモデルもLight Modelsを利用したので、動作も「カクカク」はしませんでした。
フローに沿って人物の検出、追跡について説明します。
① GPUへのデータ転送
取り込んだ映像の画像データをPytorchテンソル型に変換し、GPU上へのメモリに転送します。
② モデルの推論
YOLOXモデルに①で作成したテンソル型画像データを渡します。推論結果はtorch.Tensor型です。
③ 物体検出の後処理
推論結果をpostprocessを利用して後処理を行います。クラスフィルタリング,信頼度のフィルタリング,非最大抑制(NMS),バウンディングボックスの座標変換を行います。
④ 人物の検出
得られた推定結果をnumpy配列に変換し、CPU上に転送します。
YOLOXで検出した結果をmotpyデータ型に変換します。
検出した物体のラベル、信頼度を取得します。
設定した閾値以上の信頼度の場合、追跡対象とします。
YOLOXのラベルには下記があります。
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light",
"fire hydrant",
"stop sign",
"parking meter",
"bench",
"bird",
"cat",
"dog",
"horse",
"sheep",
"cow",
"elephant",
"bear",
"zebra",
"giraffe",
"backpack",
"umbrella",
"handbag",
"tie",
"suitcase",
"frisbee",
"skis",
"snowboard",
"sports ball",
"kite",
"baseball bat",
"baseball glove",
"skateboard",
"surfboard",
"tennis racket",
"bottle",
"wine glass",
"cup",
"fork",
"knife",
"spoon",
"bowl",
"banana",
"apple",
"sandwich",
"orange",
"broccoli",
"carrot",
"hot dog",
"pizza",
"donut",
"cake",
"chair",
"couch",
"potted plant",
"bed",
"dining table",
"toilet",
"tv",
"laptop",
"mouse",
"remote",
"keyboard",
"cell phone",
"microwave",
"oven",
"toaster",
"sink",
"refrigerator",
"book",
"clock",
"vase",
"scissors",
"teddy bear",
"hair drier",
"toothbrush",
GitHubからダウンロードしたYOLOXのソースコードの
yolox\data\datasets\coco_classes.py
にYOLOXのラベルが定義されています。
人物の検出,追跡結果
KBCR-S03MU-JSD2625で映像を取得し、Jetson Orin Nano Developer KitでYOLOX, motpyを動作させた結果画像です。
(動画の1フレームを切り出しました)
検出した人物のバウンディングボックスを四角で囲み、上部にIDを表示させます。 IDはmotpyの追跡結果になります。
顔部にはモザイクをかけています。。。
下記画像のように、椅子に掛けられたコートを人と間違えることもありました。
他にも、
・一部分しか映っていない状態で「人」と検出されたが、全体が映ったことにより同一人物でも異なるIDとなる
・途中で一部隠れてしまったため、同一人物でも異なるIDとなる
・10km/h以上のスピードで移動していると検出が難しい
などがありました。
まとめ
今回はYOLOXを利用して人物の検出を行い、motpyで検出した人物の追跡を行いましたが、簡易的な検証で何点か問題がありました。
人物の検出,追跡を行うOSSにはYOLOX,motpy以外にもいくつかあります。これらを活用してサービスとして展開するための検証結果を改めてご紹介できればと考えています。
また、今回カメラモジュールはKBCR-S03MU-JSD2625を利用しましたが、他のカメラモジュールを使った検証も紹介できればと考えています。
参考
No. | 内容 | URL |
---|---|---|
1 | KBCR-S03MU-JSD2625 | https://www.shikino.co.jp/products/product-kbcr-s03mu.php |
2 | Jetson Orin Nano Developer Kit | https://developer.nvidia.com/embedded/learn/get-started-jetson-orin-nano-devkit |
3 | motpy GitHub | https://github.com/wmuron/motpy |
4 | YOLOv8 GitHun | https://github.com/ultralytics/ultralytics |
5 | YOLOXインストール | https://chantastu.hatenablog.com/entry/2022/09/23/043212#22-YOLOX%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8pip%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB |
6 | YOLOXまとめ|第1回:導入からチュートリアルまで | https://tt-tsukumochi.com/archives/287 |
7 | 【物体検出】YOLOシリーズ最新版のYOLOXを試してみる 〜デモから学習まで〜 | https://qiita.com/hkwsdgea_ttt2/items/970f34e1aa59059f7c69 |
8 | YOLOX+motpyで始めるMultiple Object Tracking(MOT) | https://qiita.com/GYO31/items/1116b87a1bb202d1d680 |
9 | 物体検出まとめ | https://tt-tsukumochi.com/object_detection |