| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- Instance segmentation
- simclr
- GAN # Label Smoothing
- NT-Xent(InFoNCE)
- Semantic Segmentation
- ConvNet
- 인공지능
- contrastive learning
- Swin Transformer
- Transformer
- class activation mapping
- self supervised learning
- Convolution Block Attention Module
- FLOPS
- CBAM
- Bidirectional Transformers for Language Understanding
- ECCV
- NLP
- 딥러닝
- convnext
- ICML
- multi head attention
- Attention
- boundary unlearning
- Deepfake
- machine unlearning
- mordernize
- You Only Look Once #YOLO
- BERT
- DeepLearning
- Today
- Total
륵늘
A ConvNet for the 2020s 본문
이 논문을 간단요약하면, Transformer의 기능들을 CNN에 하나씩 단계적으로 접목시키는 논문으로 FackBook에서 만든 논문으로 2020년 CVPR에 Accept 된 논문이고, Citation의 수는 6월 10일 기준으로 4344회이다.
2020년 VIT는 함께 기존의 State-of-the-art였던 ConvNeXt 기반의 모델들을 뛰어넘었다.
VIT는 일반적인 Computer vision task에 적용하기 힘들다는 어려움이 있었는데, ConvNet의 Sliding window strategy를 통해서 Transformer도 Computer vision 분야의 Backbone으로 사용 가능하다는 것을 보이면서 많은 Vision 분야에서 좋은 성능을 보여주게 된다.
하지만 Tranformer가 가지는 효율성은 Inductive bias가 가진 한계를 보인 것이 아닌 구조적 이점에서 비롯된 것이라고 봐야된다. (Ex - Self-Attention)
이 논문은 Resnet50을 기반으로 점진적으로 'Mordernize'하여 성능의 차이를 만드는 주요 요소들을 파악하고 그 결과로 만들어진 모델을 ConNeXt로 이름을 지었는데, ConvNeXt는 기존의 ConvNet이 가지는 효율성과 심플함을 유지하면서도 적확도와 Scalability에서 Transformer와 맞먹는 성능을 보여주며 Classification 뿐만 아니라 다른 Vision task에서도 좋은 성능을 보여준다.
논문의 세부 내용으로 가기 전에 ConvNet과 비교되어지는 Swin Transformer 에 대해서 간략하게 알아보고 가면, Swin Transformer는 맨 왼쪽 그림처럼 계층적 Feature map을 만들어서 Classification, Segmentation, Detection에서 사용한다.
TF(Transformer)가 RNN을 대체하기 시작하며 자주 사용되는 Backbone으로 바뀌게 되었는데, 자연어 처리와 이미지 처리 분야에서 모두 TF 관련한 모델을 사용하게 되었다. 모델 가장 앞쪽에 Patchify Layer(이미지를 일련의 패치들로 Split 하는 layer)를 제외하고는 VIT는 이미지에 맞는 Inductive bias(주어지지 않은 입력의 출력을 예측하는 것)를 사용하지 않고 기존 TF의 구조도 많이 바꾸지 않았다. 단지 Scaling behavior로 거대한 모델과 데이터 셋을 통해서 기존의 ConvNet 관련 모델들의 성능보다 좋은 성능을 얻게 되었다. (한계점 - Classification에서만 좋은 성능을 얻음.)
이와 같은 문제들을 해결하기 위해서 CNN의 Sliding window strategy를 적용한 Swin TF는 일반적인 Vision 분야의 Backbone으로 사용 가능함을 보였다.
Swin TF는 Local window를 사용해서 Self Attention을 진행하기 때문에 VIT와 달리 모든 패치간의 상호작용을 고려할 필요가 없다. 이는 계산 복잡도를 줄이고 메모리 사용을 줄이는 데 도움이 된다. (더 큰 이미지나 복잡한 장면을 처리하는데 효율적임.) 맨 왼쪽 그림처럼 다양한 해상도(16x, 8x, 4x)로 이미지가 분할되어 있다. 이것은 각 해상도에서 이미지의 특성을 다른 스케일로 포착하기 위함이다.
ConvNet과 Swin TF의 정확한 비교를 위해서 모델의 Flops를 기준으로 모델의 scale을 비교했다.
(Resnet50 vs Swin TF (Tiny))
High level 관점에서 ConvNet의 심플함을 유지한 채로 Swin TF의 디자인을 다양한 level에서 따라가는 것이 이 논문의 목적이다.
구체적으로는 아래의 5가지의 단계에 따라서 성능을 향상 시켰다.
1. Macro Design
2. ResNeXt-ify
3. Inverted Bottleneck
4. Large Kernel Size
5. Micro Design
우선 Macro와 Micro의 차이점에 대해서 알아보자면
Macro Design
- The overall structure (모델이나 시스템의 전체적인 구조와 구성 ex - 블록의 배열, 모듈 간의 연결 방식)
- Key components (네트워크의 주요 구성 요소와 상호 작용을 정의 ex - Convolution, Attention)
- High level performance characteristics (모델의 전체적인 성능 특성 ex - Flops, 효율성, 확장성)
Macro는 모델의 큼직한 부분들에 대해서 이야기를 한다.
Micro Design
- Detailed implementation (모델이나 시스템의 세부적인 구현 사항 ex - 개별 레이어, 활성화 함수, 정규화 기법)
- Component details (내부 작동 방식과 세부 파라미터 설정 ex - kernel, stride, padding size)
- Fine tuning and optimization (모델의 성능을 최적화하기 위한 fine tuning과 optimization)
Micro는 모델의 작은 부분들에 대해서 이야기를 한다.
Macro design (The Stage compute raio)
Resnet50에서 "res4" stage는 주로 Object detection과 같은 Downstream task와 호환되도록 많은 연산을 담당했다. Swin TF Tiny는 비슷한 원칙을 따르되, stage 별 compute ratio를 1:1:3:1로 다르게 설정했으며 이 비율을 Resnet50에 적용시켜서 (3:4:6:3)비율에서 (3:3:9:3)으로 각 stage의 블록 수를 조정하였다. 그 결과 모델 Accuracy를 78.8%에서 79.4%로 향상 시켰다.
Macro Design (Stem cell)
Stem cell은 결국 네트워크의 입력 부분을 의미하며 어떻게 처리할 것인가에 대한 이야기이다. 일반적인 Stem cell은 표준 CNN과 VIT 계열 모두에서 Input image를 적절한 크기의 feature map으로 만든다.
Resnet은 7x7 convolution layer에 Stride 2, Max pooling을 통해서 입력이미지의 4배를 Downsampling 한다.
VIT는 "patchfiy"를 통해서 Kernel size 14 or 16을 이용하여 입력이미지를 14x14나 16x16으로 나누며, Swin TF는 더 작은 4x4 패치로 이미지를 나눈다. 이에 따라 4x4 필터 크기에 Stride 4를 적용하여 Non-overlapping convolution (stride 크기 == kernel size)을 수행한다.
여기서는 성능이 향상된 것에 초첨을 두는 것이 아닌, CNN의 Stem cell에 Patchify layer로 대체해도 유사한 성능을 얻을 수 있다는 점이다.
Macro Design (RexNeXt-ify)
Original Convolution 연산 같은 경우 Kernel을 Channel과 그대로 연산한다.
Depthwise Convolution 연산은 Channel마다 따로 각자의 Kernel을 통해서 결과를 낸 다음에 합친다.
Depthwise Convolution의 사용으로 연산량을 줄이지만 Accuracy도 낮아지기 때문에 ResNeXt-ify에서 제안된 전략에 따라 네트워크의 Width를 Swin-TF와 같은 채널 수의 96으로 증가시켰다. (64 to 96)
Inverted Bottleneck
해당 Transformer 디지인은 ConvNets에서 사용되는 4의 Expansion ratio (t)를 가진 Inverted Bottleneck 디자인과 연결되어 있다. 해당 아이디어는 MobileNetV2에 의해 대중화 되었다.
주요 Feature가 담긴 저차원의 Featrue map을 확장시켜서 넓은 범위에서 또 한 번 주요 Feature를 파악하고 다시 기존 저차원에 담긴 주요 Feature map과 Skip Connection을 진행하면서 효율적으로 더욱 많은 Feature들을 학습하기 위함이다.
따라서 이 아이디어를 적용해 위 그림의 (a)에서 (b)로 구성을 변경했으며, 채널이 확장되었으므로 Depthwise Convolution 레이어의 Flops가 증가했음에도 Downsampling residual block에서 상당한 Flops 감소를 보였다.
다시정리해보면, 그림에서는 일반적인 Bottleneck 구조와 정반대로 구성되어있다. 차원을 늘린 후 Feature를 추출하고 다시 줄여 Skip Connection을 진행하는 구조이다. 저자는 저차원의 layer에 주요 정보가 압축되어있다고 가정한 후 이를 Skip Connection으로 사용함으로써 메모리 사용량을 줄이기 위해 위 구조를 사용한다. 또한 채널을 확장하고 Original Convolution이 아닌 Depthwise Convolution을 사용하여 연산량을 줄였다.
ConvNets에서 큰 커널크기가 사용되기는 했지만 VGG때 부터 3x3의 작은 Kernel size를 통해 Layer를 쌓는 것이 표준으로 여겨졌다. Swin-TF는 비록 Self-Attention 블록에 Local Window를 도입했지만, Window size는 최소 7x7로, ResNet의 3x3 Kernel 크기보다 상당히 크다. 따라서 저자는 큰 Kernel size의 Convolution을 사용하여 실험해보았다.
큰 Kernel size를 갖는 Convolution을 채택하는 것은 상당한 이점이 있다고 한다. 사진에서처럼 여러 Kernel size를 실험 (5, 7, 9, 11)했고, 7x7일 때, 성능이 향상되었으며, FLOPs는 거의 유사하게 유지되었다고 한다.
지금까지 Macro Design에 대한 방법들이였고, 저자는 이 과정에서 VIT에서 취한 상당 부분의 설계가 ConvNet 인스턴스로 매핑 될 수 있다는 점이 흥미로웠다고 한다.
Micro Design (Replacing ReLU with GELU)
ReLU는 ConvNets에서 광범위하게 사용되었고, Gaussian Error Linear Unit(GELU)는 최신 TF나 BERT ,GPT등에 사용되었다. 저자들은 ConvNet에서도 ReLU를 GELU로 대체할 수 있으나 정확도는 변하지 않은 것을 확인했다.
Micro Design (Fewer activation function and normalization)
Fewer Normalization layer
TF 블록은 일반적으로 더 적은 Normalization layer를 가지고 있다. 여기서 두개의 Batch Normalization(BN) layer를 제거하고, 1x1 convolution layer전에 하나의 BN layer만 남길 경우 성능을 더 향상 시켰다.
Substituting BN with LN
Batch Normalization은 모델의 성능에 해로울 수 있는 많은 복잡성을 가지고 있는 반면, 더 단순한 Layer Normalization(LN)은 TF에서 사용되어 다양한 응용 시나리오에서 좋은 성능을 보여주었다.
Separate Downsampling layer
ResNet에서는 각 Stage 시작에서 Residual block을 통해 3x3 convolution(stride 2)와 shortcut 연결에서의 1x1 convolution(stride 2)를 사용하여 Spatial Downsampling이 이루어진다. 반면, Swin TF에서는 Stage 사이에 Separate Downsampling layer가 추가된다. 저자도 Stride 2의 2x2 Convolution layer를 사용하여 Spatial Downsampling을 위한 유사한 전략을 탐구했으나, loss가 발산했다고 한다.
실험 끝에 Spatial resolution이 변경되는 곳마다 Normalization layers를 추가하는 것이 Training을 안정화하는 데 도움이 되는 것을 발견하였다. 이에는 SF에서도 사용되는 여러 LN layers가 포함되며, 각 Downsampling layer 전, Stem 후, 그리고 최종 Global average pooling후에 각각 하나씩 위치한다.
위 실험 테이블을 보면 유사한 FLOPs를 보면 거의 ConvNeXt의 성능이 가장 높은 것을 볼 수 있다. 또한 충분한 데이터셋에서도 SF의 성능을 넘어섰다는 건, Inductive bias가 크더라도 큰 데이터셋에 대한 성능이 떨어지지 않는다는 것을 위의 표에서 보여주고있다.
'딥러닝' 카테고리의 다른 글
| Learning Deep Features for Discriminative Localization (0) | 2024.07.30 |
|---|---|
| A Simple Framework for Contrastive Learning of Visual Representations (0) | 2024.03.11 |
| MAEEG: Masked Auto-encoder for EEG Representation Learning (0) | 2023.11.10 |












