[Tech +]딱 한 번 보고도 척척 처리! - YOLOv7에서 parameter 재구성으로 Inference 속도를 향상시키는 법

안녕하세요! Arbeon AI팀에서 Vision 딥러닝 개발을 담당하고 있는 Navy입니다.

이번 포스트에선 딥러닝 모델의 Inference 과정의 속도 향상을 위해 사용되고 있는 Re-parameterizaion 기법에 대해 소개해 드리고자 합니다.

인공지능 모델 다룰 때는 무엇보다 정확도가 중요하지만, 실제 서비스나 제품에 적용시키기 위해 Inference 속도가 필연적으로 고려되어야 하겠지요. 이번 글에서는 Re-parameterization(파라미터의 재구성)이 무엇인지, 나아가 YOLOv7에서 어떻게 Re-parameterization이 적용되는지에 대해 알아보겠습니다.

재밌겠죠? 바로 가보시죠! 😜 



Parameter 재구성 통한

Inference 속도 향상!




목차

1. Re-parameterization이란?

2. Rep-Conv (Re-parameterized Convolution)

3. YOLOv7 에서의 Planned Re-parameterization

4. 결론



1. Re-parameterization이란?

2010년대 초중반, CNN(Convolution Neural Network)의 발전에 따라 Object Detection, Classification 등 Vision 인공지능 분야에서 정확도가 눈부시게 향상되었습니다. 그러나 동시에 문제점도 생겼는데, 바로 연산 속도입니다. 

정확도 상승과 더불어 인공지능 모델의 Parameter수와 연산량 또한 급격히 증가하였고 이는 곧 연산 속도에 치명적으로 작용되었습니다. 자율주행과 같이 빠른 연산이 중요한 분야에서는 정확도를 유지함과 동시에 실시간으로 연산을 처리할 수 있어야겠지요.

이러한 문제를 해결하기 위한 방법이 바로 Re-Parameterization(파라미터의 재구성)입니다. Re-Parameterization은 Inference 과정에서 여러 계산 모듈을 하나로 합치는 일종의 앙상블 기법입니다. Re-Parameterization은 두 가지의 방법으로 나뉘게 되는데, 첫 번째는 동일한 모델을 다른 데이터로 여러 차례 학습 시킨 후 Parameter의 평균을 내서 Inference에 활용하는 Model-Level Re-parameterization, 두 번째는 학습이 이뤄지는 동안 계산 모듈을 여러 개로 나누고 Inference에서 하나로 통합하는 Module-Level Re-Paramterization입니다. 

YOLOv7에서는 Module-Level Re-Parameterization을 활용했고 Planned Re-parameterized Convolution을 제안했습니다. 본 글에서는 Rep-Conv(Re-parameterized Convolution)이 어떻게 계산되는 지, YOLOv7에서는 어떻게 적용 됐는지에 대해 자세히 알아보도록 하겠습니다. (여기서 말하는 YOLO는 You Only Look Once 의 약자입니다아)


2. Rep-Conv (Re-parameterized Convolution)

YOLOv7에서 제안한 Planned Rep-Conv을 알아 보기에 앞서 이것의 근본이 되는 Rep-Conv에 대해 먼저 살펴보겠습니다.

Rep-Conv는 ResNet 형태에서 영감을 받은 Re-parameterization 모델입니다. ResNet과 같은 Concatenation 기반의 모델은 정확도가 높지만 Inference 속도가 느린 것이 특징입니다. 이와 반대로 VGG 와 같은 단순한 형태의 Deep CNN은 빠른 Inference 속도를 자랑하지만 정확도가 떨어지는 이슈가 있구요. 

하지만 걱정하지 않으셔도 됩니다. Rep-Conv에서는 Resnet과 VGG의 장점을 모두 갖고 있기 때문이죠. Rep-Conv 학습시에는 3x3 Convolution, 1x1 Convolution, Identity Connection 이 세개의 모듈을 사용하여 ResNet과 같은 형태로 학습하며, Inference 시에는 각 모듈의 Weight를 하나의 3x3 Convolution으로 결합하여 사용합니다. 3x3 Convolution으로 결합하는 이유는 대부분의 GPU에서 3x3 Convolution의 연산속도가 가장 빠르기 때문입니다.

아래 그림과 같이 왼쪽이 일반적인 ResNet, 중간이 학습 과정에서의 Rep-Conv, 오른쪽이 Inference 과정에서의 Rep-Conv입니다.


여기서 잠깐! 한 가지 의문이 생기지 않으셨나요? 1x1 convolution과 Identity connection을 어떻게 3x3 Convolution으로 합칠 수 있는 걸까요? 아래에서 자세히 설명드리도록 하겠습니다.

다음 그림은 점선을 기준으로 왼쪽이 아키텍처 관점, 오른쪽이 weight 관점에서의 3x3 convolution으로의 결합 과정을 보여줍니다. 

예시를 위해 입력 feature의 channel 크기 2, 출력 feature의 channel 크기 2로 고정하여 사용합니다. 
입력 feature map은  M(1), 출력 feature map은 M(2), 3x3 convolution Filter는 W(1), 1x1 Convolution filter는 W(2), Identity Connection을 위해 사용되는 filter는 W(3)라고 정의하겠습니다. (→ channel 크기가 2인 filter는 2개 존재)

3x3, 1x1 convolution, Identity connection은 계산을 끝낸 후 Batch Normalization을 거쳐 모두 더해집니다. 이 과정을 하나의 3x3 Convolution 모듈과 bias로 표현해 보겠습니다. 1x1 Convolution은 1x1 크기지만 filter에 zero padding을 하여 3x3 convolution으로 사이즈를 키워줍니다. Identity Connection은 이전값을 그대로 살려서 1x1, 3x3 convolution 연산 결과와 함께 더해지는데 이 또한 3x3 크기의 filter로 표현 가능합니다. W(3)을 보면 흰색 부분은 0, 노란색 부분은 1로 weight를 채워주면, 3x3 filter로 Identity Connection의 효과를 동일하게 낼 수 있습니다!


