본문 바로가기
Machine-Learning/CV (Computer Vision)

[CV] ResNet

by AteN 2022. 10. 11.

ResNet의 주요 개념 

 

ResNet은 네트워크를 얼마나 깊이 쌓을 수 있을까라는 의문에서 시작되었고, 해당 논문의 연구자들은 일정 수준 이상의 깊이가 되면 오히려 얕은 모델보다 깊은 모델의 성능이 더 떨어진다는 점을 발견했습니다. 그래서 이 문제를 해결할 방법으로 잔차 학습(residual learning)이란 방법을 제시했고 이를 구현한 ResNet으로 2015년 이미지 대회에서 우승했다.

아이디어는 꽤 단순하다. 특정 위치에서 입력이 들어왔을 때 합성곱 연산을 통과한 결과와 입력으로 들어온 결과 두가지 더해서 다음 레이어에 전달하는게 ResNet의 핵심이다. 즉 입력 값을 출력 값에 더해 줄 수 있도록 지름길 (shortcut)을 하나 만들어준 것 뿐이다.

잔차 학습 블록은 이전 단계에서 뽑았던 특성들을 변형시키지 않고 그대로 더해서 전달하기 떄문에 입력 단에 가까운 곳에서 뽑은 단순한 특성과 뒷부분에서 뽑은 복잡한 특성 모두를 사용한다는 장점을 가지고 있다. 또한 더하기 연산은 역전파 계산을 할 때 기울기가 1이기 때문에 손실이 줄어들거나 하지 않고 모델의 앞부분까지 잘 전파되기 때문에 학습 면에서도 보조 분류기가 필요하지 않다는 장점도 있다 

모델의 깊이는 VGG 네트워크보다 더 깊어졌고, 논문에서는 레이어를 152개까지 사용했다. 따라서 모델의 크기도 커졌고, 이에 따라 ResNet 연구자들도 1x1 합성곱을 활용했다. 다만 좀 다른 형태로 적용했고 여기에 보틀넥(병목) bottleneck 이라는 이름을 부쳤습니다. 

보틀넥 블록은 먼저 1 x 1 합성곱으로 채널 방향 압축을 한다. 그리고 이 압축된 상태에서 3x3 합성곱으로 추가 특성을 뽑아내고 다시 1x1합성곱을 사용해 채널 수를 늘려준다. 이렇게 함으로써 변수 수를 줄이면서도 원하는 개수의 특성을 뽑을 수 있도록 했다 

앞의 네트워크 구조를 다시 보면 잔차 블록의 형태가 두가지 인 것을 확인할 수 있다 

 

댓글