gusdlf93 / Paper_Survey

4 stars 1 forks source link

[2021 arxiv] Masked Autoencoders Are Scalable Vision Learners #6

Open gusdlf93 opened 2 years ago

gusdlf93 commented 2 years ago

댓글에 MAE 파라미터 계산기와, 발표자료가 있습니다.

본 논문에서느 MAE(Masked AutoEncoder)를 사용한 Scalable Self-Supervised Learning을 제안합니다.

Contribution

  1. Asymmetric Encoder-Decoder Architecture (Encoder에서는 Mask Token을 사용하지 않고, Decoder에서는 Mask Token을 사용합니다.)
  2. 입력 이미지에서 높은 비율을 패치 단위로 마스킹하면(약 75%), self-supervised task에 많은 도움이 된다는 것입니다.

접근 방법은 BERT나 GPT와 유사합니다. 시퀀스 데이터에 랜덤하게 마스크를 씌운 뒤에, 마스크가 씌워진 데이터의 정보를 예측하도록 학습이 진행되게 됩니다. 하지만 이는 언어에서는 좋은 성능을 보여주지만, 시각적인 정보들을 다루는 도메인에서는 그렇게 좋은 성능을 보여주지 못한다고 알려져 있는데, 그 원인은 3가지로 분류할 수 있습니다.

첫번째 원인은 아키텍처에 있습니다. Vision을 다루는 도메인들에서는 대부분 CNN을 사용해서 학습을 진행해 왔습니다. 하지만 CNN은 grid에서 작동하는데 이러한 구조들은 Mask Token이나 Positional Embedding과 같은 'indicator'들을 네크워크에 녹여내는 것이 매우 어려웠습니다. 하지만, VIT 이후로 이러한 문제는 해결되었습니다.

두 번째 원인은 정보량에 있습니다. 언어와 시각 정보는 각기 정보량이 다른데, 언어는 Sequential이 매우 중요합니다. 이 Sequence라는 것은 언어가 가진 의미론적 정보로, 정보량의 밀도가 매우 높은 사람이 생성하는 신호입니다. 그러므로, 누락된 한 두개의 단어만으로도 문장의 의미는 크게 달라지게 됩니다. 하지만, 이미지의 경우에는 하나의 픽셀의 주변 픽셀들과 큰 상관관계가 있으므로, 각각의 공간들을 서로 많은 중복된 정보들을 포함하고 있습니다. 이는, 누락된 정보를 복원하기가 상대적으로 쉬우며, 학습 시 마스킹을 매우 높은 비율로 적용해야 함을 의미합니다. 이를 통해 이미지의 중복된 정보를 제거하고, 학습과정에서 얻어야 하는 것들이, low-level image statistic을 넘어, 이미지의 전체적인 부분들을 학습하도록 학습을 강제합니다. ->이 부분은 자칫 잘못하면, 전체적인 부분들을 학습하도록 강제하는 것이 아니라, 외워버릴 수도 있지 않을까요?

세 번째 원인은 디코더의 역할입니다. 오토인코더의 디코더는 텍스트에서의 역할과 이미지에서의 역할이 다릅니다. vision 도메인에서 디코더는 픽셀을 재구성하므로, 각각의 출력은 일반적인 인식작업에서 사용되는 '의미'로서의 수준이 낮습니다. 이는 디코더가 풍부한 의미 정보를 포함하는 언어와는 대조됩니다. BERT와 같은 언어 모델에서 디코더는 사소한 역할이지만, 이미지 도메인에서 디코더의 디자인은 학습된 잠재 표현의 의미 수준을 결정하는 데 핵심 역할을 한다는 것입니다.

아키텍처는 다음과 같은 사항들을 고려했습니다.

인코더에서는 마스크 토큰을 사용하지 않으며, visible subset(???)에서만 작동됩니다. 디코더는 경량화 구조로 구성됩니다. 인코더는 75%가 masking 되었으므로, 전체 이미지의 25%에 해당하는 영역에서만 특징 정보를 추출하면 되고, 디코더는 나머지 75%에 해당하는 부분을 복원하면 됩니다.

이를 통해 전체 사전 훈련 시간을 3배 이상 줄일 수 있었으며, 메모리 소비를 줄여 MAE를 대규모 모델로 확장할 수 있었습니다. 또한 해당 방법은 ImageNet-1K에서 미세 조정할 때 87.8%의 정확도를 달성합니다. 이는 Self-Supervised Learning을 포함해서 기존에 있었던 모든 실험들을 능가하는 성능입니다.(ImageNet-1K만을 사용시)

입력을 latent vector로 mapping하고, 이를 재구성하는 AutoEncoder는 예로부터 많이 사용이 되어 왔는데, PCA나 K-Means 또한 AutoEncoder의 한 종류입니다. DAE(Denoising Auto Encoder)도 입력 신호를 손상시키지 않는 선에서 노이즈를 제거한 후, 원래 신호를 재구성하는 AutoEncoder입니다. MAE는 DAE와 유사한 부분들이 많으며, 손상된 영역이 직사각형 단위의 마스크라는 것이 다르다고 볼 수 있습니다.

또한 MAE에서 가장 중요한 부분은 마스크 토큰이 디코더에서만 작용된다는 점 입니다. 인코더에서는 마스크 토큰을 사용하면 성능이 대략 14%까지 떨어집니다.

loss MSE(target은 오로지 mask된 영역 입니다.)

