RunSight
JA

テクノロジー

1台のカメラと、話せるようになるまでに必要なすべて。

フレームが幾何情報になり、幾何情報が判断になり、判断がひとつの短い文になるまで。背中の端末の上で、インターネットなしに。

カメラ、3つのモデル、形状処理、キュー選択はすべてデバイス上で動作します。インターネット接続は不要です。

カメラ1台。端末上のモデル3つ。

目の高さの USB カメラが Hailo-8 アクセラレータへフレームを送ります。採用された各フレームで、コンパイル済みの3モデルが動作。1つは白線をセグメンテーションし、1つは前方の人物を検出し、1つは同じフレームから深度を推定します。深度センサーも LiDAR も2台目のカメラもありません。深度は1台の RGB カメラから得るため、端末を安価に保てます。

フレームは「最新優先」で処理します。推論が遅れた場合、古いフレームはキューに積まず破棄します。過去の映像で導くくらいなら黙るほうがましだからです。

レーンセグメンテーションの出力。検出されたレーンが青で描かれている

U-Net

プロトタイプで稼働

ResNet-18 backbone

塗られたレーン線をセグメンテーションし、レーンの向きと、その中でのあなたの位置を端末に伝えます。

84.23% IoUIoU(検証セット)

人物検出の出力。前方のランナーを囲む枠が表示されている

YOLOv8n

プロトタイプで稼働

Nano detector

前方の走路にいる人を検出します。共有レーンで本当に重要な障害物です。

88.24% IoUIoU(検証セット)

走路の深度マップ。近い物体が暖色で表現されている

Sc-Depth V3

プロトタイプで稼働

Monocular RGB

1枚の RGB フレームから、検出した人物までの距離を推定します。これにより誘導エンジンは、障害物が反応すべきほど近いかどうかを判断します。

Self-supervised単眼深度・端末上

レーンセグメンテーションの結果:入力画像、モデル予測、正解データ
レーンセグメンテーション:入力、予測、手作業で注釈した正解データ。
人物検出の結果:予測ボックスと正解ボックスの比較
人物検出:予測(赤)と正解(緑)の比較。

ピクセルから判断へ。

マスクと矩形はまだ案内ではありません。幾何情報に変える必要があります。レーンの向き、その中の自分の位置、曲がり具合、そして前方の人物が十分に近いかどうか。

セグメンテーションモデルが検出したレーン線が、走路上に黄色で描かれている

01

レーン線をフィッティングする

マスクから輪郭を抽出し、各レーン線を二次曲線で近似します。人や影で途切れた線も補間され、連続した一本のエッジに戻ります。

近似したレーン線の間で、ランナーの現在の区画が緑で示されている

02

走路を5区画に分ける

近似した線が走路を5つの区画(最左・左・中央・右・最右)に分け、ランナーをそのいずれかに位置づけます。誘導指示はここから計算されます。

レーン線に当てはめられた曲率円

03

曲がりを測る

近似した線の中心点から曲率半径を計算します。半径が大きければ直線、小さければカーブです。また、曲がる向きも分かります。

推定深度値とともに前方に検出された人物

04

前方の人物を評価する

検出された人物は、近い場合にのみ障害物になります。深度モデルが同じ RGB フレームからその距離を推定するため、エンジンは視界内のすべての人ではなく、近い人に反応します。

前方の状況から一つの音声指示へ。

走路からは、走りながら人が処理できる量をはるかに超える情報が生まれます。エンジンは最大でも1つの指示だけを出し、残りを抑制します。待機時間は優先度ごとに独立しています。

フレーズ条件優先度待機
Move leftレーンの右側にずれています。中央へ戻すための指示です。誘導1.5s
Move rightレーンの左側にずれています。中央へ戻すための指示です。誘導1.5s
Caution, person ahead前方に人がいます。無視できない距離ですが、まだ危険ではありません。警告0.8s
Stop, person ahead前方に人がいて、近い。この指示は他のすべてを中断します。重大なし
  • 優先度は優先度に勝つ

    各レベルが独自の待機時間を持つため、直前の誘導指示によって警告が塞がれることはありません。

  • うるさくしない

    同じフレーズは3秒間抑制されます。たとえそれがまだ正しくても。

  • 重大な指示は必ず話す

    重大な指示はすべての待機時間を飛び越え、再生中の音声を中断します。

1フレームの時間予算にモデルを収める。

float32 のままでは Raspberry Pi でリアルタイムのフレームレートを保てませんでした。そこでモデルを Hailo アクセラレータ向けにコンパイルします。内部表現へ変換し、プロファイルを取り、実際の走路画像のキャリブレーションセットで量子化し、起動時に読み込む実行ファイルへ落とします。

アクセラレータ向けにコンパイルした結果、プロトタイプは6倍高速化し、毎秒10フレームを超えて動作します。

データはインドネシアの走路から。

ランナーの目線から見たインドネシアの走路を写した公開データセットは存在しません。だから自分たちで作りました。パトリオット・チャンドラバガ競技場をはじめとする公共の走路で、目の高さから、前方に人がいる場合といない場合の両方を撮影しています。

各画像には2種類の注釈を付けます。人物にはバウンディングボックス、白線にはポリライン。さらに、頭の傾きやカメラの揺れ、まぶしい日差しや曇り空にも耐えられるよう、データを拡張します。

Label Studio でのレーン線セグメンテーション注釈
レーン注釈:塗られたエッジを手作業でなぞる。
Label Studio での走路上の人物へのバウンディングボックス注釈
人物注釈:前方のランナー1人につき1つのボックス。
1枚の元画像に個別に適用した5種類の拡張手法
各拡張手法を、同じ1枚の元フレームに個別に適用した例。

プロトタイプの現状と次のテスト。

統合プロトタイプは動作していますが、以下の項目には開発または検証が必要です。

  • 単一のマルチタスクモデル

    このアクセラレータには DRAM がなく、フレームごとのモデル切り替えは高くつきます。3つを複数ヘッドの1つのモデルにまとめるのが解決策です。

  • ワイヤレス音声

    現在は有線イヤホンで話します。Bluetooth 音声にはスマホ用とは別の無線が必要です。

  • モデルの遠隔更新

    今のところ、新しいモデルを入れるには端末に物理的に触れる必要があります。

  • フィールド検証

    ここまではすべて机上と、晴眼のテスターによる走路上での測定です。視覚障害のあるランナーと行う指導付き試験こそが本当の関門で、それはまだ実施していません。