まえがき
本記事は、最近勉強したDETRを書き残す。
初学者なので、間違いもあるかも。
DETRとは?
DETRとは、2020年に発表された新しい物体検出手法です。
論文: ■
コード:■
特徴としては、
- End-To-Endで検出
- transformerが物体検出デビュー
End-To-Endで検出
従来、物体検出では、NMS(non-maximal suppression)といった後処理をする必要がありました。
というのも、写真のように複数領域が検出されるため、もっともらしいものを選択する必要があります。
(NMSに関してはこのサイトがわかりやすかったです。)
そのため、従来手法では
①入力画像から物体領域候補を検出
②複数の物体領域候補からもっともなものを選択
というように2ステップ踏んで最終的な領域を検出していました。
一方で、DETRでは「入力画像から最終領域を検出」をワンパスで検出することができます。
transformerが物体検出デビュー
transformerとは、Attention Is All You Needという論文で発表されたCNNやRNNを使わないNueralNetworkです。
自然言語処理の分野で発展してきた手法で、BertやGPT-3といったモデルで利用され、色々なタスクで大幅な精度向上を達成しました。
特徴的なのは、論文のタイトルにもなっている「Attention」というレイヤーです。従来、RNNやCNNを使って各要素の関係性を抽出していましたが、ここでは「Attention」を使ってその関係性を抽出します。RNNように逐次実行せず、一気に行列計算ができるので、並列化しやすくなっています。
(このサイトの説明がわかりやすい)
構成
詳しい説明はしませんが、構成は図の通りでそれぞれの機能の意味として下記の感じかなと思っています。
- backbone
- 画像から特徴量の抽出
- transformer
- 関連性を加味した値を出力
- FFN
- 物体検出(ボックスの検出)
また、Loss計算も工夫をしていて、1対1で対応する集合を予測するために、ハンガリアン法を使っています。従来だと、例えば画像に検出したい物体が複数体いたとしたらそれぞれに対して独立して検出をしてそれぞれの結果でLoss計算をすると思います。ここではそれに加えて、集合としての対応関係のLoss計算(bipartite matching loss)も加味しています。
したがって、予め検出数を与えて、検出する物体がいなければ「no object」が割り当てられます。例えば、検出数が5で、画像上には検出できる鳥が2体いて正しく検出できれば、2個の箱に鳥の情報が入り、他の3つには「no object」が入ります。
この論文では後半では、Transformerの各レイヤーがどのような寄与をしているかパラメータを色々変えて実験をしています。
その内容も面白いのですが、それと加えて、Transformerを構成している、EncoderのSelf-AttentionとDecoderのSelf-Attentionを可視化してこのモデルがどこに注目しているのか見られるのも面白いと感じました。
EncoderのSelf-Attention
ここで各動物を捉えていて、それぞれ領域がまとまりが可視化されていますね。
DecoderのSelf-Attention
Decoder側では、ボックスを検出するのに必要な境界部分を求めていそうです。象やシマウマをよく見てみると動物と矩形の接点が色づいています。(Attentionでの可視化領域)
最後に
Attentionで可視化できるとモデルがどこに着目しているのかわかるので面白かったです。
もっと詳しく知りたい人は論文かこの記事がまとめられているなと感じたので読んでみてください。