Object trackingの手法(SiamCAR)を解説

## 経緯
object trackingに触れる機会があり、その際に読んだ論文の内容を共有しようと思い、記事にしました。object tracking全体の詳しい解説は[こちら](https://engineer.dena.com/posts/2019.07/cv-papers-19-object-tracking/)が参考になると思います。自分は、エッジデバイス上でDNNを動かすことが多いため、精度もですが**FPSが速い手法**を特に探していました。なので、今回紹介するのは**FPSがトップレベルに速いSiamCAR**という手法です。機械学習の用語とかはできるだけ英語のままにしています。

## ざっくりとはどんな論文？
- tracking taskをカテゴリーの分類と、object bounding boxの回帰という２つの問題に分解したよ
- anchorなどを使わないパラメータチューニングがいらない手法でSOTAを達成したよ
- FPSもめちゃめちゃ速いよ

## 論文の前にSiameseNetworkとは？
object trackingの手法の中で、よく用いられているネットワークとして**Siamese Network**というものがあります。これを用いているobject trackingの名前はだいたい**Siam~~**となってます。SiamNetworkは簡単に言うと、**同じクラスを近くに、違えば違うほど遠くに写像するネットワーク**です。[こちら](https://hackernoon.com/one-shot-learning-with-siamese-networks-in-pytorch-8ddaab10340e)の記事とかが参考になると思います。

## 0. Abstract
tracking taskを**カテゴリーの分類**と、**object bounding boxの回帰**という２つの問題に分解した、fully convolutional Siamese networkを提案します。SiamCARは**特徴量抽出のためのSiamese subnetwork**と**bounding box予測のためのclassfication regression subnetwork**の２つで構成されています。[Siamese-RPN](http://www.zhengzhu.net/upload/P6938bc861e8d4583bf47d47d64ed9598.pdf)などのSOTAと比べて、この手法はanchorがいりません。その結果、ハイパーパラメータのチューニングから解放されます。多くの実験でSOTAを達成しています。
*anchorはあらかじめobjectの縦と横のアスペクト比を設定しておき、それをobject trackingの補助として使うものです。例えば、立っている人だったら縦が横より長いanchorになります。

## 1. Introduction
object trackingは幅広いアプリケーションにおいて注目を浴びており、急速に発展しています。しかし、様々な光のシチュエーションや、オクルージョンなど、現実世界で導入するには多くの課題があります。現在の人気なvisual trackingの手法はSiamese networkがベースとなっています。Siamese networkはtracking taskをtarget matching problemとし、target templateとsearch regionのsimilarity mapを学習することを目指します。
主な貢献は以下の通りです。

- visual trackingのためのSiamese classificationとregression framework(SiamCAR)を提案します。フレームワーク自体はシンプルですが、パワフルなパフォーマンスを出します。
- trackerはanchorとproposalフリーです。hyper-parameterの数が激減しました。
- accuracyとspeedにおいてSOTAを実現しています。

## 2. Related Work
CNNの急速な進歩により、CNN-basedの抽出器が広く用いられるようになりました。template updatingによって、trackerの適応性は改善されましたが、online trackingは非効率的です。その上、template updatingはtracking driftに悩まされています。現在の研究者はCNNを用いたSiamese based online trainingとtracking approachがaccuracyとefficiencyの間で最もバランスが良いことを示しています。

**template updating** → objectの外観の変化(光のあたり具合など)に応じてonlineで学習する。ただ、FPSが遅い。
**tracking drift** → 追跡する物体が途中で入れ替わってしまう現象。下のような画像のような感じ。
![Screenshot from 2020-12-01 13-54-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/46add927-680b-56df-165f-dd04cd7292ca.png)

[引用元](https://www.semanticscholar.org/paper/State-Aware-Anti-Drift-Object-Tracking-Han-Deng/5c9834994727d0adf481fab1c1524569a0d6e017)

## 3. Proposed Method
私達はtracking taskをclassificationとregressionの２つのsubproblemに分解しています。Figure 2で示しているように、私達のフレームワークは、主にfeature extractionのためのSiamese networkと、bounding box predictionのためのother networkの２つのsimple subnetworkで構成されています。
![Screenshot from 2020-12-01 13-43-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/ea193512-2b65-08e1-1f3c-c6ad86c858f6.png)

### 3.1. Feature Extraction
feature extractionのためにCNNを利用します。Siamese Subnetworkは2つのブランチを構成します。target branchは入力としてtracking template patch Z(前のフレームからの物体の位置、または物体の初期位置)を取り、search branchは入力としてsearch region X(この領域の中から物体を探していく)を取ります。2つのbranchはbackbone modelとして同じCNNアーキテクチャを共有し、2つのfeature maps ϕ(Z) とϕ(X)を出力します。これらの２つのbranchの情報を埋め込むために、 ϕ(X)とϕ(Z)のcross-correlationによりresponse map Rを取得出来ます。Rが豊富な情報を持っているのが理想ですが、cross-correlation layerはsingle-channel compressed response mapしか生み出すことができず、それはtrackingにおいて情報不足となります。よって、複数のsemantic similarity mapsを作り出すためにdepth-wise correlation layerを使います。
![Screenshot from 2020-12-04 20-35-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/2080c9cf-813f-113c-56da-c2699c1bc9b4.png)
**feature map**→畳み込みによって得られた行列。モデルがどのようにtargetの特徴を捉えているのか確認するために、feature mapを可視化したりします。[こちら](https://qiita.com/bukei_student/items/698383a7118f95c12cce)とかが参考になるかもしれません。
**cross-correlation**→2つの対象の類似度を図る式。詳しくは[こちら](https://en.wikipedia.org/wiki/Cross-correlation)。

*はチャンネル毎のcorrelation操作を示しています。map Rはϕ(X)と同じ数のchanelを持ち、classficationとregressionのための多くの情報を保持しています。backbone networksとして変更を加えたResNet-50を使います。より良い推論結果を得るために、backboneの最後の3つのresidual blocksを組み合わせます。それぞれ、F3(X), F4(X), F5(X)とし、結合します。
![Screenshot from 2020-12-04 20-43-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/173bb039-2fab-03ac-ce08-2bda3ab4bf8f.png)

F3(X)~F(5)は256 channelsを含んでいるので、結果的にφ(X)は3 * 256channlesを含むことになります。
Depth-wise Cross Correlationはmulti-channel response mapを取得するためにsearching map φ(X)とtemplate map φ(Z)の間で実行されます。response mapはその時、256 channelsまで次元を減らすために1 * 1 kernelで畳み込まれます。最後の次元が削減されたresponse map R*はclassification-regression subnetworkの入力として採用されます。

### 3.2. Bounding Box Prediction
response map R*におけるlocation(i, j)は入力のsearch region(x, y)としてマッピングすることができます。RPNベースのtrackerは検索領域の対応する場所をmulti-scale boxesの中心とみなし、これらのアンカーボックスを参照します。それらと違い、私達のネットワークはそれぞれの位置において、直接target bounding boxを分類、回帰しています。関連したtrainingはend-to-endのfully convolution operationで達成され、難解なパラメータチューニングを避け、人間の介入を減らします。
tracking taskは2つのsubtasksに分解されます。それぞれの位置におけるカテゴリを予測するためのclassification branchと、target bounding boxを計算するregression branchです。Siamese subnetworkを使って抽出されたresponse map R*(w*h*m)の場合、classification branchはclassification feature map Acls(w*h*2)を出力し、regression branchはregression feature map Areg(w*h*4)を出力します。ここでwとhは抽出したfeature mapのwidthとheightです。Figure 2で示されているように、Aclsの(i, j)それぞれの点は、2D vectorを含んでおり、input search regionにおける対応する位置のforegroundとbackground scoreを表しています。Aregにおけるeach point(i, j,:)は4D vector t(i, j) = (l, t, r, b)を含んでおり、これは対応する位置からinput search regionにおけるbounding boxの４つの辺までの距離を表しています。
classificationのためにcross-entropy、regressionのためにIoUを採用しています。(x0, y0)と(x1, y1)は左上と右下を表し、(x, y)は点(i, j)に対応する位置を表します。Aregのtarget t(i, j)は次のように計算されます。
![Screenshot from 2020-12-04 20-56-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/af650d56-8ad5-aff4-1930-6a99b0512478.png)
t(i, j)はground-truth bounding boxとpredicted bounding boxの間のIoUで計算されます。そのときregression lossは次のように計算されます。
![Screenshot from 2020-12-04 20-57-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/657cd98f-e938-7d41-157d-b7e9bbcc51f9.png)
![Screenshot from 2020-12-04 20-57-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/a07f0e86-4fc1-9c31-3d7c-10696285ac3e.png)
targetの中心から離れた位置では、低精度で予測されたbounding boxが生成される傾向があり、これはtracking systemのパフォーマンスの精度を下げています。外れ値を取り除くためにclassification branchと並行してcenterness branchを加えています。Figure 2で示されているように、そのbranchはcenterness feature map Acenを出力します。それぞれのpointの値は一致する位置のcenterness scoreを与えます。Acen(i,j)のC(i, j)は下のように定義されます。
![Screenshot from 2020-12-04 20-59-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/2163d3b4-666d-bb39-fd6b-04604a168893.png)
もし、(x, y)がbackgroundの位置であれば、C(i, j)の値は0に設定されます。centerness lossは次のようになります。
![Screenshot from 2020-12-04 21-00-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/824414a0-d071-2c26-d18d-7fdfd605ddb5.png)
全体のloss functionは次のようになります。
![Screenshot from 2020-12-04 21-01-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/9f575427-6fad-e77d-3134-1feb9bb3a2ed.png)
Lclsはclassificationのためのcross-entropyを表しています。λ1とλ2はcenterness lossとregression lossのweightです。trainingの間、λ = 1, λ = 3に経験的に設定しています。

### 3.3. The Tracking Phase

Trackingは現在のフレームでのtargetのbounding boxを予測することを目指します。位置(i, j)のために提案された手法は6D vector Tij = (cls, cen, l, t, r, b)を生成します。clsはclassificationのforeground scoreを表し、cenはcenterness scoreを表し、l + rとt + bは現在のフレームのwidthとheightを表します。trackingの間、bounding boxのsizeとアスペクト比は連続したフレームを通じて、少しづつ変わります。推論をコントロールするために、6D vectorのアップデートを認めて、clsをre-rankするためのscale change penalty pijを採用しています。trackin phaseは以下のように定式化されます。
![Screenshot from 2020-12-05 13-53-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/537b0cef-3d66-a29a-0145-86a81132c848.png)
Hはcosine windowでλdはbalance weightです。出力qはtarget pixelにおいて最も高い高いscoreで検索されたlocationです。私達は、qの周りに位置するpixelはよりtarget pixelになることを観察しました。したがって、値clsij×pijに従い、qのn個の近傍から上位k個の点を選択します。最終的な推論結果は、選択されたk個のregression boxesのweighted averageです。経験的に、n = 8とk = 3が安定したtracking resultsをもたらすことを発見しました。

## 4. Experiments
### 4.1. Implementation Details
SiamRPN++と同じになるように、template patchとsearch regionの入力サイズはそれぞれ127pixlesと255pixelsに設定しています。また、SiamRPN++でのmodified ResNet-50を私達のSiamse subnetworkとして採用しています。networkはImageNetで事前学習されています。そしてモデルを学習する際の初期値としてpretrained weightsを使っています。

**Training Details**

- Environment → batchsize 96, 20epochs, SGD, initial learning rate 0.001
- dataset → COCO, ImageNet DET, ImageNet VID, YouTube-BB

**Testing Details**
testing phaseではoffline tracking strategyを使います。動画の最初のフレームでの物体のみをtemplate patchとして採用します。結果として、Siamese subnetworkのtarget branchは事前にけいｓされ、tracking periodの間、修正されます。現在のフレームでのsearch regionはsearch branchの入力として採用されます。Figure3でtracking processの全体像を示しています。
![Screenshot from 2020-12-05 14-02-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/084af480-6a2b-11c2-902b-969b568e532e.png)
classification-regression subnetworkの出力により、式(9)を通してlocation qが出力されます。隣接したフレーム間でのより安定してスムーズなpredictionを達成するために、qのtop-3 neightborsに対応したregression boxesのweighted averageが最終的なtracking結果として計算されます。異なるデータセットの評価のために、それぞれで提供されている公式の測定方法を用いています。

### 4.2. Results on GOT-10K
GOT-10K [18]は、最近リリースされた、屋外の一般的な物体追跡のための大規模で多様性の高いベンチマークです。提供されている評価指標は、average overlap(AO)とsuccess rate(SR)です。AOは、推測された全てのbounding boxesとground-truth boxesとの間のaverage overlapsを表しています。SR0.5は、overlapが0.5を超えたframeの割合を示しています。Figure1はSiamCARが全てのtrackerより優れていることを示しており、Table 1は異なった指標で量的な結果を示しています。
![Screenshot from 2020-12-05 14-05-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/80783f93-65d6-47e4-4246-6657505b1b0e.png)
![Screenshot from 2020-12-05 14-08-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/5539274c-cd48-ae3c-9744-7c9c7f408683.png)
明らかに、私達のtrackerは全ての指標で最高を叩き出しています。SiamRPN++と比べて、AO, SR0.5, SR0.75においてそれぞれ5.2%, 5.4%, 9.0%改善しています。
Table 1で示されているように、他のほとんどのtrackerよりFPSが速いです。

### 4.3. Results on LaSOT
LaSOTはNormalized precision plots, precision plots, success plotsが評価指標と考えられています。Figure5で示されているように、SiamCARはbest performanceを達成しました。赤いラインのものがSiamCARの結果です。
![Screenshot from 2020-12-05 14-09-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/e938b914-75a4-1f0c-2090-b240bb4ff334.png)

### 4.6. Backbone Architecture Evaluation
提案されたframeworkの効率性を検証するために、object trackingのための異なるbackbone architecturesを比較しています。Table 2はResNet-50, ResNet-34, AlexNetをbackbonesとして使ったtracking performanceです。
![Screenshot from 2020-12-05 14-12-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/fc9cfeba-2019-69c9-8ce8-b581e26f0629.png)
backbone networkを変えることにより、SiamCARのaccuracyとefficiencyを実世界の条件に合わせて、調整ができることがわかります。

## 個人的な感想
object trackingの手法は全体的にどうしてもFPSが遅くなってしまいます。なので実世界で使うためには、精度だけでなくFPSの速さも重要になってきます。どちらも高いレベルを実現している手法だったので、すごいなと思いました。ただ、精度とFPSともにさらに向上したSiamFC++という手法を最近発見したので、そちらを今度紹介します。
**追記: [こちら](https://qiita.com/Hiroaki-K4/items/66c68a893fbb8142fdf0)にまとめています。**

**間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。**



## 参考文献
1. [Visualising Filters and Feature Maps for Deep Learning](https://towardsdatascience.com/visualising-filters-and-feature-maps-for-deep-learning-d814e13bd671)
2. [2019年までのCAM(Class Activation Map)まとめ](https://qiita.com/bukei_student/items/698383a7118f95c12cce)