MaskFormer에서는 Pixel Decoder가 CNN 기반의 Segmentation 모델(ASPP + FPN)인데, Mask2Former에서는 이걸 Deformable DETR을 대신 사용하였습니다.
또한, Transformer Decoder의 경우 DETR을 사용하였는데, Mask2Former에서는 Origianl Transformer의 Decoder를 그대로 사용합니다. 여기서 Mask를 생성하는 주요 부분은 Masked Attention 부분이라고 볼 수 있습니다.
그 외의 부분은 MaskFormer와 매우 유사합니다.
또한, Mask2Former에서는 Efficient Matching 기법을 사용해서 GPU Memory의 사용량을 18GB -> 6GB로, 1/3로 줄일 수 있었습니다.
Efficient Matching 기법은 학습 시 모든 픽셀에 대해서 Segmentation Loss를 뽑는 것이 아니라,
학습시에 모든 마스크에서 공유할 coordinate를 랜덤으로 K(122*122 = 12544)개를 뽑습니다.
그리고 K개의 픽셀에 대해서만 loss를 구해서 전파하게 됩니다.
이는 Point Rend와 Implicit Point Rend의 개념으로부터 출발하였는데요.
Point Rend에서는 Adaptive Subdivision을 사용해서 특징 정보를 추출할 포인트들을 구합니다.
예를 들어서, 오브젝트의 Boundary를 찾는 작업을 진행 한다고 가정하겠습니다.
가장 먼저 Object의 BBOX를 검출
여기서 오브젝트의 boundary로 예측되는 point들을 찾습니다.(Adaptive Subdivision을 사용)
2.1 Adaptive Subdivision은 제가 이해하기로는, 물체의 boundary는 uncertainty가 높기 때문에,
pixel wise binary classification 결과가 0.5와 유사할 것이므로, 0.5와 유사한 얘들을 boudnary라고 가정하는 기법입니다.
각각의 point들을 upsampling한 다음에, 다시 object의 boundary가 있을 법한 부분들을 adaptive하게 찾습니다.
Loss 계산시, 전체 픽셀이 아닌 예측된 point들에 대해서만 Loss를 계산.
이렇게 boundary 근처의 특징 정보들만 추출하면, 학습이 더 잘 된다고 합니다.
하지만, 이 논문에서는 연산량을 줄이기 위한 목적으로 접근하였기 때문에, 중요한 특징정보들로부터 Loss를 구하는 것이 아니라
단순하게 Random Pixel들로부터 Loss를 계산합니다.(Loss는 각 계층 디코더의 출력값으로부터 Auxiliary Loss를 사용합니다.)
이렇게 만들어진 Mask2Former는 매우 좋은 성능을 보여줍니다.
결론 : Transformer is All you Need....
Appendix : SeMask
Pre Training -> Fine Tunning이 좋은 학습 전략인건 맞습니다.
하지만, 일반적인 CNN과는 다르게 Transformer의 경우에는 조금 아쉬운 성능을 보여주게 됩니다.
이는 domain adaptation 과정에서 weight들이 semantic 정보를 제대로 학습하지 못하는 문제라고 볼 수 있습니다.
일반적인 CNN 기반의 Segmentation 모델들은 Encoder와 Decoder로 나뉘어져 있어서,
Encoder가 딱히 Semantic 정보를 학습하지 않아도, Decoder들이 Semantic 정보를 학습할 수가 있었습니다.
ex .. Unet
하지만, Transformer 기반의 모델(ex: SETR)에서는 한 두개의 Layer만으로 Segmentation들을 진행하기 때문에, Semantic 정보를 학습할만한 Layer들이 존재하지가 않습니다.
그렇기 때문에, Fine Tunning을 하게 된다면 Semantic 정보를 학습할 수 있는 추가적인 Layer들을 넣어줘야 한다는 얘기입니다.
ex... SETR
SeMask에서 사용하는 Attention Block은, Query를 쟁여두고, Q,K,V 끼리 Self Attention을 진행하는 연산입니다.
SeMask의 전체 구조입니다.
보시게 되면, Transformer Layer 사이사이에 Semantic Layer들을 삽입합니다.
Semantic Layer는
Q
Q,K,V의 Self Attention된 값
두개를 내뱉게 됩니다.
Q 같은 경우에는 Transformer Layer에 Linear Embedding된 결과물이 Mask를 예측하도록 학습이 되고,
Q,K,V의 Self Attention된 값은 Convolution Block을 지나면서 Mask를 예측하도록 학습이 진행됩니다.
그러니까 좀 더 자세히 풀어쓰자면, 단순히 Q,K,V의 Self Attention을 통해서 Semantic 정보를 학습하게 되면 기존의 Transformer Layer들이 Semantic 정보를 학습하도록 Fine Tunning 되었다고 볼 수 없으니, 이를 강제하기 위해서, Transformer Layer의 출력값을 임베딩한게 mask를 추론하도록 함으로써 Transformer Layer가 Semantic 정보를 학습하도록 강제하고, 이렇게 학습이 완료된 후에는 Semantic Layer를 통해서 추론하도록 진행하는 것입니다.
Mask2Former는 MaskFormer의 후속 논문으로서, Mask를 이용해 Segmentation Task들에서 Sota를 찍었습니다.
2022년 2월 기준, ADE20K 상위 성능 10위 모델 중 6개가 MaskFormer입니다.
일반적인 Segmentation에 비해서, Mask를 이용한 Segmentation 모델들은 다음과 같은 장점들을 가질 수 있습니다.
픽셀 단위로 클래스를 예측 하는게 아니라, Mask(일종의 Contour)단위로 Instance들을 학습하게 됩니다. 이는 픽셀 단위의 FP, FN같은 오차들을 줄일 수 있음을 의미합니다.
Mask2Former의 전체적인 구조는 다음과 같습니다.
Mask2Former는 Pixel Decoder와 Transformer Decoder로 구성됩니다. Pixel Decoder는 픽셀별 분류를 진행하고, Transformer Decoder에서는 마스크별 클래스 분류를 진행합니다.
MaskFormer에서는 Pixel Decoder가 CNN 기반의 Segmentation 모델(ASPP + FPN)인데, Mask2Former에서는 이걸 Deformable DETR을 대신 사용하였습니다.
또한, Transformer Decoder의 경우 DETR을 사용하였는데, Mask2Former에서는 Origianl Transformer의 Decoder를 그대로 사용합니다. 여기서 Mask를 생성하는 주요 부분은 Masked Attention 부분이라고 볼 수 있습니다.
그 외의 부분은 MaskFormer와 매우 유사합니다.
또한, Mask2Former에서는 Efficient Matching 기법을 사용해서 GPU Memory의 사용량을 18GB -> 6GB로, 1/3로 줄일 수 있었습니다.
Efficient Matching 기법은 학습 시 모든 픽셀에 대해서 Segmentation Loss를 뽑는 것이 아니라, 학습시에 모든 마스크에서 공유할 coordinate를 랜덤으로 K(122*122 = 12544)개를 뽑습니다.
그리고 K개의 픽셀에 대해서만 loss를 구해서 전파하게 됩니다.
이는 Point Rend와 Implicit Point Rend의 개념으로부터 출발하였는데요. Point Rend에서는 Adaptive Subdivision을 사용해서 특징 정보를 추출할 포인트들을 구합니다. 예를 들어서, 오브젝트의 Boundary를 찾는 작업을 진행 한다고 가정하겠습니다.
이렇게 boundary 근처의 특징 정보들만 추출하면, 학습이 더 잘 된다고 합니다. 하지만, 이 논문에서는 연산량을 줄이기 위한 목적으로 접근하였기 때문에, 중요한 특징정보들로부터 Loss를 구하는 것이 아니라 단순하게 Random Pixel들로부터 Loss를 계산합니다.(Loss는 각 계층 디코더의 출력값으로부터 Auxiliary Loss를 사용합니다.)
이렇게 만들어진 Mask2Former는 매우 좋은 성능을 보여줍니다.
결론 : Transformer is All you Need....
Appendix : SeMask Pre Training -> Fine Tunning이 좋은 학습 전략인건 맞습니다. 하지만, 일반적인 CNN과는 다르게 Transformer의 경우에는 조금 아쉬운 성능을 보여주게 됩니다.
이는 domain adaptation 과정에서 weight들이 semantic 정보를 제대로 학습하지 못하는 문제라고 볼 수 있습니다.
일반적인 CNN 기반의 Segmentation 모델들은 Encoder와 Decoder로 나뉘어져 있어서, Encoder가 딱히 Semantic 정보를 학습하지 않아도, Decoder들이 Semantic 정보를 학습할 수가 있었습니다. ex .. Unet
하지만, Transformer 기반의 모델(ex: SETR)에서는 한 두개의 Layer만으로 Segmentation들을 진행하기 때문에, Semantic 정보를 학습할만한 Layer들이 존재하지가 않습니다. 그렇기 때문에, Fine Tunning을 하게 된다면 Semantic 정보를 학습할 수 있는 추가적인 Layer들을 넣어줘야 한다는 얘기입니다. ex... SETR
SeMask에서 사용하는 Attention Block은, Query를 쟁여두고, Q,K,V 끼리 Self Attention을 진행하는 연산입니다.
SeMask의 전체 구조입니다. 보시게 되면, Transformer Layer 사이사이에 Semantic Layer들을 삽입합니다. Semantic Layer는
그러니까 좀 더 자세히 풀어쓰자면, 단순히 Q,K,V의 Self Attention을 통해서 Semantic 정보를 학습하게 되면 기존의 Transformer Layer들이 Semantic 정보를 학습하도록 Fine Tunning 되었다고 볼 수 없으니, 이를 강제하기 위해서, Transformer Layer의 출력값을 임베딩한게 mask를 추론하도록 함으로써 Transformer Layer가 Semantic 정보를 학습하도록 강제하고, 이렇게 학습이 완료된 후에는 Semantic Layer를 통해서 추론하도록 진행하는 것입니다.
자세한 테크닉들은 준비시간이 부족해서 못 넣었습니다. 즐겁게 논문 보시길!