DenseNet과 SENet의 핵심아이디어 살펴보기

1. DenseNet

 

ResNet은 skip connect 과정에서 더했다면 DenseNet은 concatenation을 한다.

 

 

왜 이런 아이디어를 생각했을까?

 

둘을 더하면 x와 f(x)의 정보가 어떻게든 섞일테니까 concatenation으로 정보를 보존하면서 그냥 합치고 싶은 것이다.

 

문제는 둘을 단순히 합치는 concatenation은 parameter 수를 기하급수적으로 늘림

 

DenseNet의 concatenation

feature 특성을 더하면서 섞지말고 그대로 가져옴

 

그래서 중간마다 1*1 convolution을 통해 parameter 수를 줄이는 것이 핵심이다

 

dense block에서 concatenation으로 channel을 계속 늘려가면서 feature map을 그대로 가져옴.

 

너무 늘어나면 1*1 convolution 연산을 통해 channel을 감소시키는 transition block 연산을 반복함.

 

classification에서 stable한 성능을 보여준다

 

dense block과 transition block 설명

 

----------------------------------------------------------------------------------------------------------------------------

 

ResNet이 skip connection 방식으로 단순히 input과 output을 더했다면 DenseNet은 channel축으로 concatenation했다

 

무슨 차이가 있을까?

 

단순히 더하는 것은 두 신호의 원래 성질이 변형될 수 있는데 concatenation을 하면 두 신호를 그대로 보존하면서 가지고갈 수 있다

 

그러면서 상위 layer에서 필요할때 하위 layer의 feature 참조시 쉽게 사용가능하다

 

그러나 channel 수가 증가하면서 메모리나 계산복잡도가 증가한다

 

ResNet과 또 다른 차이는 단순히 이전 input만 가지고 온 것이 아니라 그 이전, 더 이전, 훨씬 이전의 input도 전부 가지고 오는 dense한 설계

 

 

현재 output은 그 이후 layer에 모두 넘겨주는 설계방식

 

gradient vanishing도 줄어든다고 하는데 직관적으로 layer끼리 연결되어있어서 gradient가 끝까지 잘 전달될수 있어서 그렇다

 

 

1-1) 코드 구현

 

AI_Data_Note/model/DenseNet.ipynb at main · yundaehyuck/AI_Data_Note (github.com)

 

------------------------------------------------------------------------------------------------------------------------------------

 

2. SENet

 

현재 주어진 activation map에서 channel간 중요도를 파악하여 중요한 곳에 새롭게 가중치를 두고자 했다

 

global average pooling으로 activation map의 각 채널별 평균정보만 가지도록 압축시키는 squeeze 연산

 

squeeze연산

 

global average pooling으로 activation map의 채널별 평균 정보를 가지는 channel distribution을 구함

 

이제 channel distribution을 fully connected layer에 집어 넣어 channel간 연관성을 고려한 attention score를 계산함

 

W가 FC layer의 가중치

 

위에서 구한 attention score를 이용하여 가지고 있던 activation map을 rescaling하는 것이 excitation 연산이다.

 

excitation연산

 

중요한 channel은 강조하고 그렇지 않은 건 0에 가깝게 하여 없애고

TAGS.

Comments