안녕하세요! 이번에 읽어볼 논문은 CondenseNet: An Efficient DenseNet using Learned Group Convolution 입니다.
CondenseNet은 경량화에 집중한 모델로서, DenseNet보다 10배 적은 연산량으로 비슷한 정확도를 갖는 모델입니다. 또한 다른 경량화 모델인 MobileNet, ShuffleNet, NasNet 보다 낮은 연산량으로 높은 정확도를 달성합니다! CondeseNet은 prunning 방법인 Learned Group Convolution을 제안하고, DenseNet의 구조를 수정하여 feature reuse를 효과적으로 활용합니다. 이제 CondenseNet을 알아보도록 하겠습니다.
DenseNet과 Group Convolution의 문제점
CondenseNet은 ResNext에서 제안되었고 경량화 모델에서 사용하는 Group Convolution와 DenseNet의 문제점을 개선하기 위해 탄생한 모델입니다. 따라서 논문에서는 DenseNet과 Group Convolution의 문제점을 언급합니다.
DenseNet은 feature reuse를 활용하기 위해 레이어의 피쳐맵을 다음의 모든 레이어에 연결했었습니다. 하지만 초기의 특징은 나중의 레이어에서 그다지 필요하지가 않습니다. 이를 개선하기 위해 레이어와 레이어간의 불필요한 연결을 찾아내서 prunning 합니다. 이 방법은 training 과정에서 진행되며 좀 더 효율적인 구조를 만듭니다. prunning 하는 방법은 learned group convolution 방법을 사용하는데, 아래에서 살펴보도록 하겠습니다.
1x1에서 group convolution을 적용하는 것은 오히려 성능을 저하시킵니다. 저자는 이유를 다음과 같이 설명합니다. 1x1 conv layer의 입력값은 이전 레이어에서 생성된 피쳐맵들이 연결된 것입니다. 따라서 이 연결된 피쳐맵들은 고유한 순서를 갖고 있습니다. 그리고 이 특징들은 매우 다양합니다. 이를 개선하기 위해서 group convolution을 적용하기 전에 입력값들을 임의로 permute(순열보다는 변경하다로 해석하는게 맞는 것 같습니다.) 합니다.
Learned Group Convolution
Learned Group Convolution은 각 filter group이 가장 연관성 있는 input을 선택할 수 있도록 합니다. 그 외에 나머지 input은 사용하지 않는 것입니다. group convolution은 Condensing stage에서 prunning되고, Optimization Stage에서 prunning된 모델이 학습되고, Testing에는 Index Layer를 사용하여 prunning weight만 사용해 inference 합니다.
(1) Condensing Stage
학습의 반은 Condensing Stage로 구성됩니다. Condensing Stage에서는 아래와 같은 과정을 진행합니다.
Filter Group
일반적인 convolution의 가중치 4D tensor (OxRxWxH)을 얻습니다. O는 input channels, R은 output channels, W와 H는 feature map 너비와 높이입니다. 1x1 conv에서 이 4D tensor가 OxR 행렬로 축소됩니다. 이 행렬을 F라고 하겠습니다. 학습이 시작하기 전에, 1x1 conv filter를 G개의 그룹으로 나눕니다. 그러면 F 행렬이 G로 분할되어 O/GxR 행렬이 됩니다.
Condensation Criterion
학습 과정동안 각 그룹에서 덜 중요한 입력 값들을 점진적으로 차단합니다. 각 그룹의 열에 대해서 L1-norm을 수행합니다.
다른 열의 L1-norm보다 L1-norm이 작은 열은 제거합니다. F행렬에서 열은 입력값 채널을 의미합니다. 이 작업은 layer를 sparse하게 만듭니다. 동일한 그룹에서 filter들은 동일한 입력값만 받게 됩니다.
Group Lasso
Group Lasso는 강력한 정규화 방법입니다. Group Lasso를 적용하여 상대적으로 덜 중요한 값들을 0으로 만듭니다.
따라서 j열은 중요한 값들만 남게 됩니다. 이는 layer를 sparsity하게 만듭니다.
Condesation Factor
각 스테이지에서 filter weight의 1/C가 prunning 됩니다. 위 그림에서는 3개의 스테이지가 존재하므로 C=3 입니다. 그리고 C-1=2개의 condensing stage로 이루어져 있습니다. 2개의 condensing stage에서 prunning 되므로 최종적으로 1/C의 weight만 남게 됩니다. Condensing stage에서 학습 epoch 수를 M/2(C-1)로 설정합니다. M은 전체 epoch 입니다.
(2) Optimization stage
Condensing stage을 거치면 각 그룹은 강력한 feature map만 연결됩니다. prunning된 모델을 Optimization stage에서 fine-tunning합니다.
(3) Testing
Tesinig시에는 Index Layer를 활용해서 group convolution을 수행합니다. 각 group은 중요한 가중치만 남아있기 때문에 적은 연산량으로 inference를 수행합니다. Index layer는 각 그룹의 feature index를 지정하는 역할을 합니다. 위 그림을 보면 학습 시에는 L-Conv를 사용하고 테스팅할 때는 G-Conv를 사용합니다.
CondenseNet Architecture
CondenseNet은 DenseNet에서 두 가지 변화를 주었습니다.
(1) Exponentially increasing growth rate
DesNet에서 growth rate만큼의 필터 수를 다음 모든 레이어에 연결했습니다. CondenseNet은 초기 특징이 후반부의 레이어에 그다지 도움이 되지 않는 점을 개선하기 위해 growth rate를 깊이에따라 기하급수적으로 증가시킵니다. 논문에서는 growth rate를 $k=2^{m-1}k_0$로 설정합니다. m은 dense block의 index이고, $k_0$은 상수입니다.
(2) Fully dense connectivity
DenseNet은 Dense Block 내에서만 레이어의 피쳐맵을 연결했습니다. CondenseNet은 모든 Dense Block에서도 피쳐맵을 연결합니다. 서로 다른 dense block에 위치한 레이어도 연결되는 것입니다. 그리고 average pooling으로 피쳐맵 크기를 동일하게 조정합니다.
아래 표는 CondeseNet의 전체 구조입니다.
Performance