DenseNet

Xpert·2024년 3월 12일
0

모델 아키텍쳐

목록 보기
3/7

이름 그대로 Dense 하게 모든 레이어를 연결하는 네트워크이다.
깊이를 늘려나가는 방식 위주로 탐구되던 VGG와 skip connection 개념을 도입한 ResNet 이후에 만들어진 네트워크라서 특히 ResNet과 많이 비교된다.

connectivity

논문에서는 connectivity (연결성) 라는 표현을 쓰면서 이것이 dense할수록 information flow (정보 흐름) 가 좋아진다고 한다.
y = F(x) + x 구조를 가지는 기존의 ResNet Connectivity 에서

아래와 같이 Dense Connectivity로 만들어주어

신경망의 정보 흐름을 향상 시켰다고 한다.
→ add 연산이 아닌 concat 연산 적용

Dense Block

전체가 Dense 한 네트워크는 아니고, Dense한 Block 여러개를 Transition Layer로 이어주는 구조이다. Transition에서는 Pooling을 수행한다.
theta라는 파라미터에 따라 transition layer의 출력 차원을 결정할 수 있으며,
output channels = theta * input channels
이다. 기본 theta = 0.5로 설정하였다고 한다.

Growth Rate

Dense Block의 각 레이어는 k0 + k * (l-1) 개의 입력값을 갖는다.
k0은 입력 레이어의 채널 수 이며, I는 몇번째에 위치했는지를 의미한다.
k가 Growth rate인데 기본 값은 12이며, 각 레이어가 전체에 어느 정도 기여를 할지 결정한다. 즉, k가 높을수록 connectivity 강해진다고 볼 수 있다.

Bottle Neck


ResNet에서 사용된 Bottle Neck은 위와 같이 중간에 1x1 Conv를 끼워서 채널을 줄이고 늘이는 용도이다. 1x1 conv로 채널을 줄이고 3x3 conv 수행하여 피쳐를 뽑고 다시 1x1 conv로 늘려서 파라미터를 줄이는 테크닉이다.

DenseNet에서의 bottleneck은 이와는 약간 다른데, 1x1 conv에서 4k (k=growth rate라고 위에 언급하였음) 만큼을 출력하고, 3x3 conv에 이를 입력 후 최종적으로 256이 아닌 k개의 피쳐맵을 출력하는 점이 다르다.

Architecture 구조

전체적인 구조를 정리하면 Dense Block과 Transition Layer가 D-T-D-T-D-T-D 형태로 쌓여있고, 마지막에는 classification layer로 출력된다.

장점

  • 네트워크가 Dense하므로, 앞쪽 정보가 뒤쪽까지 원활하게 전달될 수 있다. 이로 인해 information flow가 높고, 역전파를 수행할때 ResNet과 유사하게 vanishing gradient도 방지할 수 있으며, 전체적인 연결성이 높으므로 전체적으로 정규화되는 효과도 있다.
  • 기본적으로 채널 수가 작아서 파라미터 수도 적다. 즉, 연산량도 적다. bottleneck에서도 k=12로 가정하면 256, 48, 12로 채널 감소하는 효과가 있다.
  • 결과적으로 더 적은 파라미터 갯수로 기존 ResNet에 비해 성능이 좋아졌다.
profile
Python, CV, ML, Backend

0개의 댓글

관련 채용 정보