[DL] ResNext

·2023년 8월 31일
0
post-custom-banner

ResNeXt는 동일한 형태의 연산을 사용하여 얻은 값을 합산하는 "빌딩 블록"을 반복하여 네트워크를 구축하는 방식을 채택합니다. 이때 새로운 개념으로 "Cardinality"가 소개되는데, Cardinality는 동일한 빌딩 블록의 변환을 적용한 수의 개수를 나타냅니다. 이는 네트워크의 깊이와 너비와 더불어 중요한 요소로 간주됩니다. 논문은 제한된 복잡성을 유지하면서 Cardinality를 다양하게 조절하여 실험합니다. 결과적으로, 동일한 복잡성에서 더 많은 Cardinality를 적용하는 것이 깊게 쌓거나 넓게 쌓는 것보다 더 나은 성능 향상을 얻을 수 있다는 것을 보여줍니다. ResNeXt 모델은 ILSVRC 2016 이미지 분류 대회에서 2등을 차지하게 되었으며, COCO 객체 감지와 같은 데이터셋에서도 ResNet보다 우수한 성능을 보여주었습니다.

ResNeXt의 구조

ResNeXt의 구조는 기존의 Inception 모델과 유사한 면이 있습니다. Inception은 여러 가지 방향으로 분기되는 입력 데이터에 대해 독립된 네트워크를 사용하는 것으로 알려져 있습니다. 이와는 달리, ResNeXt에서는 동일한 형태의 빌딩 블록을 여러 번 반복하여 네트워크를 구성합니다. 이런 빌딩 블록은 Cardinality의 개수에 따라 다양한 경로로 변환을 적용하며, 이후에 이러한 변환된 값들을 합치게 됩니다.

즉, ResNeXt는 하나의 빌딩 블록을 여러 Cardinality로 분리하여 처리하고 나중에 이들을 결합하는 방식을 사용합니다. 이와 비교해서 Inception은 입력 데이터가 다양한 방향으로 분기될 때 각 분기마다 다른 형태의 네트워크를 사용합니다. 이것이 ResNeXt와 Inception의 주요 차이점 중 하나입니다. ResNeXt는 일종의 "앙상블" 개념을 도입한 것으로 볼 수 있습니다.


Inception 모듈은 성능이 우수하지만 필터의 수, 커널 크기 등 많은 하이퍼파라미터가 고려되어야 하는 문제가 있습니다. 이로 인해 새로운 데이터셋에 Inception 모듈을 적용할 때 어떻게 하이퍼파라미터를 설정해야 하는지 결정하기가 어려울 수 있습니다.

이러한 문제를 해결하기 위해 ResNeXt 논문에서는 매우 간단한 모듈을 사용하였습니다.여기서 "group"의 개수가 "카디널리티(Cardinality)" 값과 일치합니다. 위 그림 (c)에서 group의 개수가 cardinality 입니다.


위 ResNeXt-50 모델에서 "카디널리티(Cardinality)"는 한 모듈 내에서 3x3 합성곱 그룹의 개수를 의미합니다.

split-transform-merge strategy

ResNext의 블록 내 연산과정은 가중합(weighted sum) 연산과 매우 유사한 구조를 가지고 있습니다.

먼저, 입력 벡터 xx를 다음과 같이 나타냅니다.
x=[x1,x2,...,xD]

여기서 DD는 채널의 개수입니다. 각각의 ii 번째 Conv 레이어를 wi 로 나타내면, ResNext의 모듈 내 연산은 이와 같은 가중합 구조를 따르는 것으로 요약할 수 있습니다. Σi=1DWixi 이렇게 나타내면, 입력 벡터 xx 의 각 채널에 대한 가중합을 계산하고 합산하여 최종 결과를 얻게 됩니다.

위의 연산은 다음과 같이 세 가지 단계로 나누어 생각할 수 있습니다.

  1. Splitting (분할): 입력 벡터xx는 낮은 차원으로 임베딩됩니다. 이는 1x1 Conv 연산을 통해 채널의 개수가 줄어드는 과정입니다.

  2. Transforming (변환): 낮은 차원의 벡터가 wixiw_i x_i 형태로 변환됩니다. 이는 3x3 Conv 연산을 통해 feature map 연산을 수행하는 단계입니다.

  3. Aggregating (통합): 변환된 결과들이 하나로 합쳐집니다. 이는 여러 3x3 Conv 결과들을 concatenate하는 단계입니다.

이와 같은 세 가지 단계로 ResNext의 블록 내 연산을 요약할 수 있습니다.

Model Capacity

논문에서는 파라미터 수와 복잡성을 유지한 상태로 모델의 정확도를 향상시키는 방향으로 실험을 진행했습니다. 기존의 ResNet 블록의 파라미터 수를 계산해보면, 256×64+3×3×64×64+64×256256 \times 64 + 3 \times 3 \times 64 \times 64 + 64 \times 256으로 약 69,632개의 파라미터가 있는 것을 얻을 수 있습니다. 그에 비해 ResNeXt의 파라미터 수를 계산해보면, 32×(256×4+3×3×4×4+4×25632 \times (256 \times 4 + 3 \times 3 \times 4 \times 4 + 4 \times 256으로 70,144개의 파라미터가 있는 것을 얻을 수 있습니다. 파라미터 수는 크게 차이 나지 않지만, 구조를 변경하여 얻은 결과는 큰 성능 향상을 보여줍니다.

Cardinality vs Deeper/Wider


기존의 ResNet을 200 레이어까지 쌓았을 때, 101 레이어보다 약간의 성능 향상이 있었으나, ResNeXt보다는 미세한 성능 향상에 그쳤습니다. 또한 채널 수를 늘려서 실험한 결과로 보아, 동일한 파라미터를 가진 ResNeXt의 101 레이어 버전이 더 우수한 성능을 보였습니다. 이러한 실험을 통해 깊게 쌓거나 채널 수를 늘리는 것보다 Cardinality를 증가시키는 방식이 더 효과적임을 확인하고 있습니다




📌 출처

Aggregated Residual Transformations for Deep Neural Networks
[Resnext] Aggregated Residual Transformations for Deep Neural Networks : SOOHOCODE
[논문 정리] ResNext : imlim
profile
개발하고싶은사람
post-custom-banner

0개의 댓글