기존 문제: 고해상도 이미지에 대규모로 CNN을 적용하기에는 여전히 많은 연산량이 소모된다. 이와 함께 적은 데이터셋이 있으니, 과적합을 막아야 한다.
핵심 아이디어
1. 학습 최적화
2. 과적합 방지
구조
총 레이어가 8개이다.
기존 문제: CNN의 성능을 향상시키기 위해 Layer에 있는 unit 수를 늘리면 overfitting, 연산량 증가 등의 문제가 생김
핵심 아이디어
구조
총 레이어가 22개이다.
기존 문제: deep한 네트워크를 위해 레이어만 늘린다고 성능이 좋아지지 않는다. Training도 잘 되고 test도 잘 되는데 성능이 잘 안나오는 degradation이 발생할 수 있다.
핵심 아이디어
1. Residual learning building block(배운 내용. 깃허브 참조)
: 입력 x가 들어가고 입력 x 값에 출력값을 더해 보낸다. 이렇게 하기 위해 입력과 출력의 차원을 맞춰준다.
(깃허브도 참조)
구조
총 레이어가 152개이다.
ResNet에서 제기된 문제점: 이전 레이어의 output을 다음의 레이어의 output과 합해서 더한다는 점에서, ResNet은 정보들이 이후의 레이어들로 온전히 흘러가는 것을 방해할 수 있다는 약점이 있었다.
핵심 아이디어
DenseNet에서는 아래 그림처럼 모든 이전 레이어의 output 정보를 이후의 레이어의 input으로 받아오는 방법을 사용했다.
이전 layer들의 feature map을 계속해서 다음 layer의 입력과 연결하는 아이디어는 ResNet과 같은데 ResNet에서는 feature map끼리 더하기를 해주는 방식이었다면 DenseNet에서는 feature map끼리 concatenation을 시켜주는 것이 가장 큰 차이점이다.
물론 layer사이에 연결되는 방식도 다르다.
(ResNet은 바로 직전의 Resudual block에서만 connection이 연결되었지만 DenseNet는 Dense Block 내에서는 l번째 layer 이전의 모든 layer(l−1,...,1,0)에 연결이 된다.)
Growth Rate
: 각 feature map끼리 densely 연결이 되는 구조이다 보니 자칫 feature map의 channel 개수가 많은 경우 계속해서 channel-wise로 concat이 되면서 channel이 많아 질 수 있다. 그래서 DenseNet에서는 각 layer의 feature map의 channel 개수를 굉장히 작은 값을 사용하며, 이 때 각 layer의 feature map의 channel 개수를 growth rate(k) 이라 부른다.
출처
https://rubber-tree.tistory.com/entry/AI%EB%94%A5%EB%9F%AC%EB%8B%9D-CNN-Network-layer-%EB%AA%A8%EB%8D%B8%EB%93%A4-AlexNet-GoogLeNet-ResNet
https://velog.io/@lighthouse97/DenseNet%EC%9D%98-%EC%9D%B4%ED%95%B4