ailia SDKで使用できる機械学習モデルである「ByteTrack」のご紹介です。エッジ向け推論フレームワークであるailia SDKとailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。
ByteTrackについて
ByteTrackは2021年10月に公開されたオブジェクトトラッキングのモデルです。YOLOXで検出した人のBoundingBoxにByteTrackを適用することで、人にIDを付与することができます。SiamMOTやTransformerベースのトラッキングモデルを超えて、SoTAを達成しています。

ByteTrack: Multi-Object Tracking by Associating Every Detection Box
ByteTrackのアーキテクチャ
Multi-object tracking (MOT)においては、YOLOXなどでObject Detectionを行った後、トラッキングアルゴリズムでフレーム間の追跡を行います。しかし、現実のアプリケーションでは、Detectionの結果が不完全であり、物体の不検知が発生するという問題があります。
具体的に、従来の方法では、Object Detectionの段階で、低いConfidence値のBounding Boxを削除します。低いConfidence値のBounding Boxを採用するとTrue Positive(検知率)は改善するものの、False Positive(誤検知)が発生するという、トレードオフが存在するためです。
しかし、低いConfidence値のBounding Boxを全て削除すべきかという疑問があります。低いConfidence値であっても、場合によってはそこにオブジェクトが実在している場合があります。このオブジェクトを削除してしまうために、トラッキングの性能が低下しています。
下記の図で、この問題を説明しています。t1フレームでは、0.5以上のConfidence値を持つ4つの物体を追跡します。しかし、t2とt3では、遮蔽が発生した結果、赤いオブジェクトのスコアが0.8から0.4、0.4から0.1に低下します。その結果、このオブジェクトが無視され、不検知が発生します。

ByteTrackでは、この問題を解決するため、トラッキング中の物体を示すtrackletsというqueueを使用したMotion Modelによって、低いConfidence値のBounding Boxも考慮することで、低いConfidence値のBounding Boxとマッチングし、不検知の問題を解消します。
マッチングプロセスにおいては、BYTEというアルゴリズムを使用します。最初に、trackletsに含まれる物体の次のフレームの位置を、Kalman Filterを使用して予測し、Motion Similalityにより、高いスコアのDetection Boxesとマッチングします。Motion Similalityでは、物体の重なりを示すIoUでスコアを計算します。上記の図では(2)が相当します。
次に、2段階目のマッチングを行います。マッチングできなかったtracklets中のオブジェクト(上記の図では赤いボックス)に対して、低いConfidence値のDetection Boxesとマッチングします。上記の図では(3)が相当します。
アルゴリズムの詳細は下記となります。カルマンフィルタによるシンプルなトラッキングアルゴリズムであるため、高速に動作します。

このようなシンプルな方法でありながら、ByteTrackはSoTAを達成しています。

各ベンチマークでの検出例です。

従来手法との性能比較です。

物体検出モデルは、YOLOXをMOT17とMOT20のデータセットで学習したものを使用しています。YOLOXの認識解像度はMOT17で1440×800、MOT20で1600×896です。そのため、ByteTrack自体は高速に動作しますが、物体検出の負荷は高くなっています。
DeepSortとの比較
DeepSortでは、ReIDモデルを使用して、フレーム間の人の紐付けを行い、紐付けできなかった人に対してSortでカルマンフィルタで計算したBoundingBoxの移動予測でフレーム間の紐付けを行います。しかし、紐付けはConfidence値が大きなBoundingBoxに対してのみ行われます。
ByteTrackでは、ReIDは使用せず、カルマンフィルタで計算したBoundingBoxの移動予測のみでフレーム間の人の紐付けを行います。そのため、技術的にはDeepSortの前のSortに近いです。しかし、紐付けを2段階で行い、最初に高いConfidence値のBoundingBoxに対して、次に低いConfidence値のBoundingBoxに対して紐付けを行うことで、性能を改善しています。
ByteTrackの使用方法
ailia SDKでByteTrackを使用するには下記のコマンドを使用します。
$ python3 bytetrack.py -v 0
依存ライブラリとしてlapが必要ですので、インストールしてください。
pip3 install lap
より高速に動作させるため、物体検出モデルを変更するには-mオプションを使用します。
$ python3 bytetrack.py -v 0 -m yolox_s
ailia-models/object_tracking/bytetrack
ax株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。ax株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。