論文まとめ　HART：Hierarchical Attentive Recurrent Tracking

#はじめに
NIPS2017から A. Kosiorek らの HART Hierarchical Attentive Recurrent Tracking をまとめてみた。

論文はこちら
http://papers.nips.cc/paper/6898-hierarchical-attentive-recurrent-tracking.pdf

著者らのコードはこちら。Tensorflowで書かれてます。
https://github.com/akosiorek/hart

#要点
1. クラスを特定しない状況下でのトラッキングモデルである
2. 大脳皮質を真似て「どこ」と「なに」を判断する流れを分けることで不必要な特徴量を排除した（階層的注目点再帰モデル）
3. 具体的にはattention層で注目点以外のバックグラウンドの情報を捨て、その後の層で対象物体に限定した特徴量を調整する

#モデルのアーキテクチャ
モデルの全体像は以下のような感じ。

<img width="767" alt="スクリーンショット 2018-01-02 16.41.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/116706/157d59fc-17d3-4e29-3459-7363233864aa.png">
【図１　全体的な流れ 論文P3のFigure 2より】

###全体的な流れ
図１で、まず画像 $x_t$ を入力し、Spatial Attention のしくみにより $g_t$ を得る。これを V1 ＆ Ventral Stream に送り特徴量 $\nu_t$ を得る。一方 Dorsal Stream では対象物体か否かをセグメントする $s_t$ を出力する。この $\nu_t$ と $s_t$ とのHadamard 積から masked featuresである $v_t$ を求める。これをLSTMに入力することで出力 $o_t$ を得る。$o_t$ と $s_t$ をMLP（全結合層）に入力して attention $a_{t+1}$ 、appearance $\alpha_{t+1}$ 、矩形の集合 $\Delta \hat{b}_t$ を求める。

図１において実線は同時刻の流れ、破線は１時刻経た流れである。以下、それぞれのパーツごとに見ていく。

###Spatial Attention
まず入力画像を $\bf{x}_t \in \mathbb{R} ^{H \times W}$ とする。

これに対して行列 $\bf{A}_t^x \in \mathbb{R} ^{w \times W} $ と  $\bf{A}_t^y \in \mathbb{R} ^{h \times H} $ を作成する。これら行列の各行は Gaussian となっている。

出力 $\bf{g}_t \in \mathbb{R} ^{h \times w}$ は

```math
\bf{g}_t = \bf{A} ^y_t x_t (A^x_t)^T
```

となる。具体的に $\bf{A}^x_t$ などの作成方法は以下。

図１でt時刻におけるLSTMからMLPを経た出力 $\bf{a} _{t+1}$ が t+1 時刻におけるspacial attention の情報を保持している。

具体的には $\bf{A}^x_t$ などの各行における Gaussian の平均やstrideである。これによって

```math
A _t^X[i,a]=\exp(-\frac{(a-\mu ^i_X)^2}{2\sigma ^2})
```

みたいな感じで作成する。ここで分散 $\sigma$ はよくわからんが、strideとの関係を事前に線形回帰で求めておくみたい？以下の図１−２において<font color="Green">緑の矩形</font>は $g_t$ 、<font color="Red">赤の矩形</font>は予測した対象物体の矩形、<font color="Blue">青の矩形</font>は ground-truth。

<img width="710" alt="スクリーンショット 2018-01-03 17.17.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/116706/f90929af-2306-7173-71f6-446d48784568.png">
【図１−２　モデルの出力の例　論文P2のFigure 1より】

glimpse $g_t$ がより大局的に捉えられている。

###Appearance Attention
このステージは以下の図２のようになる。
<img width="303" alt="スクリーンショット 2018-01-02 16.41.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/116706/34849a64-fe05-f66a-bcb2-825fee0fd836.png">
【図２　Appearance Attentionの模式図 論文P4のFigure 3より】