위의 그림만 봤을 때는 Identity Connection이 어떻게 3x3 Convolution으로 표현가능한지 아마 이해가 잘 안될 겁니다. 아래의 그림을 보면 이해가 좀 쉬울 것 입니다. input feature의 주황색 부분은 주황색 filter와, 파란색 부분은 파랑색 filter와 계산이 됩니다. 이와 같은 filter로 convolution 연산을 하게 되면 입력값과 출력값이 동일하게 됩니다. 즉 3x3 Convolution으로 Identity Connection을 구현한 것입니다.



이제 1x1 Convolution과 Identity Connection을 모두 3x3 Convolution으로 변환했습니다. 그러면 이제 3x3, 1x1 Convolution, Identity Connection을 하나의 3x3 Convolution으로 묶어 보겠습니다. 먼저 Batch Normalization을 제외하고 Convolution 연산에 대해서 위의 과정을 식으로 적으면 아래와 같습니다.




1x1, 3x3, Identity Connection 모두 3x3 convolution으로 대체 되었고 위의 식은 아래와 같이 다시 묶일 수 있습니다.



위의 식을 통해서 W(1), W(2), W(3) 모두 3x3 크기의 filter이기 때문에 모두 더해질 수 있고 이렇게 되면 아래 그림과 같이 모두 값들이 더해진 하나의 3x3 크기의 filter가 나오게 됩니다.



마지막으로 Batch Normalization을 적용시켜보겠습니다. Batch Normalization을 포함한 전체 Training시의 Rep-Conv의 식을 표현하면 아래와 같습니다.


Batch Normalization 계산은 아래 식을 통해서 이뤄지며 weight 를 포함해서 계산을 한 후 전개를 하면 그 다음 식과 같습니다.





전개한 식을 통해서  W’와 bias의 형태로 나타내어지는 것을 볼 수 있습니다. 이러한 방식으로 1x1, 3x3, Identity Connection을 모두 Batch Normalizaiton 의 parameter들로의 구성된 W’와 Bias로 표현하고 모두 더해서 하나의 3x3 Convolution으로 표현할 수 있습니다.


3. YOLOv7에서의 Planned Re-parameterization

YOLOv7에서는 Inference 계산 비용을 증가시키지 않고 네트워크의 정확도를 높히기 위해(일명 Bag-of-Freebies) Re-parameterized Convolution(Rep-Conv)을 사용하였고 실험을 통해 Rep-Conv 뒤에 Residual 또는 Concatenation이 붙는 경우 성능 저하를 확인할 수 있습니다.

Concatenation 기반 모델에 대해서는 아래 그림과 같이 표시된 위치에 Rep Conv를 위치시켜 가며 성능 평가를 진행했습니다. RepConv 뒤에 Concatenation이 붙는 경우 Table4에서 확인할 수 있듯, 성능이 저하되는 것을 확인할 수 있었구요.


Residual 기반 모델에 대해서는 기존의 Dark Block, CSP Dark Block에서 1x1과 3x3 convolution의 위치를 바꾸고(Reverse CSP(=RCSP)) , 3x3 Convolution을 Rep-Conv로 대체했을 때(RepRCSP), Residual Connection이 어떤 영향을 미치는 지 실험했습니다. Table 5와 같이 RepRCSP가 다른 모델 보다 더 뛰어난 성능을 내는 것을 확인할 수 있었습니다.


위 실험을 통해서 RepConv 뒤에 Residual이나 Concatenation이 붙을 경우 성능이 저하되는 것을 확인하였고 YOLOv7에서는 Connection들이 붙어도 성능에 영향을 주지 않는 RepConvN을 새롭게 제안했습니다. 다음 그림과 같이 기존의 RepConv의 경우 Identity Connection이 존재했지만 RepConvN에서는 Identity Connection을 제거된 것을 볼 수 있죠.

RepConvN을 통해 YOLOv7에서는 성능을 유지하며 속도를 더 높일 수 있다는 것을 알 수 있었습니다. Planned Re-parameterization 뿐 아니라 YOLOv7에서는 E-ELAN architecture와 Compound Scaling Method, Coarse for auxiliary and fine for lead loss를 제안했고, 이러한 기술들을 통해 파라미터 수는 40%, 계산량은 50% 감소 시켰고 v100 GPU의 30fps 이상의 Detector 중에서는 가장 높은 성능인 AP 56.8을 달성했습니다.



4. 결론

지금까지 YOLOv7의 Re-Parameterization에 대해서 알아보았습니다. 꽤나 오랜 세월동안 Object Detection & Classification 분야를 리드해 온 YOLO 모델인 만큼 다양한 기술들이 많이 추가되어 왔습니다. 그러다보니 YOLO를 처음 접하는 분들은 이게 무슨 뜻인지, 왜 이렇게 설계가 되었는지를 모르는 부분이 많을 수 있기 때문에, 그 부분을 생각하며 이번 YOLOv7에서 제안한 Planned Re-parameterization이 어떤 기술을 기반으로 만들어졌고 어떤 의도를 통해서 이렇게 설계 되었는지에 대해서 자세하게 설명해 보았습니다.

소개 못한 다른 YOLOv7의 신기술들이 더 많은데요, 다음 포스트를 통해 새로운 내용들도 정리하여 소개하겠습니다! 😎 

긴글 읽어주셔서 감사합니다!  알비언 화이팅 :)


참고

Social Media

 official@mergerity.com