안녕하세요,
재재입니다.
RepVGG paper 리뷰 입니다.
1줄로 이번 논문 RepVGG 의 Main contributions 을 말해보면,
다음과 같이 이야기 할 수 있겠습니다.
Structural reparameterization 을 통해,
학습과 추론을 분리시켜서 speed 와 accuracy 에 대한 tradeoff 를 개선하였다.
(0) 개요
RepVGG 리뷰하기 전 몇가지 설명드리자면,
이 논문은 CVPR 2021 에 Accepted 된 논문입니다.
(1) Abstract
RepVGG 는 traning 시간과 inference time에 대해 decoupling 관계를 가지는 구조로서,
ResNet 50 보다 83% 빠르고 ResNet 101 보다는 101% 더 빠르며,
EfficentNet 및 RegNet 과 같은 구조를 가지는 SOTA 모델과 비교했을 때,
accuracy 와 speed 에 대한 tradeoff 가 더 적으며, 성능적으로도 강력합니다.
(2) Introduction
RepVGG 저자는 기존까지 사용하던 구조에 있어 두가지 문제를 소개했습니다.
- multi-branch 구조는 모델의 customize 를 어렵게 하며,
때론 inference 도 느리고 메모리 사용에 있어서 효율적이지 않다. - depthwise conv 와 channel shuffle 과 같은 구조는,
MAC (memory access cost) 를 증가시키며 지원되는 타겟 (device) 가 적다.
RepVGG 저자는 다음과 같이 주장합니다.
- 단순한 구조인 RepVGG 를 제안하였는데 3by3 conv 와 relu 만 사용했고,
speed 와 accuracy 에 대한 tradeoff 가 SOTA 대비 가장 효과적이다. - reparameterization 을 사용해 training 와 inference 의 단계를 분리하고,
training-time 과 inference-time 의 연관성을 제거했다. - RepVGG 는 classification, semantic segmentation task 에서 특히 효과적이다.
RepVGG 저자는 resnet 구조를 딴 VGG를 변형 한형태의 VGG-like 구조를 만들었습니다.
여기서는 relu 가 어디에만 남아있는지 집중하면서 보시면 될거 같아요.
(3) Related Work
Model Reparameterization 은 사실, 이전에도 적용했었습니다.
바로 DiracNet 인데요. RepVGG 저자는 다음과 같이 이야기했습니다.
DiracNet 은 최적화를 위해 conv kernel 에 단순히 수식을 적용한 형태라서, (component level)
reparameterization 이 사용되기는 했으나 structural reparameterization 이라 할 수 없다.
또한, resnet 보다 성능이 떨어진다.
이에 반해,
RepVGG 는 multi-branch 학습과 완전히 분리시켜 structural reparameterization 을 적용,
resnet 보다도 성능이 앞질렀고 그 차이도 크다.
(4) RepVGG
(A) 의 가장 상단 구조가 학습 단계를 그렸다고 보시면 되고,
바로 그 밑 두 단계는 RepVGG 에서 사용한 structural reparameterization 을 통해,
추론 단계 (가장 하단) 로 변형할 수 있다는 것을 보여줍니다.
또한, (B) 는 parameter 측면에서의 변환을 보여주는데요.
정리해보면 다음과 같습니다.
- conv + bn (conv 연산 이후 batch normalization 을 통과시키는 연산) 을,
1개의 conv 로 변형 가능 - 1 by 1 conv 는 3 by 3 conv (center) 형태로 변형 가능
- 3개의 conv 는 1개의 conv 로 변형 가능
위의 수식에서 얻은 정보에 따르면, 각 수식에는 activation (relu) 가 빠져있습니다.
structural reparameterization 을 사용하려면 relu 가 없어야 함을 알 수 있고,
nonlinearity 가 제거된 상태에서 reparameterization 을 통해,
conv+bn 이 conv+bias 의 형태로 변경될 수 있음을 의미합니다.
Q. relu 를 아예 제거한건가요?
relu 가 reparameterization 할 때만 빠지고,
이후에 바로 있는 것을 확인하실 수 있습니다.
(activation 은 필요)
위 그림은, 3 by 3 conv 를 사용한 이유를 보여주고 있습니다.
nvidia 1080ti 기준 3 by 3 conv 가 가장 TFLOPS (초당 floating point operation 성능) 가 좋기 때문에 그렇고, 이는 어쩌면 nvidia gpu 측면에서 3 by 3 conv 가 성능적으로 최적화가 가장 잘 되어있어서 그럴 수도 있습니다.
(5) Experiments
identity branch 와 1by1 conv branch 를 사용하면,
accuracy 가 가장 높고 repameterization 이 없으면 느리기 때문에,
reparameterization 을 적용해도 성능적인 하락은 전혀 없다.
(속도에 있어서 개선이 큽니다.)
(6) Conclusion
결론입니다.
speed 와 accuracy 에 대한 tradeoff 를 효과적으로 개선한,
RepVGG 를 제안했으며 ImageNet Top-1 Accuracy 는 80%를 넘었습니다.
RepVGG 는 3by3 conv 와 relu 를 쌓은 아주 단순한 구조로서,
GPU 와 inference 에 특화된 칩에서 아주 효율적입니다.