これは以下のような脳の視覚野を模している。
![cortex01s2.png](https://qiita-image-store.s3.amazonaws.com/0/116706/745e984e-fee0-c9ed-907d-5aa8a27ec0ce.png)
【図３　視覚野　wikipediaから引用】

glimpse $g_t$ は V1（Shaerd CNN）に送られる。図３では後頭部の灰色の部分。ここでは以下のようにCNNで畳み込まれる。

```math
\mathbb{R} ^{h \times w} \to \mathbb{R} ^{h_{v} \times w_{v} \times c_{v}}
```


次に二手に分かれて、一方はDFN（dorsal stream：図３では緑色の経路）、もう一方はCNN（ventral stream：図３では紫色の経路）へと進む。

ventral stream ではCNNで画像の特徴量 $\nu _t$ を抽出する。

一方、dorsal stream では空間的な関係を処理する。それぞれの領域が追跡している対象物体であるか否かを Bernoulli 分布 $s_t$ で出力する。

この時使う畳み込みのフィルターはLSTM→MLPからのt時刻の出力 $\alpha _{t}$ を用いて

```math
\Psi _t=(\psi _t^{a_i \times b_i \times c_i \times d_i})^K_{i=1}=MLP(\alpha_t)
```

として求める。MLPは全結合層。

$\nu _t$ と $s_t$ から $v_t$ を以下のように求める。

```math
v_t = MLP(vec(\nu_t \odot s_t))
```

$\odot$ はHadamard積。

###State Estimation
言うまでもなく、目的は過去の状態や推定した矩形情報、及び現在の画像情報から現在の矩形の位置を求めることだ。

過去の状態はLSTMの hidden state に担わせる。

```math
o_t, h_t = LSTM(v_t, h_{t-1})
```

この $o_t$ とdorsal stream からの出力 $s_t$ を用いて現時刻の対象物体の矩形 $\hat{b}_t$ と次時刻の $\alpha _{t+1}$ 等は以下で求める。

```math
\alpha _{t+1}, \Delta a_{t+1}, \Delta \hat{b}_t = MLP(o_t, vec(s_t))\\
a_{t+1}=a_t + tanh(c)\Delta a_{t+1}\\
\hat{b}_t=a_t + \Delta \hat{b}_t
```

#Lossの計算
まずLoss全体 $L_{HART}$ は以下。

```math
L_{HART}(D,\theta)=\lambda _t L_t(D, \theta)+\lambda _s L_s(D, \theta)+\lambda _a L_a(D, \theta)+R(\lambda)+\beta R(D,\theta)
```
 
$\theta$ はネットワークのパラメータ。R（・）は正則化項。Dはデータセットで

```math
D=(({\bf{x}}_{1:T},{\bf{b}}_{1:T})^i )^M_{i=1}
```

と M 個のビデオデータの中にそれぞれ T 系列の画像がある。次に各項の詳細。
###TrackingのLoss
IoUを

```math
IoU(a,b)=\frac{a \cap b}{a \cup b}=\frac{area \ of \ overlap}{area \ of \ union}
```

として、

```math
L_t=(D,\theta)={\mathbb{E}}_{p(\hat{b}_{1:T}|{\bf{x}}_{1:T},b_1)}(-\log IoU({\hat{b}}_t,b_t))
```

つまりIoUのnegative logに対する全データ・全系列に渡る平均。$b_t$ は対象物体の実際の矩形。

###Spatial Attention の Loss
$L_t$ だけだと以下のような問題点がある。例えば、 $t=t$ で対象物体が途中でほとんど隠れてしまう場合、MLPからの出力は ${\Delta}{\hat{b}_t}$ がほぼ領域なし。

$a_{t+1}$ もほぼ領域なし、となるだろう。

そうすると、この $a_{t+1}$ が $t=t+1$ でfeed backされて glimpseの推定に使われるので、その後の矩形の推定が困難になるだろう。

そこで $a_t$ が ${\hat{b}}_t$ を大局的に拾えるような演算をLossに加える。

```math
L_s (D,\theta)={\mathbb{E}}_{p(a_1:T|{\bf{x}}_1:T,b_1)}\left[ -{\log} \left(\frac{a_t \cap b_t}{area(b_t)} \right) - \log \left( 1-IoU(a_t, x_t) \right) \right]
```

第１項において $a_t$ は $b_t$ を含んでいれば任意の大きさでよくなるが、第２項目で大きくなりすぎないように制約している。

これによって、 $a_t$ は $b_t$ が小さい時でもそれを包含する適度な大きさになるということか？？？

###Appearance Attention の Loss
これに関してはイマイチ理解してないが、とにかく appearance attention を対象物体だけ捉えるマスクとなるように以下の Loss を加える。

```math
L_a (D, \theta)={\mathbb{E}}_{p(a_1:T,s_1:T|{\bf{x}}_1:T,b_1)} [H(\tau (a_t,b_t),s_t)]
```

ここで $H$ は交差エントロピー、$\tau$ は $\tau (a_t,b_t) : {\mathbb{R}}^4 \times {\mathbb{R}}^4 \to (0,1) ^{h_v \times w_v}$ となる写像。

###正則化項
L2ノルムで正則化する。

```math
R(D,\theta)=\frac{1}{2}\| \theta \|^2_2 + \frac{1}{2}\| {\mathbb{E}}_{p(\alpha _1:T,s_1:T|{\bf{x}}_{1:T},b_1)} \|^2_2
```

###Adaptive Loss Weights
ハイパー・パラメータの調整を避けるため以下の正則化も加える。

```math
R(\lambda)=-\sum _i \log (\lambda^{-1}_i)
```