※ 일본 블로그의 포스팅을 해석한 것입니다. 오역이나 직역이 있을 수 있으며, 내용 오류는 댓글로 알려주시면 수정하도록 하겠습니다.
이미지 인식에 특화된 새로운 활성화 함수 FReLU 해설과 구현
뉴럴 네트워크의 비선형성을 받쳐주고 있는 활성화 함수이지만, 현재 사실상의 표준으로 ReLU만 언급되고 있다. 심플하고 강력한 ReLU에 대적할 새로운 활성화 함수로써 Swish[Ramachandran, P.(2017)]나 Mish[Misra, D.(BMVC'20)] 제안되었지만, 최근(2020년 10월)에 이미지 인식에 특화된 활성화 함수로 등장해 ECCV'20에 채택된 Funnel Activation (통칭 FReLU)가 두각을 나타내고 있다. 이미지 분류나 물체 검출, 시멘틱 세그멘테이션등의 분야 등에 성능 향상을 할 것으로 기대되고 있다.
그럼 빠르게 FReLU의 구조와 성능에 대해 알아보자.
포스팅의 목차
- 바쁜 사람들을 위해
- 논문 해설
- 마무리
논문: "Funnel Activation for Visual Recognition", Ma, N., Zhang, X., Sun, J. (ECCV'20)
공식 구현 코드 : FunnelAct (MegEngine)
바쁜 사람들을 위해
- FReLU는 이미지 데이터의 공간적 의존성을 고려한 이미지 인식 특화형 활성화함수이다.
- 식은 아래와 같이 단순하다(T(⋅)는 단순히 Depthwise Convolution이다).
- FReLU는 이미지 분류 / 물체인식/ 시멘틱 세그멘테이션 모델에서 성능이 향상된 것을 확인할 수 있었다.
- 지금까지는 ReLU 모델에 최적화된 방법이나 모델 등이 제안되어 왔다. 그러나 지금부터는 FReLU모델에 최적화된 방법을 고안해내는 것으로 더욱 성능이 향상될 것을 기대하고 있다.
- 구현 코드는 아래와 같이 간단하다(PyTorch로 구현한 코드).
import torch
import torch.nn as nn
class FReLU(nn.Module):
def __init__(self, in_c, k=3, s=1, p=1):
super().__init__()
self.f_cond = nn.Conv2d(in_c, in_c, kernel_size=k,stride=s, padding=p,groups=in_c)
self.bn = nn.BatchNorm2d(in_c)
def forward(self, x):
tx = self.bn(self.f_cond(x))
out = torch.max(x,tx)
return out
논문 해설
논문 : 「Funnel Activation for Visual Recognition」
1.0 개요
FReLU(=Funnel Activation)는 ReLU나 PReLU를 2차원의 활성화 함수로 확장한 것이다. 수식으로 표시하면 아까 보았듯 단순하다.
뒤에서 더욱 자세히 설명하겠지만, T(⋅)의 부분이 2차원 공간에서의 함수이다. 이 수식으로 인해 픽셀당 정보를 얻어내 복잡해 보이는 이미지도 제대로 대응할 수 있게 된다.
실험으로 ImageNet 이미지 분류나 COCO 물체 검출, 시멘틱 세그멘테이션을 실시한 결과, 각각의 이미지 인식 업무에서 성능이 크게 향상됐다.
1.1 도입
CNN은 이미지 인식 분야에서 없어서는 안될 것이지만, 이러한 CNN에 더욱 중요한 것이 Convolution layer와 비선형 활성화함수 이 두 가지이다.
먼저, Convolution layer에 의해 이미지 내의 공간적 의존 관계를 파악하는 것은 정말 어려운 일이다. 따라서, 이러한 국소적인 의존 관계를 학습시키기 위해 다양한 정규화 방법 등이 제안되어 정밀도를 향상시키는 길을 걸어왔다. 그러나, 이러한 현상에 의해 Convolution layer는 점점 복잡해서 효율성이 안 좋아지고 있었다. 이로 인해, 보통의 Convolution layer만으로는 높은 정밀도를 구현해낼 수 있는 방법이 없을까라는 의문이 들었다.
다음으로 생각해볼 것은 비선형 활성화함수이다. 선형적인 관계를 Convolution layer에 학습시킨 후, 활성화 함수에서 보통 스칼라값의 변환이 이루어진다. 대표적인 활성화 함수로써 ReLU가 이미지 인식뿐 아니라 다양한 분야에 장기간 사양되었다. 여기서 이미지 인식에 특화된 활성화 함수를 만들 수 있지 않을까라는 생각이 들었다.
여기까지의 내용에서 나온 두 가지 생각은 다음과 같다.
- 일반적인 Convolution layer에서 높은 정밀도를 구현할 수 없을까
- 이미지 인식에 특화된 활성화 함수를 구현할 수 없을까
이러한 두 가지 생각에서 출발하여 탄생된 것이 이번에 제안된 FReLU이다. 결과는 다음의 그림과 같이 FReLU에 의해 정밀도가 대폭 향상되었음을 확인할 수 있었다 (ImageNet의 이미지 분류, COCO의 물체 검출, CitySpace의 시멘틱 세그멘테이션 데이터와 ResNet-50로 확인할 결과이다).
FReLU는 활성화함수의 고질적인 문제를 해결했으므로 이러한 결과를 얻어 냈다. 여기서 말하는 고질적인 문제란 활성화 함수가 공간적인 요소를 고려하지 않았던 문제이다. 따라서 공간적인 요소를 고려하기 위한 ReLU나 PReLU를 2차원 공간에 확장한 것이 FReLU이다. 식으로 표현하면 다음과 같다.
T(⋅)는 공간적 요소를 고려한 함수이다. 일반적인 ReLU의 식이 y = max(x, 0)로 나타내는 것을 생각해봤을 때, FReLU가 ReLU의 확장판이라는 것을 알 수 있다.
1.2 관련 연구
1.2.1 스칼라 값의 활성화 함수
스칼라 값의 활성화 함수란 간단히 말하자면 1개의 입력 값에 대해서 1개의 출력치를 출력하는 활성화함수로, y=f(x)로 나타낼 수 있다. ReLU 함수가 그 대표적인 예로, ReLU의 단점을 보완하여 등장한 LeakyReLU나 PReLU, ELU 등도 모두 1개의 입력에 대해 1개의 값을 반환하므로 스칼라 값의 활성화함수가 된다. ReLU계 외에도 Sigmoid나 Tanh등도 물론 스칼라 값의 활성화 함수이다.
1.2.2 문맥 조건적 활성화 함수
스칼라 값 활성화 함수가 1개의 뉴런에만 의존하는 것에 반해, 문맥 조건적 활성화 함수 (= contextual conditional activation)는 다대일의 함수이다. 즉, 여러 개의 뉴런에 의존하는 함수이다. 대표적인 것이 Maxout(클릭시, 해당 논문으로 이동)이라고 불리는 것으로, 식은 아래와 같다.
위 식을 봤을 때도, Maxout은 여러 개의 뉴런(이라는 층)에 의존하고 있다는 것을 알 수 있다. 그러나 이 방법은 계산량이 너무 많이 늘어나게 된다.
FReLU에서는 MobileNet계에서 잘 사용되는 Depthwise Convolution을 사용하는 것으로 계산량의 증가없이 공간적 의존성을 고려한 문맥 조건적 활성화 함수를 실현했다.
Depthwise Convolution은 단순히 입력의 각 채널에 1개의 필터가 있는 Convolution을 이용해, 파라미터의 수가 대폭 줄어들게 되므로 모바일계의 CNN모델에서 자주 사용되는 Convolution이다. 한편, PyTorch에서는 Conv2d의 groups인수를 채널 수와 동일하게 하는 것으로 Depthwise Convolution을 구현하 수 있다. 아래는 예시코드이다.
in_c=64
torch.nn.Conv2d(in_channels=in_c, out_channels=in_c, kenel_size=3, groups=in_c)
1.2.3 공간적 의존성을 고려한 모델
공간적 의존성을 학습시키는 것을 어려우므로, 효율성을 희생한 Dilated Convolution(Atrous Convolution)등이 제안됐다. Dilated Convolution은 그 이름 그대로 보통의 Convolution을 팽창한 것과 같은 Convolution이 되어, 아래와 그림과 같이 표현된다. PyTorch에서는 nn.Conv2d에 dilation인수가 준비되어 있으며, 기본적으로는 dilation=1으로 설정되어 있다(아래의 그림은 dilation=2일때의 모습).
그 밖에도 공간 의존성을 학습시킨 것과 같은 STN이나, GCNet등이 있지만, 모두 효율성을 희생시키는 모델이다. 이러한 복잡한 방법보다 단순한 FReLU가 우수한 성과를 거두고 있기 때문에 놀라울 따름이다.
1.2.4 수용 영역(Receptive filed)
이미지 인식에 있어서, 수용 영역의 부분과 사이즈는 굉장히 중요한 역할을 하고 있으며, 결과에 대한 공헌도가 각 픽셀마다 다른 점이나 중심 부분의 픽셀의 영향력이 큰 것등은 연구에 의해 널리 알려진 사실이다. 따라서 Convolution에 대해 복잡한 도구나 Attention등을 조합하는 것으로 최적의 수용 영역을 학습 시키는 시도가 계속되어 왔다.
본 논문에서는 FReLU이라는 심플하고 효율적인 방법으로 최적화된 수용 영역을 학습시키고자 하고 있다. FReLU는 수용 역역을 비선형적인 활성화 함수의 안에 반영하는 방법으로, 복잡한 Convolution보다도 높은 성능을 보여 주고 있다.
1.3 Funnel Activation
드디어 이미지 인식 특성화형의 활성화 함수인 FReLU의 설명에 들어가도록 하겠다. FReLU의 큰 특징을 말하자면, 공간적 요소를 고려한 2차원의 Funnel Condition을 사용하고 있는 것이다. 더욱이 FReLU에 의해 픽셀마다의 모델링도 가능하다. Funnel Condition등에 대해서는 지금부터 자세히 설명하도록 하겠지만, 먼저 ReLU와 PReLU에 대해 복습해보자.
1.3.1 ReLU와 PReLU
먼저 왼쪽 그림은 ReLU이지만, 식은 max(x,0)이다. 특징으로써는 아래의 두 가지가 있다.
- 비선형으로 max(⋅)를 사용한다.
- 조건을 이용하여 0이라는 값은 인간이 결정한다.
여기서 발전된 것이 오른쪽의 PReLU이다. 식은 max(x,0)+p⋅min(x,0)이다. PReLU는 ReLU의 단점인 기울기를 0으로 하는 것이 아닌 학습 가능한 파라미터 p로 결정한다는 것이다(초기값p=0.25). 여기서 파라미터 p는 convolution의 각 채널 각각에 독립하여 존재한다.
p < 1이라는 조건에서, 이 PReLU는 max(x,px)으로 바꿔 쓸 수 있다. 이 변형에 대해 조금 더 자세히 설명하도록 하겠다. p < 1 이라는 조건으로 max(x,px)를 살펴보면, x가 x>px가 되면 그대로 출력되고, 반대로 px>x가 되면 px가 출력된다. 그러므로 p < 1에 의한 변형은 타당해보인다. 여기서 파라미터 p는 각 채널마다 존재하고, PReLU는 각 채널에 p를 곱한다. 각 채널마다 Convolution 조작을 가하는 Depthwise Convolution을 떠올리면, PReLU는 1x1 Depthwise Convolution으로 번역하는 것도 가능하다. ReLU와 PReLU는 각각 뉴럴 네트워크와 같은 그림으로 나타내면 아래와 같다.
1.3.2 Funnel Condition
FReLU는 ReLU의 가족으로 동일하게 max(⋅)를 채용하고 있다. FReLU에서는 2차원 공간을 고려한 조건으로 되어 있으며, 위 그림이 바로 그것을 표현한 것이다. 위 그림에서도 알 수 있듯, 2차원 공간의 함수 T(⋅)이란 단순히 Convolution을 계산하는 것이다. 깔때기와 같은 모양을 하고 있기 때문에 Funnel이라는 이름이 붙었다.
그럼 이제, FReLU를 수식으로 살펴보자. FReLU f(⋅)는 아래의 식으로 정의되어 있다 :
그러나,
여기서, xc,i,j는 이미지의 c번째의 채널의 위치 (i, j)를 의미하는 것이다. 그리고 T(⋅)는 2차원 공간의 공간의 함수로, Funnel Condition이라고 불리고 있다. Funnel Condition의 식에서 왼쪽의 첫 번째, xωc,i,j는 Parametric Pooling Window이라고 불리는 것으로, xc,i,j를 중심으로 한 kh×kw의 윈도우이다. 윈도우 사이즈는 기본적으로 3x3이다. pωc는 그 관계를 나타내고 있다. pωc는 PReLU와 동일하게 채널마다 다르다.
즉, 이 Funnel Condition은 단순히 Depthwise Convolution이라는 것을 알 수 있다.
1.3.3 픽셀당 모델링
위에서 정의한 Funnel Condition에 의해 각 픽셀에 대해 공간적인 요소를 고려한 조건(즉, T(⋅))를 학습할 수 있게 되었다. 이것은 즉 각 픽셀에 있어서 공간적 요소를 캡쳐할 것인가(T(xc,i,j)) 아니면 그 픽셀을 그대로 둘 것인가(xc,i,j)를 max(⋅)에 의해 판정될 수 있게 할 수 있다는 것이다. 이러한 방식으로 의해, 지금까지는 어떤 픽셀에서도 그대로의 형태로만 가져올 수 밖에 없었던 정보도, Funnel Condition에 의해 어떤 픽셀에서는 공간적인 요소를 캡쳐 혹은 다른 픽셀에서는 특별히 캡쳐하지 않고 그대로 할 것인가를 선택할 수 있게되어, 아래와 그림과 같이 어떠한 형태에 대해서도 대응할 수 있게 됐다. 이미지 내에 찍혀 있는 객체가 사각형인 경우는 사실 드물기 때문에, 이러한 특징은 이미지 인식 분야에 굉장히 도움이 될 수 있음을 알 수 있다.
1.4 구현
1.4.1 .이미지 분류
1.4.1.1 구현 조건
먼저, 이미지 분야 태스크에서 그 성능을 살펴보자. 데이터 세트로는 훈련 데이터 수가 128만장, 평가 데이터 수는 5만장인 ImageNet를 이용하였다. 모델로써는 다양한 사이즈의 ResNet과 경량 모델이다.
MobileNet/ShuffleNet를 이용할 때는 마지막 블록 이외 모두 ReLU를 FReLU등으로 바꿔 가면서 비교 실험을 하였다. 활성화 함수로써 ReLU와 FReLU이외에 PReLU와 Swish도 사용하여 비교하고 있다. 이 실험 조건은 아래의 표로 정리하였다. 모델 평가는 평가용 데이터 세트의 Top-1정밀도로 평가하였다.
파라미터 | 배치 사이즈 | 스텝 수 | 학습률 | 학습률 스케줄러 |
가중치 감쇠율 | 드롭 아웃률 |
값 | 256 | 60만 | 0.1 | 선형 스케줄러 | 1e-4 | 0.1 |
1.4.1.2 ResNet에 의한 비교
위 표가 ResNet-50/-101의 결과이다. 에러율이므로 낮을 수록 성능이 높다. FReLU가 제일 성능이 좋음을 알 수 있다. 베이스 라인의 ReLU와 비교하면, FReLU는 ResNet-50/-101의 각각 1.6%/0.7%의 효율 상승이 있었다. 또한, FReLU의 파라미터 수와 FLOPs을 보면 계산량의 면에서 문제가 없다는 것을 알 수 있다.
1.4.1.3. 경량 모델에 의한 비교
계속해서 경량 모델에서 그 결과를 살펴보자. 여기서는 MobileNet0.75(일반적인 MovileNet보다도 폭(=채널 수)이 적은 모델)과 ShuffleNetV2를 사용하였다. 위 표의 결과를 살펴보면, FReLU가 제일 낮은 에러율을 보여주고 있다. ShuffleNetV2에 있어서는 ReLU와 비교하여 2.5%성능 향상을 보여주고 있다. 여기서도 물론 계산량의 문제가 없었다.
1.4.2. 물체 검출
이미지 분류 태스크에서는 큰 폭으로 성능이 향상됐음을 확인했다. 그럼 계속해서 물체검출이다. 80개의 클래스를 가진 COCO 데이터 세트를 이용하였다. 모델은 RetinaNet을 이용하였고, 배치 사이즈는 2이다. 백 본 모델로써는 1.4.1.의 이미지 분류 태스크에서 학습시킨 모델들을 이용하였다.
위 표가 실험 결과이다. 특히, ResNet-50를 백 본으로 이용했을 때에는 FReLU가 ReLU/Swish에 비해 mAP에서 각각 1.4%/0.8%정도 이기고 있다는 것을 알 수 있다. 그 외에도 성능향상의 결과가 나타났음을 알 수 있다.
1.4.3 시멘틱 세크멘테이션
이미지 분류, 물체 검출까지 살펴보았고, 계속해서 시멘틱 세그멘테이션이다. 데이터 세트는 19개의 클래스가 있는 CitySpace를 이용하였다. 모델은 PSPNet으로, 8개의 GPU 각각에 배치 사이즈 2로 계산하였다. 백 본으로는 1.4.1에서 학습시킨 ResNet-50을 사용하였다.
위 표를 살펴보면, FReLU가 mean_IU가 최고의 성능을 보여주고 있음을 알 수 있다. 또한 클래스마다 살펴보면 train, bus, wall 등 큰 폭으로 성능이 향상됐음을 알 수 있다.
1.5 고찰
여기서부터는 절제 연구(Ablation study)로써 두 가지를 고려해본다.
- FReLU의 특성
- 다른 기존 방법과 FReLU의 상성
1.5.1 FReLU의 특성
FReLU는
1. Funnel Condition
2. 비선형 함수max(⋅)
이 두 가지로 구성되어 있다. 여기서는 이 두 가지 각각의 효과에 대해서 생각해보고자 한다.
1.5.1.1 Funnel Condition
먼저, FReLU에서는 공간적 의존성을 획득하기 위해서는 Funnel Conditon(즉 Depthwise Convolution)을 이용하지만, 애초부터 파라미터가 필요할까? 여기서는 Funnel Condition의 대신에 Max Pooling/Average Pooling을 이용해봤다. 모델은 ResNet-50로 위 표가 Image Net의 결과이다. 명확히 파라미터를 포함한 Funnel Condition가 제일 좋은 결과를 나타내고 있다.
한편으로, 구현에서도 Funnel Condition 직후에 배치 노말을 넣지만, 그 곳을 다른 레이어 Norm / 인스턴스 Norm/ 그룹 Norm을 넣은 경우 어떻게 될지를 실험해본 결과 표이다. 모델은 ShuffleNetV2로 여기서도 ImageNet의 이미지 분류이다. 레이어 Norm과 그룹 Norm에서 좋은 결과를 나타내고 있지만, 그렇다면 이 논문에서는 왜 배치 Norm을 일관적으로 사용하였을까. 그 이유를 필자에게 물어보니, 추론시간이 배치 Norm이 빨랐기 때문이라는 답변을 받았다.
1.5.1.2. 비선형 함수 max
FReLU에서는 비선형 함수로써 max(⋅)를 이용하고 있다. 이 max(⋅)함수는 아까 봤던 Funnel Condition을 사용하는 것으로 공간적인 의존성도 동시에 취득하고 있다. 비교대상으로는 비선형 함수 max(⋅)대신에 선형인 sum(⋅)를 사용한 경우와 단순히 DW(⋅)(=Depthwise Convolution)를 사용한 경우 두 가지를 이용했다. 위 표가 그 결과이다.
1.5.1.3 윈도우 사이즈
기본적인 윈도우 사이즈는 3x3이지만, 1×1,3×3,5×5,7×71×1,3×3,5×5,7×7로 각각 실험해 보았다. 또한, E와 F에서는 윈도의 형태를 정사각형이 아닌 1x3 과 3x1의 직사각형을 동시에 사용한 경우를 가정하고 실험을 해봤다. 그리고 이때 각각의 윈도우에서 Convolution한 결과를 1개로 정리하기 위해 Sum 혹은 Max를 사용한 경우도 비교 실험하였다.
위 결과에서 눈에 띄는 점은 두 가지이다.
- 3x3결과가 제일 좋다.
- 정사각형이 아닌 필터에서도 꽤 좋은 결과(F)를 얻을 수 있었다.
특히 두번째 결과에 대해서 윈도우가 정사각형이 아닌 1.3.3.에서 설명한 다양한 형태의 물체를 파악할 수 있음이라고 생각된다.
1.5.2 다른 기존 방법과 FReLU의 상성
FReLU를 실제로 사용할 때에 문제가 되는 것이, 과연 어떤 Convolution에 FReLU를 사용할 것인가이다. 더욱이 SENet등과 같이 기존의 방법과의 상성이 좋은지를 살펴볼 필요가 있다.
1.5.2.1 어떤 Convolution에서 FReLU를 사용할 것인가
먼저 어떤 Convolution 뒤에 FReLU를 넣어야 할 것인가에 대한 것이다. 여깃서는 1x1 Convolution 직후, 3x3 Convolution의 직후, 양쪽의 패턴으로 실험해봤다. 여기서 3x3 Convolution의 직후를 실험해보는 것은 알겠는데, 1x1 Convolution의 직후는 왜 실험해보는 것을까라고 의문을 가질 수 있을 거라고 생각한다. 이것은 ResNet-50은 Bottleneck 모듈 내에서 Mobilenet은 Depthwise Separable Convolution에서 1x1 Convolution을 사용하고 있기 때문이다. 위 표를 살펴 보면, 1x1 Conv 및 3x3 Conv 각각의 직후에 FReLU를 사용하는 것이 베스트라는 것을 알 수 있다.
더욱이, ResNet-50의 어떤 Stage에서 FReLU를 사용해야 베스트일까를 알아보았다. 이 논문에서 말하는 Stage는 위의 ResNet-50의 구조의 'layer_name'에 대응한다. conv1는 stage 1로 conv2_x가 stage2 라는 방식이다. 결과는 아래의 표와 같다. stage 5는 이미지 사이즈가 7x7로 작기 때문에 여기서는 고려하지 않는다. 모든 stage(2-4)에 FReLU을 넣는 것이 베스트임을 알 수 있다.
1.5.2.2 SE모듈과의 상성
SENet에서 사용되고 있는 SE모듈과 FReLU을 합쳐서 사용하는 경우에도 성능이 향상될지 실험해보았다. 여기서 SE모듈이란 무엇인가에 대해 간단히 말하자면, 어떤 채널이 중요한지 Attention으로 결정하는 모듈이다. 굉장히 단순하지만 도움이 되는 모듈이다.
이러한 SE 모듈과의 상성을 살펴보면, FReLU와 상성이 꽤 좋다는 것을 알 수 있었다.
1.6 결론
본 논문에서는 이미지 인식 특화형 활성화 함수인 FReLU를 제안하였다. 심플하고 효과적으로 다른 방법과의 상성도 좋은 FReLU는 이미지 인식 분야에 새로운 활성화 함수로써 활약할 것을 기대하고 있다.
참고자료
'IT > AI\ML' 카테고리의 다른 글
[python] 데이터 사이언티스트(데이터 분석가)에 도움이 되는 Tip : yield, partial, map, filter, reduce, enumerate (0) | 2021.08.03 |
---|---|
[python/Tensorflow] TFRecord를 만들어서 최소한의 CIFAR-10데이터로 학습시키기 (0) | 2021.07.30 |
머신러닝에서의 IoU(Intersection over Union)란? (0) | 2021.07.19 |
[python/Tensorflow2.x] TFRecord의 사용법 (0) | 2021.07.08 |
[python/openCV] openCV로 이미지 여백 삭제 (1) (0) | 2021.07.06 |