PytorchSSD の実装で,loss functionは,ARM, ODMの出力に対してそれぞれarm_criterion , odm_criterion で、ともにPytorchSSD/layers/modules/refine_multibox_loss.py にあるRefineMultiboxLoss のインスタンスである.
arm_criterion は,PytorchSSD/utils/box_utils.py/match によって,ground truthと最も一致する(Jaccard Indexの大きい) prior boxを計算し,そのprior boxに対応する arm_locとarm_conf の組に対してconfidence lossとlocalization loss を計算する.さらに,ground truthに対応していないがarm_conf が高いものたちを選んでconfidence loss を計算し,足す(Hard negative mining).
([Learning Note] Single Shot MultiBox Detector with Pytorch が参考になる)
arm_criterion ではPytorchSSD/utils/box_utils.py/match を,ground truthとprior boxの対応づけにつかうのだが, loc_criterionでは PytorchSSD/utils/box_utils.py/refine_matchによって,ground truthとarm_loc を対応づけて,そのarm_loc に対応したodm_loc とodm_conf の組に対してarm_criterion と同じ操作を行う(confidence loss はクラスごと).
もとの論文では,ARMはbounding boxの粗いlocalizationを行う ((2) coarsely adjust the locations and sizes of anchors)
としていたが,この実装では特別ARMでのbounding box regressionを粗くする工夫は見当たらなかった(オリジナルの実装にはあるのかも).