2023年9月26日

低コストFPGAデバイスを用いたリアルタイム物体追跡プログラムの実装:Implementing Real-Time Object Tracking on Cost-Effective FPGA Device

サマーインターン

はじめに

こんにちは!本記事を読んでいただきありがとうございます。2023/8 〜 2023/10の約3ヶ月間、LeapMindのObject Detection Product Teamにインターンとして参加した佐藤です。 学部4年の時に取り組んでいたVision Transformerの1bit化に関する研究(*1)がきっかけでLeapMindを知りました。幸運なことに、この度はサマーインターンに参加させていただくことができました。
夏休みの期間はほぼフルタイムで働くことができ、エンジニアとして将来働く姿を想像できました。ここではインターンで経験した内容をお伝えします。

取り組んだ内容

今回のインターンで私が取り組んだのは、LeapMindが開発しているEfficieraを用いた物体追跡プログラムのエッジデバイスへの実装です。EfficieraはAIの実行に特化したIPで、極小量子化技術を使って圧縮したモデルを、低電力で高速に動作させることができます。Efficieraを使うことで安価なエッジデバイスでも高速にAIモデルを実行することができます。Efficieraの詳細についてはLeapMindのホームページ(*2)を参考にしてください。今回のプロジェクトではAMD社製のKV260(*3)という比較的安価なFPGAボードを使いました。

Object Trackingの概要

動画内の複数の物体を同時に追跡するタスクをObject Tracking(物体追跡)と言います。物体追跡は1フレームの中の物体を検出するObject Detection(物体検出)という画像認識タスクが基盤となっています。物体検出モデルは物体の座標を出力するので、この情報を元に物体追跡を行うことができます。物体追跡アルゴリズムは動画の各フレームで物体検出モデルによって検出された前フレームと現フレームの物体の紐づけを行うことで、物体の連続的な追跡を実現します。そこで今回のプロジェクトでは、物体検出モデルを基盤にした物体追跡アルゴリズムのEfficieraへの実装を行いました。

ByteTrackアルゴリズム

ByteTrack(*4)は物体追跡アルゴリズムの中でも、特にOcclusionへの対応に力を入れているモデルです。Occlusionとは、ある物体が他の物体や障害物に遮蔽されて見えづらくなってしまう事象を指します。従来の物体追跡アルゴリズムでは物体検出モデルの出力結果のうち信頼度スコアの高いボックスのみを事前にフィルターした上で追跡を行っていました。しかし、この方法を採用すると、低い信頼度スコアを持つボックスが除外されます。その結果、追跡中の物体が他の物体に覆われると、追跡情報が直ちに失われてしまいます。

Occlusion
図1. Occlusionの例:赤いボックスの信頼度スコアがOcclusionによって低下している(*4より引用)

この問題を解決するためにByteTrackでは信頼度スコアの高いボックスの追跡の後に、信頼度が低いボックスに対しても追跡を行います。これによって追跡している物体が交差するような場面でも、高精度な追跡ができるようになりました。

ByteTrack
図2. ByteTrackの物体追跡アルゴリズム

物体追跡アルゴリズムではフレーム間の物体の紐づけを高精度に行うために、検出された各ボックスに対して計算される識別用の特徴量を用いる場合があります。しかし、この手法では計算量が大きくなってしまい、実行に時間がかかってしまいます。そこで、ByteTrackは追跡をリアルタイムで行うために、検出されたボックスのサイズと座標のみを使ったシンプルで高速なアルゴリズムを採用しています。
これらの特徴からByteTrackは優れた性能を発揮しており、物体追跡タスクのMOTデータセットで発表当時SOTAを達成しました。

デモプログラムの実装

FPGAデバイスへの物体追跡プログラムの実装の説明を行う前に、Efficieraを使ったAIモデルの実行について簡単に説明します。
本記事の冒頭で紹介したように、Efficieraは極小量子化の変換を行ったAIモデルの実行に特化したIPです。FPGAなどのエッジデバイスにEfficiera IPを組み込むことでAIモデルを高速に実行することができます。AIモデルの実行をプログラムとして実装する際には、C++で実装されたEfficieraRuntime APIを利用することができます。
以上のEfficieraの説明を踏まえて、図3に示す今回のプロジェクトで作成した物体追跡デモのフローチャートを見てみましょう。

Demo
図3. 物体追跡デモのフローチャート

デモのプログラムはFPGAデバイス上で実行する処理になりますが、このうち物体検出モデルはEfficiera IP上で実行され、それ以外はCPU上で実行されることになります。
デモに関しては、図3の通りカメラ画像の取得し、物体検出モデルの推論と物体検出の後処理、ByteTrackアルゴリズムの実行を行い、最後に実行結果の描画と配信を行う処理を実装しました。
プロジェクトの当初は実装予定ではありませんでしたが、以下の2つの機能を追加することでデモのクオリティーをあげることができました。

  1. 物体検出の後処理の並列化
  2. 追跡結果が描画された動画の配信

