흔히 알고 있는 ResNet을 한 단계 성능을 향상시킨 논문을 소개 하겠습니다.
ResNeXt라고 알려져 있는 네트워크의 논문 제목은 Aggregated Residual Transformation for Deep Neural Networks라는 제목으로 2017년 CVPR에 올라왔습니다.
1. Introduction
이 논문에서 소개하는 architecture의 구성 방식은 VGG와 ResNet이 사용하는 방식인 같은 layer들을 반복하는 것이다. 추가적으로 inception에서 사용되는 것과 비슷한 1개의 input을 여러 방향으로 쪼개는 split transform merge방식을 이용한다.
Inception-ResNet과 다른 점은 각 path별로 같은 layer구성을 가지고 있다는 점이다. 이는 grouped convolution이라고 한다.
이전의 논문인 ResNet과 더 정확한 비교를 위해 FLOPs complexity를 유지한 상태로 위에 소개한 방식으로 네트워크를 구성하는것이다.
새로운 개념인 cardinality(C)를 소개한다. 이는 size of the set of transfomation이라고 한다. 자세한 것은 조금 뒤에 알아보도록 하자. Cardinality는 model을 더 wider, deeper하게 만드는 것보다 정확도면에서 더 큰 이득을 볼 수 있다. 예를 들어 ResNet - 200 보다 ResNeXt - 100을 비교 했을때, ResNeXt-100 네트워크가 accuracy면에서 성능이 더 좋을 뿐만 아니라, complexity가 50% 가량 더 낮다.
2. Related Work는 포스팅에서 생략하도록 하겠다.
3. Method
3.1 Template
Modularized가 잘 되어있는 VGG/ResNet 과 같은 방식으로 architecture를 구성한다고 하였다. (같은 block혹은 layer를 쌓는 방식) Network를 만들 때 2가지의 Rule이 있다. 이 Rule들을 VGG/ResNet에서 영감을 받았다고 한다.
Rule 1
위 그림의 오른쪽의 각 layer들은 width, filter size를 모두 공유한다. 또한 spatial map이 2의 크기로 down sampled가 일어날 때마다 width of block은 2배씩 늘어나게 된다.
Rule 2
모든 block들의 complexity를 비슷하게 설정한다. Complexity란 FLOPs(floating point operations)혹은 # of multi-adds 를 나타낸다.
3.2, 3.3 Revisting Simple Neurons + Aggregated Transformations
Depth를 증가시키는 방법을 사용하는 Network in Network(NIN)과는 반대로, Network in Neuron을 사용한다. 이것은 새로운 차원에 따라서 확장을 하게 된다.
위의 식은 ResNeXt Block을 나타내는 식이다.
y : output
x : input
T_i : can be arbitary function (이 논문에서는 1가지 path를 거치면서 수행하는 연산이라고 보면 된다.)
C : cardinality (T_i(x)를 1부터 C 까지 더하는 것으로 보아 위 그림의 (a)를 참고하면 될 것이다. C = 32)
3.4 Model Capacity
이 그림에서 왼쪽의 FLOPs를 계산해 보면 256*64 + 3*3*64*64 + 34*256 = 70 k 정도가 나온다.
오른쪽의 ResNeXt Block 또한 같은 output형태를 가지고 있다.
ResNeXt의 block의 FLOPs를 계산하는 식을 일반화 하게 되면, C * (256* d + 3*3*d*d + d*256) 이라고 계산이 된다.
비슷한 C = 32로 설정 한뒤 비슷한 FLOPs를 가지게 하기 위해서는 d = 4가 되어야 70k정도로 비슷하게 맞춰진다.
4. Implementation Datails
Data Used : ImageNet
Data Augmentation : 224*224 Randomly cropped from resized image
Short cut : ResNet의 방식 사용 (Type(b)사용)
Optimizer : SGD(learning rate 0.1) + weight decay(0.0001)
Conv block + Batch Normlization + ReLU
5. Experiments
Notations
cardinality = 32, bottle neck width = 4d를 가진 ResNeXt -50을 ResNext-50(32x4d)로 간단하게 나타낸다.
Cadinality vs Width
Cardinality와 bottle neck width 의 trade off에 대해 먼저 살펴 보았다.
먼저 50 layer들에 대한 결과를 살펴보자. ResNet 50의 top 1 error는 23.9% 이다. ResNext - 50 과 비교를 해본다면, 모두 ResNet- 50 보다 더 높은 성능을 나타내고 있다. 또한 cardinality가 커짐에 따라서 top1 error가 더 낮아짐을 확인 할 수 있다.
또한 101 layer들에 대해서도 비슷한 양상을 가지는 것을 확인 할 수 있다.
Increasing Cardinality vs Deeper/Wider
위의 표는 cardinality를 증가시키는것, 혹은 deeper/wider중 어떤 것이 더 좋은 모델인지를 평가를 하기 위한 표이다. 먼저 1 x complexity 는 Base line(아무것도 처리하지 않은 모델)이라고 보면 된다.
2 x complexity를 비교해 보자. 먼저 ResNet 200과 ResNet 101 wider이다. 여기에서는 layer의 깊이를 Deep하게 만드는 것보다 dimension을 wider하게 만드는 것이 좋다는 결과가 나온다.
다음으로는 ResNeXt101 (2x64d)와 ResNeXt101(64x4d)를 비교해 보자. 여기에서는 wider 하게 만드는 것보다 cardinality를 더 크게 설정 하는 것이 model의 performance에 더 좋은 영향을 끼치는 것을 확인 할 수 있다.
Residual Connections
비교를 하는 가장 마지막은 Residual connection인데, 사실 이 비교를 왜 하였는지는 잘 모르겠다. 이 논문에서도 다시한번 Residual connection의 중요함을 소개하기 위함인것 같다.
이후의 논문의 내용은 Dataset별로 성능을 나타내는 것이기 때문에 스스로 읽어보는 것을 추천한다.