質問: Single Shot Multi-box Detector (SSD) をトレーニングする際に 入力データに対してエンコードされる「variance」の役割を知りたいです。 以下の公開レポジトリを参考にしています: SSDをトレーニングする際、物体の位置のラベルは、Default box(中心x, 中心y, 幅, 高さ)に対する差異(Δ中心x, Δ中心y, Δ幅, Δ高さ)としてエンコードしてモデルに入力しますが、その際にΔ中心xとΔ中心yに対して0.1、Δ幅とΔ高さに対して0.2という値を「variance」と称してエンコードしていることに気づきました。 しかし上記レポジトリはじめオリジナルのcaffeでの実装でも「variance」としか説明されておらず、意味がわかりませんでした。 なぜこのようなことをするのでしょうか?
回答: 元のcaffeの実装で 議論 がされていたのと、使っていたkeras-tensorflowの実装のレポジトリでも 議論されていました。 caffeの実装の作者 曰く: > > You can think of it as approximating a gaussian distribution for adjusting the prior box. Or you can think of it as scaling the localization gradient. Variance is also used in original MultiBox and Fast(er) R-CNN. > > > keras-tensorflowの実装の作者 曰く: > > Probably, the naming comes from the idea, that the ground truth bounding boxes are not always precise, in other words, they vary from image to image probably for the same object in the same position just because human labellers cannot ideally repeat themselves. Thus, the encoded values are some random values, and we want them to have unit variance that is why we divide by some value. Why they are initialized to the values used in the code - I've no idea, probably some empirical estimation by the authors. > > >