[論文備忘録] Deformable DETR: Deformable Transformers for End-to-End Object Detection, 2020

[Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159)

一般的なmulti head attentionは次のように表すことができる:

![Deformable DETR- Deformable Transformers for End-to-End Object Detection….png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/c8c91a0a-1dcc-5104-45bd-be67605caf14.png)
(注: Q, K, Vのうち、KとVは同じ値とみなしている。そのため上式のx_kはx_v)
ここで、
qはクエリ(Q)のインデックス
z_qはクエリの特徴ベクトル
kはキー(K)のインデックス
x_kはキーの特徴ベクトル
Mはヘッドの数

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/e588efd0-144c-352b-f74d-8fbc619a0eb8.png)

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/a4be8a43-0c61-fbec-2052-3bf4f09b8014.png)

Attention weights:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/d266fc46-c248-cc06-49e2-7a0227b0db18.png)

これは次のように正規化される

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/03aa32d4-29e5-28ae-a777-6865d49db89a.png)

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/3e192017-d537-52d3-361f-0f90e9aa54fd.png)

**Deformable Attention Module**

通常のattentionはK, Vの画像をすべて見るので、高解像度の（HWが大きい）画像を扱おうとすると計算量が大きくなりすぎる。
そこで、リファレンスポイント(p_q)周辺の少数のキーポイント(K)だけを見るようなDeformable attentionを提案する。

Deformable attentionは次のように計算する:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/68939fd1-e1f9-853d-74de-1639fa8f663a.png)

ここで、

xはVに相当する入力の特徴マップ:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/7fec9f86-d316-4002-6aa9-30dec75f59d2.png)

A_mqkはattention weightsに相当し、範囲は[0, 1]で、次のように正規化される:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/94f81613-d00f-23b9-2663-35840357e1fc.png)

△p_mqkは二次元の実数値で、範囲に制限はない:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/737d0761-4296-5220-4016-56eaada96e83.png)

△p_mqkおよびA_mqkは、z_qをlinear projectionして得る。（チャネル数は2MKとMK）

(注: もともとのAttentionではA_mqkはQとKから計算されていたが、Deformable attentionではQからA_mqkが計算される)

**Multi-scale Deformable Attention Module**

Deformable attention moduleは自然にマルチスケールの特徴マップに拡張できる:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/7e339891-0fdc-89e1-66af-434cb4ec47d4.png)

マルチスケールの特徴マップは、lを特徴階層のインデックスとして、次のように表す:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/72e243d3-b345-44b2-719d-018aee93e45e.png)

ここで、
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/a7dd2274-eb9b-f10c-7681-f3bc36f3bc7d.png)


また、クエリqごとの正規化されたリファレンスポイントは:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/63626233-2966-e813-29d3-082ec885111b.png)

正規化されたp^_qは、次の関数でl-th levelの入力マップの座標に再スケールされる:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/158beb64-c4e1-5424-6b99-7a938d650313.png)

scalar attention weightは次のように正規化される:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/26150fc0-2b67-3919-e3ad-a68f70799cb0.png)

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/55ab865a-76ac-9532-c588-693c9fb8396f.png)

**Deformable Transformer Encoder**

DETRのencoderモジュールをmulti-scale deformable attentionモジュールで置き換える。

インプットとアウトプットの双方が同じ解像度でマルチスケールの特徴マップとなる。

入力のマルチスケール特徴マップは、バックボーンのResNetからC_3からC_5を1x1 convで抽出して、l=4についてはC_5に3x3 stride 2のconvを繋げて得る:
![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/adc5893c-3acf-66d2-50ba-012c7ed45dce.png)

バックボーンにFPNは繋げていない。
これは、FPNがなくてもdeformable attentionが異なる解像度の情報をやり取りできるため。

クエリの各ピクセルについて、リファレンスポイントは自分自身。
ピクセルがどのスケールに属するか表すため、positional encodingに加えてscale level encodingも加える。

**Deformable Transformer Decoder**

self attentionについてはDETRのまま。
cross attentionはmulti-scale deformable attentionで置き換える。

各オブジェクトクエリについて、リファレンスポイントp^は、オブジェクトクエリの特徴ベクトルを学習可能な線形変換とシグモイド関数に与えて得る。

detection headが推定するバウンディングボックスの座標はリファレンスポイントからの相対的なオフセットとする。（リファレンスポイントをバウンディングボックスの中心座標のinitial guessとする）
これによって学習の難しさを下げ、収束が早くなる。

![Deformable DETR- Deformable Transformers for End-to-End Object Detection…-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1303/482bc8b1-9ece-c0ba-8681-a33e4895a516.png)