모델 구조 및 상세 설정 Decoder : Depth 8, width 512 (fine tuning 진행 시, 단 한개의 layer만으로도 84.8%의 성능을 보여줍니다.) Normalization : unnormalized pixel(0~255) Augmentation : random resized crop,(jittering is bad) 해당 학습 방법은 Augmentation에 크게 구에 받지 않고도 매우 높은 성능을 보여주므로 딱히 다른 Augmentation을 사용하지 않습니다. Uniform Random Masking 자체가 Augmentation입니다 masking ratio : 75% epochs : 800 mask : gray color

image

image linear probing에서 depth가 깊을수록 성능이 잘 나오는건 당연합니다. reconstruction과 recognition의 역할을 진행해야 하는 layer들이 나뉘어져서 그런겁니다. 더 많은 layer들은 정보들을 더 함축적으로 전달할 수 있습니다.

MAE는 이미지의 일부만을 가지고 해당 물체를 예측하게 되는데, 재밌는 점은 여러개의 오브젝트가 있을 때, 가려진 오브젝트는 제외하고 추론을 진행했다는 점입니다. image

Result Classification 성능입니다. image

Detection, Segmentation 성능입니다. image 성능 향상 폭도 높고, 성능도 잘 나오고 있습니다.

Regularization 에 관련된 내용은 Appendix A.2에 있음. 해당 내용도 기재하여야 합니다.

코드 링크 : https://github.com/lucidrains/vit-pytorch -> 조만간 디버깅해거 line 단위로 올릴 예정

gusdlf93 commented 2 years ago

파라미터 계산기 https://docs.google.com/spreadsheets/d/1quVChNJDEpz8oDKkzW6v2CdvZzWI0gO-HPJQSSFuRkw/edit?usp=sharing 발표자료 Masked autoencoders are scalable vision learners.pptx

phc-alchera commented 2 years ago

75%의 패치를 가지고 복원하도록 하는 부분에서 패치 단위로 마스킹을 25% 만큼 하는 것 대신에, 전체의 25%만큼의 픽셀만큼 노이즈를 주고, 패치 단위 학습을 하면 효과가 더 좋지 않을까요? 물론, MAE에서 의의는 빠른 속도, 낮은 연산을 집중하여 인코더에 들어가는 패치수가 줄여져 Computation 속도와 양을 줄여주는 게 컨트리뷰션이기 때문에 성능상의 우위는 크게 의미는 없을 것 같지만요.

hyunil93 commented 2 years ago

@phc-alchera

75%의 패치를 가지고 복원하도록 하는 부분에서 패치 단위로 마스킹을 25% 만큼 하는 것 대신에, 전체의 25%만큼의 픽셀만큼 노이즈를 주고, 패치 단위 학습을 하면 효과가 더 좋지 않을까요? 물론, MAE에서 의의는 빠른 속도, 낮은 연산을 집중하여 인코더에 들어가는 패치수가 줄여져 Computation 속도와 양을 줄여주는 게 컨트리뷰션이기 때문에 성능상의 우위는 크게 의미는 없을 것 같지만요.

아마 제가 글을 잘못 작성했나 봅니다. 원본 이미지의 75%에 해당하는 이미지 패치들에 Noise를 준다는 의미였습니다. 그러므로, 25%만큼 마스킹하는 것이 아니라 75%를 마스킹하게 되겠네요 ㅜ

말씀하신대로 전체에 25%만큼의 픽셀만큼 노이즈를 주고 패치 단위 학습을 하면 효과가 더 좋을 거라고 말씀하셨는데, 어떤 의미인지 잘 이해가 가지 않아서 조금 더 풀어 주시면 좋을듯 합니다.

우선 제가 생각하기에는 1) 노이즈를 이미지 패치 단위로 주느냐 2)노이즈를 픽셀 단위로 준 후에 이미지 패치 단위로 나느느냐로 들렸습니다. 이렇게 이해하는 게 맞을까요?

만약 이게 맞다면, 노이즐르 픽셀 단위로 주는 것은 학습에 크게 도움이 되지 않습니다. 이는, 이미지에서 픽셀이라는 것이 가진 정보량이 너무 작으며, 이 작은 정보량 또한 주변 픽셀들을 통해서 유추가 가능하기 때문에 크게 도움이 되지 않는 다는 것입니다. 노이즈를 이미지에서 패치 단위로 주는 이유는, cnn이 학습할 때에 있어서 주변의 픽셀들로는 masking된 이미지 패치들을 예측하기 어려워야 하는, 일종의 정보량 조절을 위한 것입니다.

hyunil93 commented 2 years ago

@phc-alchera 제가 생각한 질문이 맞고, 답변 해주신 것도 동의하여 잘 이해가 됬습니다. 갑자기 궁금한건데 MAE는 Self Supervised Learning을 통해 자신이 가지고 있는 특정 도메인에 대해서 복원 능력(특징 추출 능력)이 강한 네트워크를 Backbone으로 사용하도록 해준다로 이해 했는데, 배포되어 일반적으로 사용되어 지는 ImageNet Backbone 대신에 ImageNet 데이터셋을 MAE로 학습한 Backbone의 성능 및 연산 차이는 어떻게 되는지 궁금하네요 약 2.4%의 성능향상이 있습니다 82.5-> 84.9

phc-alchera commented 2 years ago

호오.. 역시 괜히 MAE가 아니네..