ECCV 2020 DETR:《End-to-End Object Detection with Transformers》論文筆記

簡介

本文出自FaceBook AI,方法很新穎,不一樣於已有的R-CNN一系列,也不一樣於Yolo一系列,也不一樣於FCOS、CenterNet等最新的Anchor Free模型。做者將目標檢測視爲direct set prediction problem(直接集預測)。
下載連接
本篇博客的部份內容參考自這裏html

動機

simplify pipelines.python

貢獻

本文將Transformer融入目標檢測的pipeline,實現了真正的No Anchor。實驗結果上,可以超過精調的Faster R-CNN。web

方法

方法的總體架構以下圖所示。

更爲具體的結構圖以下圖所示。其實就三個部分:backbone、transformer (encoder + decoder)、prediction heads。其中,backbone就是傳統的CNN結構,用於提取圖像的2D信息。encoder和decoder一會再說。prediction heads用於對decoder的輸出進行分類。

下面說encoder和decoder。下圖是更加清晰的encoder和decoder結構,來自原文的附錄。這裏比較有意思的是Object queries,我一直也沒太理解它的直觀意思,下面說一下個人大體理解。從做者的代碼中,可以看出,所謂的Object queries實際上是一個大小爲 100 × 2 × 256 100 \times 2 \times 256 的變量,並且是經過訓練肯定的!這裏的100是個超參數,表示對於每張圖片,預測100個bboxes。設爲100的緣由是,數據集中有90個類別,100恰好合適。

有兩點值得注意的 1. 和NLP中的transformer不太同樣,DETR中在decoder部分將Object queries一塊兒做爲輸入,而非序列化地一個一個輸入。2. 只用image features進行編碼是不夠的,須要融入位置信息,也就是上圖中的Spatial positional encoding部分。這部分我沒具體看,代碼裏是這樣的,有興趣的能夠分析一下。架構

# spatial positional encoding
def forward(self, tensor_list: NestedTensor):
        x = tensor_list.tensors
        mask = tensor_list.mask
        assert mask is not None
        not_mask = ~mask
        y_embed = not_mask.cumsum(1, dtype=torch.float32)
        x_embed = not_mask.cumsum(2, dtype=torch.float32)
        if self.normalize:
            eps = 1e-6
            y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale
            x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale

        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)
        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)

        pos_x = x_embed[:, :, :, None] / dim_t
        pos_y = y_embed[:, :, :, None] / dim_t
        pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3)
        pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3)
        pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2)
        return pos

實驗

下圖是在COCO上的實驗結果,主要和Faster R-CNN進行了對比。
app