【物体検出】SSD300とSSD512の比較

以前,物体検出の勉強でSSD (Single Shot MultiBox Detector) の記事を書きました。

一般的に”SSD”とだけ言及した際には,基本的には入力サイズが縦横300ピクセルのネットワーク構造のことを指すことが多い(ような気がする)ですが,下表のようにSSDには入力サイズが512のものも存在します。

引用:SSD table. 1

SSD512の方が入力サイズが大きいため,基本的には検出精度は向上しますが処理に時間がかかるためリアルタイム性は減少します。

今回はこのSSD512を実装してKITTIで学習してみました。定量的な精度の比較はSSDの論文をはじめとして,物体検出系の論文で頻繁に言及されていますので,今回はどの程度精度が異なるのかを定性的に比較してみたいと思います。

SSDの問題点

SSDの課題としてよく言われるのが「小さい物体に弱い」ということがあります。これはSSDのアーキテクチャを見ればよく分かります。

詳細は以前の記事を見て頂ければ分かると思いますが,SSDでは小さい物体ほど浅い層(入力側に近い層)の特徴マップを使用して検出しています。浅い層は当然畳み込まれる回数が少ない状態であるため,結果として検出のための十分な特徴量が抽出されないため精度が低下してしまうという仕組みです。

ただ,実際に検出してみるとそれ以外の理由もあるように見えます。SSDではPrior boxと呼ばれる決まった位置/形のBoxを大量に設定しておいて,そのBoxとの回帰問題として物体の位置を検出しています。そのため,Prior boxの中でも最も小さいサイズ以下の物体はそもそも検出しづらいという点がかなり効いてくるように思います。

以下の2枚の画像は正面の車との距離が少しずつ離れていっている状態での検出結果です。

正面の黒めの車に着目した際に,上の画像がギリギリ検出できる限界サイズになっていまして,下の画像では少しだけ距離が離れてサイズが小さくなったため検出できなくなっています。

また,右側に見えている黒い対向車に着目すると,逆に近づいて来ているため上の画像では検出できていなかった一方で,もう少しだけ近づいた下の画像では検出できている様子が見てとれます。

このように,特徴量を用いる層の浅さの問題やPrior boxのサイズの問題など,原因は複数ありますがSSDでは小さい物体が検出しづらいという問題が存在します。

SSD512

そこでSSD512では単純に入力サイズを大きくして,同じ物体を相対的に大きくする(ある物体が占めるピクセル数を増やす)という方法でどの程度小さい物体に対する検出力が変化するかを確認してみました。

動画の上半分がSSD300,下半分がSSD512になっています。比較してみると下図のようにSSD512の方が明らかに小さい物体を検出できるようになっていることが分かると思います。

SSDの実装はググればいくらでも出てくると思いますので割愛しますが,最小のPrior boxのサイズは大凡ですが相対的に60%くらいになっているはずですので,かなり小さい物体も検出できることも納得かなと思います。

まとめ

という訳で今回は小さい物体の検出が弱いと言われているSSDで,入力のサイズを変えることでどの程度小さい物体にも対応できるかを見てみました。本当はリアルタイム性の検証などもやるべきなんでしょうが,今回はとりあえず定性的に把握するということでしたので,定量的な精度や処理速度については割愛しました。

実際にやってみた感覚値としては,世間的に言われている程SSDは小さいに物体に弱い訳でもないなというのが正直なところですかね。具体的に精度を出してみないと細かいところは何とも言えませんが,小さい物体に対して極端な高精度を求められるような状況でない限りは,ある程度ちゃんとチューニングさえすればSSDでも十分に対応できるように思います。

スポンサーリンク