TransformerとDETRについて説明します!

皆さん、「AI」という単語を耳にすることが最近増えてきたのではないかと思います。しかし、その仕組みについて知りたいと感じても、「私には難しそう...」と敬遠してしまっている方も多いのではないでしょうか?

ここではAIの技術である、「Transformer」と「DETR」について説明していきたいと思います!

Transformerとは

Transformerとは、RNNやCNNを使わずにAttentionのみを用いたモデルです。このことによって

  • 翻訳で今までより高いスコアを叩き出した
  • 並列化がしやすく、学習時間が削減された
  • 汎用性が高い

という特徴を持っています

Transformerのモデルの構造

Transformerは大枠が①エンコーダ・デコーダモデルで②Attentionと③Position-wise Feed-Forward Networkが組み込まれています。

下図はTransformerの全体像です。

①エンコーダ・デコーダモデル

翻訳などのようなある文章を他の文章に変換するモデルでよく使用されます。

上図では、左半分がエンコーダ、右半分がデコーダを表しています。

・エンコーダ

エンコーダはN=6個の同一の層で構成されています。各層には、Multi-Head Attention層とPosition-wise Feed-Forward Network層の2つのサブ層があります。それぞれのサブ層の後には残差接続が採用されており、層の正規化が行われている。

・デコーダ

デコーダもN=6個の同一の層で構成されています。各層にはエンコーダの2つのサブ層に加えて、エンコーダの出力を受け取るMulti−Head Attention層があります。エンコーダと同様にそれぞれのサブ層は残差接続によって正規化されています。最初のMulti-Head Attentionはmaskingされており、まだ出力されていないものを参照しないようにしています。

Attention層

Attentionとは、文中のある単語の意味を理解するときに、文中の単語のどれに注目すればよいかを表すスコアのことです。

AttentionはQueryとKey、Valueの3つのベクトルで計算されます。

Attention関数の出力はValueの加重和で計算され、各Valueの重みはQueryとKeyによって計算されます。

Position-wise Feed Forward Network層

Position-wise Feed Forward Network層はエンコーダ及びデコーダの各層に含まれており、ReLUを挟んだ2つの線形変換で構成されています。

論文:Attention Is All You Need

DETRとは

DETR(DEtection with TRnsformers)はCNN+Transformerのシンプルな構成でEnd to Endな物体検出を実現しました。

下図ではDETRの流れを示しました。

  1. CNN出力のマップを、1x1 convolutionでdチャネルに圧縮する
  2. Transformer encoderに、サイズH∗Wの特徴マップd個を、H∗W個のd次元特徴として入力する
  3. Transformer encoderは、H∗W個の中間オブジェクト特徴(各d次元)を出力する
  4. Transformer decoderへ、H∗W個の中間オブジェクト特徴とN個のobject queryを入力する
  5. Transformer decoderは、N個のオブジェクト特徴(各d次元)を出力する
  6. N個のオブジェクト特徴それぞれをFFN (Feed Forward Network) へ通して、N個のオブジェクト推論結果(クラス、矩形)が出てくる

encoderへの入力は、d個の特徴マップの各画素をチャネル方向に結合したもの(H∗W個のd次元特徴)が入ります。出力も同じ形(H∗W個のd次元特徴)です。

decoderへの入力は、encoderの出力に加え、N個のd次元のobject query(=learnt positional encoding)が入ります。このobject queryはネットワーク重みと同様の学習パラメータであり、学習して決まるパラメータです。このように機械翻訳タスクと違って、decoder入力(=N個のobject query)を事前に用意できるため、N個の推論すべてを同時に走らせることが可能です。(parallel decoding)

またpositional encoding(=object queryとspatial positional encoding)を1層目だけでなく各層で使用するようにしており、さらに上図のようにobject query(学習値)とspatial positional encoding(固定値)の両方を場所毎に使い分けることで精度を上げています。

論文:End-to-End Object Detection with Transformers