ByteTrackのきもち

トラッキングにおける precision と recall
2Dにせよ3Dにせよ物体検出の後にその結果を使ってトラッキングを行うため、トラッキング時にどの検出を使用するのかを何かしらの手段で決定する必要がある。そして、検出結果には基本的にFPが含まれている。
どのような方法で検出を選択するかについては色々あるのかもしれないけれど、おそらくどのような方法を取ったとしてもその方法のパラメータによって、TP/TN/FP/FNが発生する。ここでのTPとかFPは間違いを含みうる検出結果を選択した後の結果についてのもので、TPは選択すべき検出を選択できたこと、TNは選択すべきでない検出を選択しなかったこと、FPは選択すべきでない検出を選択してしまった事、FNは選択すべき検出を選択できなかったこと、をそれぞれ表す。
すなわち、トラッキングにおいて検出結果を無条件で選択ということをしない限り、ここにもprecisionとrecallという指標が出てくる。

high threshold と low threashold
BYTE trackは(そしておそらくtracking by detectionな方法ではかなり一般的に)検出結果を選択する基準としてconfidenceの値を使用する。
そしてとくに、既存のトラッカーに最新の検出を割り当てて更新する際の、割り当ての際にこのconfidenceの値によって2段階の割り当てを行う。最初の割り当てでは高い閾値を使用してconfidenceの値でフィルタし、残った検出を既存トラッカーに割り当てる。2回目の割り当てでは、1回目で割り当てが行われなかった残りのトラッカーと、同じく1回目で使用されなかった残りの検出の間で割り当てを行い、この際に1回目よりも低い閾値でもってconfidenceの値でフィルタし、残った検出を既存トラッカーに割り当てる。
つまりここでは、confidenceの値によってprecisionとrecallの変化が発生している。
検出結果に対するconfidenceの値が検出の確からしさと相関があると仮定すると、
閾値を高くするということは、FPを抑制しより確度の高い検出だけを採用しようとしていることに他ならない。すなわち、1回目の割り当てではprecisionを高くすることを目指している。一方でFNは増加するため、recallは低くなり取りこぼしが発生する。
閾値を低くするということは、FNを抑制しより多くの選択すべき検出結果を拾い上げようとしている(取りこぼしを減らそうとしている)ことに他ならない。すなわち、2回目の割り当てではrecallを高くすることを目指している。一方でFPは増加するため、precisionは低くなり割り当てミスが発生しうる。
ただし、2回目の割り当ての際にはすでに確度の高い検出結果の多くは使用済みであり、同様にトラッカーの候補も減っているはず。それによって、2回目の割り当ての際にFPが選択される可能性が減少する・・・事を期待するのがBYTEアルゴリズムである(と理解した)。そして、ByteTrackが数あるMOTアルゴリズムの中でもかなりの成功を収めていることから、その期待は正しいようだ。
これらのことから、BYTEにおけるhigh threshold(1回目の閾値)は(上記の意味での)precisionを最大化する値を選択し、low threashold(2回目の閾値)はrecallを最大化する値を選択する・・・といいのかもしれない(要検証)。