## MOSSEによる重畳車の ## 高速距離推定 計数工学科システムコース4年 王 允卓 --- ## 1. 概要 * 複数の自動車をMOSSEで追跡 * 距離・速度推定 * 高速ステレオカメラ(500fps) * 処理速度...平均0.35ms/(Frame・台) * 様々な実装上の工夫を行うことで、 車同士が重畳した場合にも対応 --- ## 0. 目次 1. 概要 2. 導入 3. 提案手法 4. 結果 5. 考察と結論 --- ## 2. 導入 --- * 前方車までの距離・速度を推定したい * 500fpsのステレオカメラ * 車同士がかぶることもある ![](https://i.imgur.com/AeA19lV.png) * それでも分離して距離・速度推定をしたい --- ### 先行研究1: Inverse Projection Method(IPM) * 左右それぞれの画像を「地面」の平面に投影し、差分を検出 * 高速 * 弱点: 1. ノイズに弱く、現実の環境で使えない 2. 車同士が重畳すると、一つとして検出される ---- ### 先方研究2: IPM + YOLO + MOSSE * 重畳したときにYOLOで車を検出・分離 * YOLOは遅い (CPU上で150ms程度) * その間をMOSSEを用いて追跡し補間 * 問題点: 1. Bounding Boxの位置で距離推定 YOLOのBBが不安定→推定距離がガクガク 2. MOSSEが間に合っていなかった(4ms程度) --- ### 本実験 * [MOSSE*のみ*を使って安定&高速な距離推定を実現](https://drive.google.com/file/d/1U8MmwkkpqP3gdY6ux87OT_2vIeUmjach/view?usp=sharing) 1. MOSSEの実装の安定化、高速化 3. 部分的に重畳している場合に対応 5. 両眼の視差を用いた精度の良い距離推定 6. 距離の情報を用いてBBの大きさを追従 7. カルマンフィルタを用いた速度推定 ---- ### 他の手法の検討 * KCF等...MOSSEより遅く、精度はMOSSEで十分 * 特徴点抽出(AKAZEやORB)...遅く(2ms程度)、 安定して検出し続けられる点が少なかった * ステレオマッチング(SGMやBM)...MOSSEと 比べて遅く、境界や背景が安定しなかった * オプティカルフロー...重畳車を区別するには 不十分な気がした * 車と外界のエッジ検出は安定しなかった --- ## 3. 提案手法 --- ### MOSSE(Minimum Output Sum of Squared Error) * 畳み込みを用いた追跡アルゴリズム * 画像を$f_i(\vec r)$としたとき、 $$ \arg\min_{h(\vec r)}\sum_i\int \left|(h * f_i)(\vec r) - g(\vec r)\right|^2 d\vec r$$ となるフィルタ$h(\vec r)$を学習させる。 * ただし、$g(\vec r)$は細いガウシアンを与える。 ---- * フーリエ変換して考えると、 $$ \arg\min_{H(\vec r)}\sum_i\int \left|H(\boldsymbol k)F_i(\boldsymbol k) - G(\boldsymbol k)\right|^2 d\vec r$$ * これは簡単に解けて、 $$ H(\boldsymbol k) = \frac{\sum_i F_i^*(\boldsymbol k)G(\boldsymbol k)}{\sum_i F_i^*(\boldsymbol k)F_i(\boldsymbol k)}$$ (※ 実際にはフーリエ変換時に窓関数を掛ける) ---- ### MOSSEの大枠 * 追跡したい範囲の画像$f_0(\vec r)\leftrightarrow F_0(\boldsymbol k)$ * $H_0(\boldsymbol k) = \frac{F_0^*(\boldsymbol k)G(\boldsymbol k)}{F_0^*(\boldsymbol k)F_0(\boldsymbol k) + \epsilon}$ * 同範囲の次のコマ$f_{i+1}(\vec r)\leftrightarrow F_{i+1}(\boldsymbol k)$が来たら、 * $H_i(\boldsymbol k)F_{i+1}(\boldsymbol k)\leftrightarrow (h_i * f_{i+1})(\vec r)$を計算 * $\Delta \vec r = \displaystyle \arg\max_{\vec r} (h_i * f_{i+1})(\vec r)$だけ範囲移動 * *移動先の画像を使って*、$H_i\to H_{i+1}$に更新 ---- ### $H_i\to H_{i+1}$の更新 * 分子と分母でそれぞれ指数移動平均を取る * $A_{i+1}(\boldsymbol k) = (1-\eta)A_i(\boldsymbol k) + \eta F'^*_{i+1}(\boldsymbol k)G(\boldsymbol k)$ * $F'^*_{i+1}(\boldsymbol k)$は*移動先の画像の*フーリエ変換 * $B_{i+1}(\boldsymbol k) = (1-\eta)B_i(\boldsymbol k) + \eta F'^*_{i+1}(\boldsymbol k)F'_{i+1}(\boldsymbol k)$ * $H_{i+1}(\boldsymbol k) = A_{i+1}(\boldsymbol k) / (B_{i+1}(\boldsymbol k) + \epsilon)$ --- ### 今回使ったMOSSEの追加の工夫(1) * 初期BBは既知と仮定 * BB内をある固定のサイズ(64x64)にリサイズ * <font color="yellow">移動量は小さいので、</font>$\Delta \vec r$を周囲±3px内で探索 (部分occlusionに強くなる) * <font color="yellow">画像の変化が小さいので、</font>フィルタの学習率$\eta$を かなり小さめに設定(ドリフトしにくくなる) * $\Delta\vec r$の計算時に周囲9pxを見て二次近似し、subpixel精度を出す(距離推定が荒くなくなる) --- ### 今回使ったMOSSEの追加の工夫(2) * 左右の視差から距離を推定(後述)し、BBのサイズも調整する(距離の変化が大きい時にもロバスト) * 後ろの車の追跡時に前の車のBBを灰色で 塗りつぶす(前の車につられない) * 前の車の視差の情報が残らないように、左右ともBB内で同じ位置を塗る * <font color="yellow">移動量が小さいので、</font>$F'_i(\boldsymbol k) \approx F_i(\boldsymbol k)$として 計算量を削減 --- ### 仮距離推定 * 左右の視差を得るために、同じフィルタを使って左右交互にMOSSEを掛ける * BBは独立に「時間発展」させる * キャリブレーションしたステレオモデルを使って、 左右のBBの横位置の差から距離を仮推定 --- ### 距離・速度推定 * 仮推定した距離から速度とより精度の良い距離を推定したい * カルマンフィルタを使う * 速度の変化をWiener過程と仮定 * 仮推定を「距離の観測」とみなし、速度とより高精度な距離を推定 * 推定した距離を使ってBBのサイズを調整(先述) --- ## [4.結果](https://drive.google.com/file/d/1U8MmwkkpqP3gdY6ux87OT_2vIeUmjach/view?usp=sharing) --- 推定距離 ![](https://i.imgur.com/ecNzYBL.png) --- 推定相対速度 ![](https://i.imgur.com/sWcC06q.png) --- 計算時間 ![](https://i.imgur.com/l79NJ74.png) --- ## 5.考察と結論 --- * MOSSEに工夫を凝らすことで、車が重畳する場合においても安定かつ高速に追従できた * 両眼の視差から、カルマンフィルタを用いて距離・速度を推定できた * 計算時間はカメラ(500fps, 1000fps)に十分間に合う --- ### 課題 * 初期BBの自動設定(Detection) * YOLO, ... * 先行研究よりずっと時間をかけて良さそう * 完全に重畳してしまった場合の復帰 * 塗りつぶす色は灰色でいいのか? * 周りの色の平均を取る、etc.
{"metaMigratedAt":"2023-06-14T22:44:49.981Z","metaMigratedFrom":"YAML","title":"MOSSEによる重畳車の高速距離推定","breaks":true,"slideOptions":"{\"transition\":\"zoom\"}","contributors":"[{\"id\":\"20cec21f-d1df-4f4f-8a28-4607bd622a8b\",\"add\":5545,\"del\":1514}]"}
    467 views