論文まとめ：A Simple Baseline for Multi-Object Tracking

# はじめに  
以下の論文
[1] Y. Zhang, et. al."A Simple Baseline for Multi-Object Tracking"
のまとめ

Journal等は不明。モデルの略称：FairMOT。

Multi-object trackingの分野ではいい結果を出してる。
https://paperswithcode.com/task/multi-object-tracking

- arXiv:
https://arxiv.org/abs/2004.01888

- githubの公式コード:
https://github.com/ifzhang/FairMOT
MIT license。

既にざっくりしたまとめ記事が存在する。
https://qiita.com/takoroy/items/db1247727805af1ee92a
ので、ここではモデルのアーキテクチャやロス等のロジックの詳細に焦点をあてる。

# ネットワークのアーキテクチャ 

## 1. 全体像 
アーキテクチャの全体像は、こんな感じで  
![FairMOT_img00_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/f2a466ff-290f-32d6-c510-f6917a8f89a2.png)

encodeしてdecodeする感じ。decoder部分が若干小さいことからわかるように、出力される画像の解像度は元の Image の 1/4。

また 1-shot 系（Detectionとその領域における特徴量をニューラルネットから同時に出力する）なので、右の出力は Detection と Re-ID。

## 2. Encoder-Decoderの詳細  
encoder-decoderネットワークの詳細は以下。

![FairMOT_img00_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/82cfe179-5237-26cb-24da-22eb09d86b98.png)

まず、backbornはresnet-34。全体構造としてはCenterNet[2]のDLA-34。

図中のUNet構造における青いブロックを赤い矢印に沿ってたどっていくと、down sampling しながら畳み込まれている。

これに対して青い矢印は同じ解像度での畳み込み経路。

黄色はupsamplingの経路だが、ここではdeformable comvolutionを使っているのだそう。CenterNetを踏襲しているということなので、deformable conv -> deconvolution の順と思われる。

（参考）CenterNetのアーキテクチャ
![centernet_img00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/9c43a990-b2c4-51bd-5e98-257494e8a0ba.png)
[2]Figure6より

(d)がDLA-34。表現の仕方が違うものの、よくよく見比べると構造は同じ。

さらに、Uの中身が密に詰まったU-Net++と比べた場合、U内の右半分が無く、short-cutも無く簡素な形。

（参考）U-Net++のアーキテクチャ
![nested_unet_img00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/e89f7272-6ed8-ceb8-e781-d5167cba8d3b.png)
[3] Figure1より

## 3.出力のDetection Branch 
２つあるBranchのうちのDetection BranchもCenterNetを踏襲してこんな感じ。

 ![FairMOT_img00_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/8c69d68f-f172-8158-819a-af35852d24db.png)

細かくは３種類の出力、１）boxの中心を表すheatmap、２）boxのサイズを表す値、３）中心位置のoffsetを表す値、からなる。

### 3.1 boxの中心を表すheatmap 
骨格推定のごとくheatmapで物体の中心位置を推定する。

入力画像のbounding boxを ${\bf{b}}^i = (x\_1^i, y\_1^i,x\_2^i, y\_2^i)$ として、入力画像における物体の中心は

```math
\begin{eqnarray*}
c^i_x &=& \frac{x^i_1 + x_2^i}{2} \\
c^i_y &=& \frac{y^i_1 + y_2^i}{2} \\
\end{eqnarray*}
```

であり、1/4に縮小された出力における位置は

```math
(\tilde{c}_x^i, \tilde{c}_y^i) = (\lfloor \frac{c^i_x}{4} \rfloor , \lfloor \frac{c^i_y}{4} \rfloor)
```

である。これからガウシアンを用いてheatmap（$M\_{xy}$）を作成する。

```math
M_{xy} = \Sigma_{i=1}^N \exp^{-\frac{(x-\tilde{c}_x^i)^2 + (y-\tilde{c}_y^i)^2}{2 \sigma_c^2}}
```
Nは物体の数。
 

