# OneFormer: One Transformer to Rule Universal Image Segmentation (CVPR 2023) * **論文:** https://arxiv.org/abs/2211.06220 * **主要特點:** 1. 提出一個真正統一的架構,可用於Semantic、Instance、Panoptic三種任務上,而不是像MaskFormer和Mask2Former,需要使用不同task的dataset去訓練一個model。(簡單來說就是不同的task就需要重新train一個model,雖然那個model整體架構不需要改變) ![image](https://hackmd.io/_uploads/Sk5dD-IS6.png) 2. 使用文字的方式讓網路知道目前是甚麼task [Semantic、Instance、Panoptic] 3. ==加入Contrastive Loss始Object query學會關注目前任務需要關注的地方== 4. ==在訓練時可以同時訓練3種task== * **方法:** 1. ++網路架構:++ 整體概念一樣延續了Mask2Former的架構,主要是加上了左下角的的一個Module ![image](https://hackmd.io/_uploads/Hyx2_ZIrp.png) --- 2. ++Unified Task-Conditioned module:++ 這個module輸入主要有兩個部分,且可以先將這個module拆成紅色區塊和藍色區塊。 ![image](https://hackmd.io/_uploads/Syv2jmvHa.png) :::info **藍色區塊:** 其中$task\in Semantic、Instance、Panoptic$,==在訓練時會隨機選擇現在要訓練怎樣的task,再依照選定的task去取得對應的text(紅色區塊的輸入)==。 選擇完後會經過一個MLP產生$Q_{task}$(可以大概猜到這個的功用是為了讓model知道現在是甚麼樣的task),再跟一個Transformer去產生一個長度為$(N-1)$的query。 這邊一開始看的時候會有點奇怪,因為這個Transformer的query應該是$Q_{task}$,key和value應該是從scale為$\frac{1}{4}$ 的feature那邊拿來的,但是這樣的話是無法輸出長度為$(N-1)$的query。 而論文在這邊其實是有==對$Q_{task}$做repeat的一個操作,讓$Q_{task}$重複$(N-1)$遍==,之後再利用Transformer去refine這個$Q_{task}$,再去跟原本的$Q_{task}$去stack成長度為$(N)$的query。 ::: :::danger **紅色區塊:** text的產生如下: ![image](https://hackmd.io/_uploads/HJcBRW8S6.png) 可以依照剛剛選到的任務產生不同的text,主要都是由==a photo with a CLS==所組成。 而因為每張圖片的class數量都不同,所以會有一個padding的動作,但是這邊==有別於傳統填充空的token,這邊是依照task,在後面填充a/an TASK photo==,使其長度為$N$。 之後這些text會經過Text Mapper embedding成 $Q_{text}$ 後去與 $Q$ 計算Contrastive Loss。 即希望原本Transformer和MLP認為的object query盡量像理想的object query。還有 希望MLP那邊能夠依照不同的task,從Backbone那邊產生出的feature提取出比較重要的feature ![image](https://hackmd.io/_uploads/rJbyBzUH6.png) Text Mapper: 下面是Text Mapper的架構,在inference時可以把這個module拔除 ![image](https://hackmd.io/_uploads/HyFDfz8S6.png) 其中: * $T_{pad}$ 是剛剛的text(padding後的) * $Text Tokenizer$是embedding layer * $Text Encoder$ 是transformer encoder * $N_{test}$ 是transformer encoder的輸出 * ==$Q_{ctx}$是可學習的參數,作者說這樣的話模型能夠學習通用的特徵(懷疑)== * **結果:** 1. ++Ablation Study++ 下圖展示了移除$Q_{text}$、$Q_{ctx}$、還有不將$Q_{task}$進行refine後的效果 ![image](https://hackmd.io/_uploads/HJZDJEDr6.png) 下圖展示了不使用Contrastive Loss和對$Q$利用一般的Class Loss得出的結果 ![image](https://hackmd.io/_uploads/BktIWNDHT.png) 下圖展示了使用不同的文本描述會讓模型表現怎麼樣 ![image](https://hackmd.io/_uploads/HJNcW4DB6.png) 2. ++效果++ ![image](https://hackmd.io/_uploads/B19nW4DH6.png)