안녕하세요. 지난 포스팅의 [IC2D] CBAM: Convolutional Block Attention Module (ECCV2018)에서는 RAN, SE Block, BAM에 이어 유명한 어텐션 모듈 중 하나인 CBAM에 대해서 말씀드렸습니다. 오늘은 ResNet과 DenseNet 사이의 관계를 고계 순환신경망 (Higher Order Recurrent Neural Network; HORNN)을 이용해 확인하고 두 구조적인 장점만을 융합한 Dual Path Network에 대해서 알아보도록 하겠습니다.
Background
기본적으로 ResNet 계열 논문들의 가장 큰 특징은 skip connection을 사용한다는 점 입니다. 최근 논문들은 이 skip connection을 어떤 식으로 바꾸는 지 집중하는 편이죠. skip connection을 활용하더라도 크게 두 가지 방식으로 사용하게 됩니다. 바로 ResNet과 DenseNet이죠. 이전 논문 리뷰에서 말씀드렸지만 ResNet은 skip connection을 통해 identity path과 residual path 사이의 원소별 합을 수행합니다. 이를 기반으로 Wide ResNet, Inception-ResNet, ResNext 등의 논문들이 제안되었죠. 반면에 DenseNet은 concat 연산을 통해 이전 계층의 특징 맵들을 다시 가져옵니다.
하지만, 두 계열의 모델 모두 사실은 새로운 관점에서는 동일한 모델에서 왔다는 것을 확인해볼 수 있습니다. 이를 위해 본 논문에서는 HORNN의 수식전개를 통해 증명하죠. 이를 기반으로 ResNet과 DenseNet의 본질적인 한계에 대해서 설명하고 두 한계를 극복하기 위한 새로운 모델인 Dual Path Network (DPN)를 제안합니다.
ResNet vs DenseNet
수식 전개를 위해 다음 노테이션을 먼저 정의합니다.
- $h^{t}$: RNN의 $t$ 번째 스텝에 해당하는 은닉 상태
- $k$: 현재 스텝
- $x^{t}$: $t$번째 스텝의 입력 특징으로 $h^{0} = x^{0}$
- $f^{k}_{t}( \cdot )$: 은닉 상태를 입력 및 출력하는 특징 추출 함수
- $g^{k} ( \cdot )$: 이전 은닉 상태들의 정보를 현재 스텝의 은닉 상태로 변환하는 함수
이를 통해 아래와 같이 HORNN의 수식을 쓸 수 있습니다.
$$h^{k} = g^{k} \left[ \sum_{t = 0}^{k - 1} f^{k}_{t} (h^{t}) \right]$$
이제부터 저희는 이 수식으로부터 DenseNet을 먼저 분석해보도록 하겠습니다. 기본적으로 HORNN은 모든 스텝의 파라미터들이 서로 공유합니다. 모든 $t$와 $k$에 대해서 $f^{k}_{k - t} = f_{t}$ 이고 모든 $k$에 대해서 $g^{k} = g$라고 할 수 있습니다. 하지만, DenseNet에서는 서로 파라미터를 공유하지 않죠. 이러한 결과는 RNN 관점에서 DenseNet이 이전 상태로부터 새롭고 많은 정보를 추출할 수 있다는 것을 의미합니다. 또한, 위 조건에 따라서 HORNN은 DenseNet의 특별한 경우라고 할 수 있죠.
다음으로 ResNet을 분석하기 위해 모든 $t$와 $k$에 대해서 $f^{k}_{t} = f_{t}$라고 가정하겠습니다. 그리고 편의를 위해 $r^{k}$를 중간 계산결과라고 가정하면 저희는 HORNN 수식을 다음과 같이 정리할 수 있습니다.
$$\begin{cases} &r^{k} = \sum_{t = 0}^{k - 1} f_{t} (h^{t}) = r^{k - 1} + f_{k - 1} (h^{k - 1}) \\ &h^{k} = g^{k} (r^{k}) \end{cases}$$
위 수식에 따르면 $h^{k - 1} = g^{k - 1} (r^{k - 1})$임을 알 수 있죠. 이를 대입해보면 다음과 같이 쓸 수 있습니다.
$$\begin{align*} r^{k} &= r^{k - 1} + f_{k - 1} (h^{k - 1}) \\ &= r^{k - 1} + f_{k - 1} (g^{k - 1} (r^{k - 1})) \\ &= r^{k - 1} + \phi^{k - 1}(r^{k - 1}) \end{align*}$$
이때, $\phi^{k} = f_{k} (g^{k})$를 의미합니다. 정리하면 $r^{k} = r^{k - 1} + \phi^{k-1} (r^{k - 1})$임을 알 수 있죠. 재밌는 점은 $r_{k - 1}$ 항은 identity path이고 $\phi^{k - 1} (r^{k - 1})$은 residual path라고 생각해볼 수 있겠죠? 따라서, ResNet 역시 HORNN을 통해 바꿔서 생각해볼 수 있다는 점 입니다. ResNet을 설명하기 위한 조건에 따르면 저희는 모든 $t$와 $k$에 대해서 $f^{k}_{t} = f_{t}$라고 가정하였기 때문에 ResNet 계열 모델들은 DenseNet 계열에 속한다는 사실을 알 수 있습니다.
위와 같은 사실들을 통해 ResNet과 DenseNet의 특징들을 정리해보면 다음과 같습니다.
1). ResNet 계열 모델
모든 스텝에서 $f^{k}_{t}$를 공유하기 때문에 $g^{k}$는 동일한 특징을 입력 받아 출력 상태를 얻을 수 있다. 이러한 구조는 특징 맵의 재사용 (feature usage)을 촉진하고 불필요한 특징 맵 (feature redundancy)를 줄이는 효과를 가져다 준다. 하지만, 각 스텝에서 파라미터들이 공유하기 때문에 다양한 특징들을 추출하는 데 한계가 있다.
2). DenseNet 계열 모델
조밀하게 연결된 모델들은 모든 스텝에서 서로 다른 파라미터를 가지기 때문에 이전 스텝으로부터 새로운 정보를 많이 출력할 수 있다. 하지만, 불필요한 특징 맵 역시 많이 나올 가능성이 있어 계산량이 많아지게 된다.
Dual Path Network
따라서, Dual Path Network의 목적은 ResNet의 특징 재사용 (feature reusage) 능력과 DenseNet의 새로운 특징을 추출할 수 있는 능력을 결합하는 것 입니다. 이를 위해 본 논문에서는 위 그림에서 (d)와 같이 오른쪽에는 ResNet, 왼쪽에는 DenseNet을 두어 두 개의 path를 가진 모델이 존재하게 됩니다. 이를 통해 각 경로로부터 ResNet과 DenseNet의 장점을 모두 활용할 수 있는 것이죠. 하지만 실질적으로는 모델의 구현을 쉽게 하기 위해 (e)와 같이 구현되었다고 합니다. 하지만 본질적으로는 ResNet과 DenseNet을 모두 사용하고 있는 것을 볼 수 있죠.
표1은 DenseNet, ResNext 그리고 DPN의 configuration을 보여주고 있습니다. DPN 역시 사용하는 각 스테이지 내의 블럭 개수에 따라 다양한 구조를 생각해볼 수 있습니다. DPN은 제가 설명드린 것 말고도 모델의 성능 및 효율성을 올리기 위한 다양한 방법을 적용하였습니다. 대표적으로 WRN에서 사용한 width의 증가와 함께 ResNext에서 사용한 Group Convolution 역시 사용하였습니다. 이를 통해 파라미터의 개수는 ResNext와 비교해보았을 때 약 15%가 줄고 FLOPs는 25% 정도 더 감소한 것을 볼 수 있습니다.
Experiment Results
본 논문에서는 DPN의 성능을 확인하기 위해 Image Classification (ImageNet-1K, Place365-Standard Dataset), Object Detection (PASCAL VOC 2007), Semantic Segmentation (PASCAL VOC 2012)에 대한 실험을 진행하였습니다. 저희는 간단하게 ImageNet-1K에서의 실험결과만 보도록 하죠.
표2는 ImageNet-1K에서의 실험결과입니다. 본 논문에서는 당연히 DenseNet 및 ResNet을 포함해 ResNext, Inception-ResNet, PolyNet과의 성능을 비교하였습니다. 실험결과는 성능 자체는 +0.2% ~ 0.5%의 향상 정도로 높은 편은 아니지만 모델 크기, 복잡도 면에서도 아주 효율적인 것을 볼 수 있습니다.
실제로 Speed, Cost, Top-1 Error에 대한 상관성을 비교해보면 굉장히 효율적인 모델이라는 것을 알 수 있습니다.
'논문 함께 읽기 > 2D Image Classification (IC2D)' 카테고리의 다른 글
[IC2D] Searching for MobileNetV3 (ICCV2019) (0) | 2023.09.11 |
---|---|
[IC2D] Progressive Neural Architecture Search (ECCV2018) (0) | 2023.09.05 |
[IC2D] CBAM: Convolutional Block Attention Module (ECCV2018) (0) | 2023.07.15 |
[IC2D] BAM: Bottleneck Attention Module (BMVC2018) (0) | 2023.07.05 |
[IC2D] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (PMLR2019) (0) | 2023.06.30 |