gusdlf93 / Paper_Survey

4 stars 1 forks source link

[2022 arXiv] EfficientFormer : Vision Transformers at MobileNet Speed #17

Open gusdlf93 opened 2 years ago

gusdlf93 commented 2 years ago

한줄 평 : 우리 모델, 빠름. 가벼움. 쓰셈

Transformer와 관련해서 다양한 모델들이 나왔습니다. 이들 중에서 장점만을 모아서, 가장 Efficiency가 좋은 모델을 만들었습니다.

Observation 1 : Patch Embedding -> Convolution Stem Larger Kernel과 stride를 사용하는 Patch Embedding은 모바일 기기에서 좋지 않습니다. 일반적으로 Patch Embedding은 많은 연산량을 소모하지 않기 때문에, 해당 계산 비용을 무시할 수 있다고 생각하지만, 모바일 장치에서(LeViT-256이나 EfficientFormer에서는 이게 병목으로 작용한다는 것을 밝힙니다.) Larger Kernel을 사용하는 Convolution은 대부분의 컴파일러에서 최적화가 안되어 있고, 최적화를 지원하는 알고리즘도 없습니다. 그러므로 3x3 convolution 으로 구성된 DownSampling. Convolution Stem으로 Patch Embedding을 대체합니다.

Observation 2 : Reshape 없이 네트워크를 구성하는게 좋습니다. Reshape 없는 Convolution기반의 MHSA은 병목이나 오버헤드가 적습니다.

Consistent feature dimension?은 token mixer를 선택함에 있어서 중요합니다. Token Mixer라는 것은 Token 간의 정보 교환을 어떻게 할 것인가에 대해서 정의한 것입니다. Attention이나, Spatial MLP라든가, Pooling이라든가... image

MHSA를 어떤 걸 선택하느냐에 따라서 병목이 생기기도 하고, 생기지 않기도 합니다.

최근 여러 논문들에서 ViT기반 모델을 MLP 블록이나 Token Mixer로 구성된 MetaFormer 아키텍처로 확장하는 추세입니다.

Token Mixer를 선택하는 것은 ViT 기반 모델을 구축할 때 필수적인 설계입니다. Global Receptive field가 있는 기존 MHSA보다 정교한 shifted windows attention이나, pooling같은 non parametric operation 같은 옵션들이 있습니다.

하지만 shifted windows attention은 모바일에서 지원이 안되고, 구축하는게 어려우므로 우선은 논외로 두고,
pooling을 대체하기 위한 depth-wise convolution도 사용하지 않습니다,

우선 PoolFormer-s24와 LeViT-256을 비교해서, Reshape 작업이 LeViT-256에서 병목 현상임을 발견하였습니다. LeViT-256은 4D Tensor에서 Conv로 구현되므로, 패치된 3D Tensor에서 Attention이 수행되어야 하므로 Reshape를 자주사용해야 합니다. Reshape가 자주 쓰지 않는 것이 좋습니다.

Observation 3: Conv + Batch Norm > Layer Norm +Linear Layer Conv + Batch Norm은 Latency가 낮고, Accuracy의 하락도 납득할만큼 적습니다.

Layer Norm은 전체 병목에 10~20%정도를 차지하고 있습니다. 하지만 성능 차이는 Top-1 Accuracy 기준으로 단지 0.3%에 불과합니다.

그러므로, Conv-BN 을 사용해서 성능이 떨어지지 않는 구간은 Conv-BN을, ViT의 MHSA에 있어서 중요한 구간에만 LN을 사용합니다.

Observation 4 : Non linear activation Function의 Latency는 hardware와 compiler에 의존적입니다. iPhon12에서는 GELU가 RELU보다 약 10배 빠르고, HardSwish의 경우에는 GELU보다 4배 느립니다. 경량화를 위해서는 적용될 디바이스에서 Activation Function의 지원 유무를 확인해봐야 합니다.

Network Architecture: 이러한 실험들을 통해서, 만들어진 구조는 다음과 같습니다. image

간단하게 보면, CNN + Transformer구조로, 대부분의 논문에서 그렇듯 Transformer를 해상도는 /16-> /32에서 적용하는 모습을 볼 수 있습니다. (근데 2022-06-04기준으로 논문 그림에서는 /16 /32에서 MHSA를 쓴다고 적혀있는데, Paper에서는 /32만 사용함. 코드 공개가 안되서 뭐가 맞는지 모르겠네요. )

그냥 논문 대충 읽어보면, Transformer는 결국 필요한데, 이미지넷에서는 해당 해상도에서 필요 없었다는 의미 정도로 보입니다. 도메인에 Adaptation하게 적용하면 병리에서도 논문을 쓸 수 있지 않을까 싶네요. 그럼 결국 병리에서 특정 문제를 Classification하는데 필요한, 해상도나 size가 중요해지겠네요

읽고 든 생각 : BotNet 이후로 계속 생각한 거지만, Image Classification에서 Transformer가 굳이 많을 필요는 없는거 같습니다. Segmentation이나 Detection에서는 또 다른 범주의 이야기겠지만, 되게 간단한 방법으로 좋은 성능을 보여준 논문이라는 생각이 듭니다.

코드 구현 시 고려할 점: 논문이랑 구현된게 좀 다릅니다. ImageNet에서 학습해서 성능 비교 한번 해봐야 할거 같습니다. critical한 성능 차이가 나지는 않을 거 같은데 잘 모르겠네요.

gusdlf93 commented 2 years ago

ppt : https://docs.google.com/presentation/d/1mByIQVSCxaHjZJf4jx3nG6ddM4j_RY5LZF6TGsXB-Os/edit#slide=id.g1315fd7a39e_0_6