まず物体検出の後処理の並列化です。物体検出モデルの出力はスコアの閾値を使った後処理通して必要な検出ボックスが抽出され、次の処理に渡されるのが一般的です。物体検出のクラス数が多くなると、この後処理がボトルネックになることがあります。一方で、各フレームに対する物体検出は、他のフレームの結果に依存しない操作なので、後処理を並列に実行することが可能です。Efficiera IPの処理(物体検出モデルの推論)はシングルスレッドでしか実行できませんが、物体検出の後処理を並列化することで、物体検出の処理速度を向上させることができました。ただし、ByteTrackアルゴリズムは各フレームが順番通りに処理される必要があるので、並列化を行っていません。しかし、先に触れたようにByteTrackは軽量なアルゴリズムであるため、物体検出に比べ十分高速に実行できます。
次に、追跡結果が描画された動画の配信です。物体追跡アルゴリズムを実行しながら遅延なく結果を閲覧するために、追跡結果が描画された動画を配信する機能をOpenCVのGStreamerプラグインを使って実装しました。GStreamerの動画圧縮オプションなどを使うことで遅延が少なく軽量な配信が行えるようになりました。

実行結果

図4にデモの実行例を示します。緑色の長方形が物体検出の結果で、その左上にトラッキングIDが表示されています。動画の左上にある数字はフレームレートです。画像サイズは640x480で実行しています。

Realtime-demo
図4. KV260でのリアルタイムデモ

映像ではメンター(ボックスID=1)の前を、私(ボックスID=2)が通過しています。その際にOcclusionが発生し、メンターが完全に隠れてしまっています。しかし私が通過し終わると、メンターがボックスID=1として再び検出されています。動画の左上にあるようにこのデモはフレームレートが30弱で実行されているので、一般的なウェブカメラであれば遅延なく実行することができます。

学んだこと

今回のインターンでのプロジェクトを通して、その過程で非常の多くのことを学ぶことができました。

まずはドキュメントの重要性です。LeapMindでは開発物やツールに分かりやすいドキュメントがついているついているので、それを辿ることで開発に必要な知識をすぐに身に着けることができました。特にEfficieraのRuntime APIに関するドキュメントは非常に詳細で、実際にプログラムを書く前から完成系を意識することができました。また、様々な人が残した備忘録にも助けられて、スムーズに自分の開発に取り組むことができました。

次に感じたのはコミュニケーションを通した課題解決の大切さです。特にメンターさんが私の疑問を解決する手段を素早く提案してくれたので、大きな開発の助けになりました。他にも自分のチーム以外のプロフェッショナルの方にもプログラムのデザインについてレビューをしていただき、自身の能力を超えた開発を行うことができました。また、会社全体で他の人に質問しやすい雰囲気が、Slackのオープンチャンネルでの社員さんのやり取りから伝わってきました。

インターンでの経験

Object Detection Product TeamのDailyミーティングに参加させていただいたことで、自分が関わる開発以外についてもチームの現状について知ることができました。実際に高速なAIプロダクトがどのように社会で求められているのかという視点は、インターンに参加したからこそ学ぶことができたと感じています。 それ以外にも全社でのミーティングや他チームのミーティングに参加させていただき、多くの人が関わって会社全体として開発を行っていることを実感でき、とても貴重な体験をさせていただいたと思っています。

他にはオフィスで色々な方とお話させていただいたことが、とてもよい体験になりました。様々な会社でエンジニアとして業務を経験された方が多かったので、今後のキャリアを考えるためのヒントをたくさんいただきました。海外出身の方も何名か在籍されており、その方々とエンジニアリングに関して英語で話す機会もありとても楽しかったです。

Intern-ss

おわりに

LeapMindのインターンでは多くの人とと関わることができ、とても楽しい時間を過ごすことができました。Efficieraを用いた物体追跡プログラムの実装に関しては、最初は分からないことが多くて不安でしたが、メンターや整備された環境に助けられて目標を達成することができました。

私をインターンとして受け入れてくれたObject Detection Product Team及びLeapMindの皆様に心から感謝します。

参考

  1. 佐藤駿, 他. Vision Transformer の係数付き 1bit 化. 2023. In CVIM.
  2. Efficiera IP:https://leapmind.io/products/efficiera-ip/
  3. Kria KV260:https://japan.xilinx.com/products/som/kria/kv260-vision-starter-kit.html
  4. Zhan, Yifu et al. Bytetrack: Multi-object tracking by associating every detection box. 2022. In ECCV.

Written by Shun Sato LeapMind Summer 2023 Intern.