### 3.2 boxのサイズを表す値 
trackingには使わないが、object detectionの評価に用いる。

アノテーションの bounding box情報 ${\bf{b}}^i = (x\_1^i, y\_1^i,x\_2^i, y\_2^i)$ から幅と高さを計算してtargetとする。

```math
{\bf{s}}^i = (x^i_2 - x^i_1, y_2^i - y_1^i)
```


### 3.3 boxの中心に対するオフセットを表す値
heatmapだけでもそこそこの精度で中心位置が推定できるが、いかんせん出力が元画像の1/4に縮小されてるので、元画像のサイズでいうと数ピクセルずれる。本手法のしくみだと中心位置の特徴量を抜いてくるので、ここがズレると隣の人の特徴量となってしまう可能性がある。よってより正確に中心位置を推定するため、このチャンネルでオフセットを推定する。

このオフセットは縮小分のズレを補正するためのもので、super pixel的なオフセットではなさそう。

出力画像におけるオフセットは

```math
{\bf{o}}^i = (\frac{c^i_x}{4}, \frac{c^i_y}{4}) - (\lfloor \frac{c^i_x}{4} \rfloor , \lfloor \frac{c^i_y}{4} \rfloor)
```


## 4. 出力のRe-ID branch
マッチングに使う特徴量を出力する。

![FairMOT_img00_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/21b0d7ac-724f-58fb-da34-a8fabd24a791.png)

Detection Branchで求めた中心座標 $(\tilde{c}\_x^i, \tilde{c}\_y^i)$ の位置の特徴量（ ${\bf{E}}\_{x^i,y^i}$ ）を抜く。

なので、こんな感じか。

![FairMOT_img12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/30c8b5ed-f9d1-0f0d-3833-1277f9e158f5.png)

注意点としては、$\bf E$ は物体のインスタンス総数（つまり物体のIDの総数）だけ次元があるone-hotベクトルであること。例えば、ある人はvideo中常に $(0,0,0,1,0,0,0,....,0)$ であり、またある人は $(0,0,0,0,...,0,1,0)$ である。

# Loss
上記４種類の出力それぞれに応じてLossがある

## heatmapのLoss
focal lossを用いる。heatmapの推定値を $\hat{M}$ として

```math
L_{heatmap} = -\frac{1}{N} \sum_{xy}
  \begin{cases}
    (1- \hat{M}_{xy})^\alpha \log(\hat{M}_{xy}), & if \ M_{xy} = 1; \\
    (1- \hat{M}_{xy})^\beta (\hat{M}_{xy})^\alpha \log(1- \hat{M}_{xy}) & otherwise,
  \end{cases}
```

### boxサイズのlossとオフセットのloss

boxサイズの推論値を $\hat{s}^i$ 、オフセットの推論値を $\hat{o}^i$ として、targetとL1をとる。

```math
L_{box} = \sum^N_{i=1} \| {\bf o}^i - \hat{\bf o}^i \|_1 + \| {\bf s}^i - \hat{\bf s}^i \|_1
```

### Re-IDのloss
出力がone-hotベクトルなので、ソフトマックスで計算する。

```math
L_{identity} = - \sum^N_{i=1} \sum^K_{k=1} {\bf L}^i (k) \log ({\bf p}(k))
```

# その他気になる点
## 1 trackingのアルゴリズム
本論文では通常のKalman Filterを用いている。

また物体が急激に動く場合を想定して、fram間で対応する物体が遠い場合にはcorresponding costを無限に設定する<font color="blue"> -> ここよくわからん。第１段階ではkalman filterで予測した位置や特徴量を使い、それでマッチングしないものに対して第２段階で特徴量だけ使うって意味？？</font>


# Reference
[2] X. Zhou, et. al."Objects as Points"

[3] Z. Zhou, et. al."UNet++: A Nested U-Net Architecture for Medical Image Segmentation"