路面レベルカメラで精度25%→113%に改善:フレームレートがByteTrackを壊す仕組み
2026-04-23
検証条件
検証結果
| 項目 | AI計測 | 手動計測 | 精度 |
|---|---|---|---|
| 5fps処理 ラインなし(旧設定) | 14 | 55 | 25.5% |
| 15fps処理 ラインなし | 164 | 55 | 過剰検出 |
| 15fps処理 縦ライン x=0.5(最良) | 65+59 | 55 | — |
| 参考:片方向平均(15fps + ライン) | 62 | 55 | 112.7% |
考察・ポイント
- 0160fpsカメラを5fps相当(12フレームに1回)で処理すると、100km/h走行車両は処理フレーム間に約98ピクセル移動する。ByteTrackが追跡IDを継続するには同一物体の3〜4フレーム連続検出が必要で、1〜2フレームしか映らない高速車両は「一時的なノイズ」として棄却される。
- 0215fps処理(4フレームに1回)に変更すると、同じ100km/h車両が4〜6フレーム連続検出されるようになり、ByteTrackが安定した追跡IDを確立。14台→164台(ラインなし)へ大幅増加した。
- 03ラインなしでの164台はGT比3倍の過剰検出。路面レベルカメラは車両がフレーム内に長時間映るため、同一車両に複数の追跡IDが付与される再認識ミスが起きやすい。縦ラインx=0.5の設定で124台(左→右65台、右→左59台)まで絞り込み成功。
- 04カメラ高さと精度には明確な相関がある。道路脇5〜10m設置(M-30)では91%、橋上俯瞰(M-30-HD)では87%だったのに対し、路面0.5m設置では5fps処理で25%まで落ちる。カメラが低いほど車両の通過時間が短く、フレームレート設定の影響が大きくなる。
ITS2017 Validationデータセットとは
ITS2017 Validationは米国イリノイ大学アーバナ・シャンペーン校(UIUC)のLab-Workグループが公開している交通計測検証データセットです。イリノイ州アーバナのNeil Streetに路面レベル(高さ約0.5m)で設置されたRaspberry Pi Cameraで撮影した60fps・640×480の映像が含まれます。グランドトゥルース(GT)は光学フロー+タイヤ暗点検出アルゴリズムで算出した55台です。
このカメラ設置高度は、自治体や交通調査会社が実際の現場で使用するポールマウント型カメラ(通常3〜8m)より大幅に低く、「最も過酷な設置条件」のひとつです。
なぜ5fps処理で精度が崩壊するのか
VisionCount AIのデフォルト設定ではframe_interval = int(fps / 5.0)となっており、60fpsカメラでは12フレームごとに1フレームを処理(実効5fps)します。この設定はYOLOv8の処理速度と検出精度のバランスを取るものですが、高速道路の車両には対応できない場合があります。
100km/h(約28m/s)で走行する車両が640px幅のフレームに映る時間を計算します。路面レベルカメラでは車両がカメラの真横を通過する距離(約5〜10m)の間しか映りません。この5mを通過するのに約0.18秒、5fps処理では0.18秒×5fps≒0.9フレームしか処理されません。つまり高速車両は処理フレームに1回しか映らない計算です。
ByteTrackが追跡に失敗するメカニズム
ByteTrackは各フレームで検出されたバウンディングボックスをIoU(重なり率)と信頼度スコアを使って前フレームの追跡IDに関連付けます。追跡を「確定(confirmed)」するには同一物体が最低3〜4フレーム連続して検出される必要があります。
5fps処理での問題:
- フレーム1:車両がフレームに入る → 新規の「仮追跡(tentative)」IDを付与
- フレーム2(0.2秒後):車両がすでにフレームから出ている → 関連付けできずIDを削除
- 結果:車両は「確定追跡」にならず、カウント対象から除外
一方、15fps処理(4フレームに1回処理)では:
- 同じ100km/h車両がフレーム内に映る間に4〜6フレーム処理される
- ByteTrackが追跡IDを「確定」に昇格できる
- 安定した追跡IDが生成され、カウントに反映される
15fps処理への変更結果
frame_interval = int(fps / 15.0)に変更した結果、60fpsカメラでは4フレームに1回処理(実効15fps)になりました。解析対象フレーム数は3,000フレームから9,000フレームに3倍増加し、処理時間も約30分から90分に延びましたが、検出台数は14台から164台(ラインなし)へ大幅に向上しました。
カウントラインで過剰検出を抑制
ラインなしの164台はGT比3倍の過剰検出です。路面レベルカメラでは車両がフレームに長時間映るため、ByteTrackが追跡IDを途中で再割り当てする「再認識ミス」が発生しやすくなります。同一車両が2〜3つの追跡IDで記録されることで重複カウントが生じます。
縦ライン(x=0.5)を設定することで、各車両が画面中央を横断する1回のみカウントされます。結果は124台(左→右65台、右→左59台)となり、片方向平均62台がGT55台に対して112.7%(約13%の過剰)まで改善されました。
カメラ高さ別の精度比較
これまでの5本の検証を通じて、カメラ高さと精度の関係が明確になりました:
- 道路脇5〜10m(M-30):91% — 理想的な高さ。車両が数秒間フレームに映り、追跡が安定
- 橋上俯瞰(M-30-HD):87% — ライン設定の工夫で高精度を確保
- 交差点固定(Urban1):37% — 信号停止・多方向が障害(高さより交通特性が原因)
- 高高度ドローン140m(Songdo):23% — 専用モデルが必須
- 路面0.5m(ITS2017、5fps設定):25% → 15fps設定で113%に改善
路面レベルカメラは適切なフレームレート設定(15fps以上を推奨)とカウントラインの組み合わせで実用的な精度に到達できます。カメラ設置高度が低い場合は、必ずフレームレート設定を高めに調整してください。
フレームレート設定の推奨値
カメラ設置高度と想定車速に応じたframe_interval推奨値:
- 3〜10m(標準設置)、制限速度50km/h以下:fps/5(デフォルト)で十分
- 3〜10m(標準設置)、50〜100km/h:fps/10 を推奨
- 0.5〜3m(低位置設置)、任意速度:fps/15 以上を強く推奨
フレームレートを上げると処理時間が増加します。VisionCount AIの解析所要時間はフレームレート比に比例するため、fps/15設定ではデフォルトより約3倍の時間がかかります。
