4주차는 data augmentation, ResNet, semantic segmentation을 직접 구현해 보았다.
Deep Residual Learning for Image Recognition
ResNet은 위의 residual mapping 이 핵심이다. 기존 네트워크인 H(x) 그대로보다 residual mapping 구조가 포함된 네트워크 F(x)+x 로 나타낸 것이 최적화하기 더 쉽다는 것이다. ResNet이론에 대해 배우고, 논문을 보면서 34-layer ResNet을 직접 구현해봤다. 아래 마지막 fc를 제외하고 convolution layer로만 구성된 34-layer plain에 residual mapping을 추가한 34-layer residual을 구현하는 것이 목표였다.
논문을 보면서 구현하다 느낀 점은,
image classification은 이미지 한 장에 대해서라면, semantic segmentation은 한 픽셀에 대해 classification을 하는 것과 같다. Semantic segmentation을 수행하는 모델 중 FCN을 구현해보았다. 처음부터 구현하는 것은 아니고, 1) VGG backbone에 11 convolution layer 및 upsampling 추가, 2) VGG-11 classifier의 마지막 fc의 weights를 11 convolution의 weight에 적용 후 segmentation까지 수행해 보았다. 결과는 그리 잘 나오진 않았는데(마스크를가 아니라 이마에 히트맵이 나타난다던지..), 이는 마스크에 해당하는 픽셀별 ground truth가 안주어졌으며, 입력 이미지에 비해 16분의 1 사이즈의 feature map에서 예측을 진행하고 또한 단순히 bilinear interpolation만을 진행했기 때문이다.
월요일은 휴일이었어서 화요일에 확률론과 알고리즘 두 개 스터디를 한 번에 진행했다. 확률론은 이제 한 번에 이해하기 어려운 내용들이 나타나기 시작했다... 몬티홀 문제는 여전히 신기했고 심슨 역설도 팀원들과 이야기 하면서 이해했다. 수학적 사고란 어떻게 잘 할 수 있는 것일까...
이번 주 피어세션은 과제와 강의 내용에 대한 질의응답 외에 프로젝트 아이디어에 대한 이야기도 나눴다. 팀원들과 이야기 나눈 것을 토대로 주말에 학습에 사용할만한 데이터와 모델, 그리고 혹시 더 디벨롭할 부분이 있을지 더 찾아볼 예정이다.
논문 읽으면서 적힌 내용을 그대로 받아들여 코딩 한다는게 생각보다 힘들었다. 영어로 되어 있는 문장을 모국어로 알고 있는 용어, 지식으로 변환하는 것 자체도 힘들었고, 처음으로 모델을 직접 구현해보는 거라 간단한 코드지만 완성까지 오랜 시간이 걸렸다.
뒤쳐지지 않고 SOTA를 계속해서 따라가려면 논문에 익숙해져야 겠다고 생각했다.