深層学習によって画像認識の精度がどんどん上がっているが、人は両目で見て距離感も把握し、空間情報を脳の中で構築している。自動運転やロボットなど、画像情報もとに制御まで考えていくと距離情報が必要になってくる。今回距離を測定するセンサーの情報をまとめると同時に、Kerasで2D画像による深度測定のサンプルコードが紹介されていたので試してみた。

距離測定の手法

距離測定といっても用途が異なると求められるセンサーも変わってくる。自動運転のように夜間も雨天や霧の中でも比較的長い距離の測定が必要になるケースもあれば、工場でロボットで部品をピッキングするときには環境的には室内で照明があるが、mmオーダーの精度が求められるケースもある。

それぞれのセンサーの特徴を表にまとめてみる。

種類特徴
ステレオ
カメラ
左右のレンズで同時に撮影することで、奥行き情報も得られるカメラ。画像として見れるので、物体検出できる。コストも安い。ただし、夜間や悪天候時では画像が見えず検出精度が落ちる。夜間では赤外線カメラとの併用の方が精度が高まる。
LiDAR赤外光を照射して反射光が返ってくるまでの時間から距離計測する。ToF(Time of Flight)センサーもLiDARの一つの方式。距離の精度が高く、視野角が広いが、コストが高い。距離も100mぐらいが限界で、悪天候時には性能が落ちる。
ミリ波
レーダー
距離測定の精度は高く、雨天や悪天候、夜間でも使える。またコストもLiDARより安い。ただし、物体の形状や位置の判定は難しい。

それぞれ長所・短所があり、一つで全てをカバーできないため、自動運転では組み合わせて使っている。ホンダのホンダ センシング 360の紹介がわかりやすい。

https://www.watch.impress.co.jp/docs/news/1358780.html

一方で単眼カメラからDeep learningで距離推定を行う手法も最近出てきており、KerasでもMonocular depth estimationが8月に公開されたので、どれぐらいできるものなのか実験してみた。

測定環境

深度情報が必要なので、Intel Realsense D435iを使用して、2D画像と深度情報の画像を作成。以下の手順で評価してみた。

  1. D435iで部屋の画像と深度情報を作成。
  2. Kerasで学習モデルを生成。モデルの学習データはDIODO(A Dense Indoor and Outdoor Depth Dataset)のIndoorで学習したもの。コードはKerasでのサンプルコードを全くそのまま使用。
  3. 2D画像で深度情報を予測
  4. D435iの深度情報とを画像で比較

結果

左の列はオリジナルの2D画像、真ん中の列はD435iの3D画像、右の列は今回の予測結果。色は手前から青、緑、黄色、オレンジ、赤と距離が遠くなる。上から2つ目のエアコンの画像は近いものが出ているが、それ以外はかなり異なる結果となった。なんとなくだが、色合いの濃いものが深度が深く、明るいものは浅く出ているように思える。

Kerasのサイトを見ると、U-Netのエンコーダー部分を学習済みのDenseNetやResNetに置き換えるたり、ロス関数をチューニングすることで精度が向上するとのこと。精度が上がれば、高価な3Dカメラが不要になり、応用範囲は広いので、今後の動向を見ていきたい。