해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
최성준 교수님 - Convolution은 무엇인가?
1) Convolution
2D convolution 계산을 해준다는 것은 해당 convolution 필터의 모양을 이미지에 찍는 것과 같습니다. 우리가 어떤 필터를 적용하는지에 따라 Blur 처리되기도 하고, Outline을 잡아주기도 합니다. Blur 처리를 한다고 할 때에는 필터의 크기가 3*3이라고 가정하면, 모든 필터 값이 $\frac{1}{9}$이면, 전체 픽셀의 값의 평균을 내면서 Blur 효과를 얻을 수 있는 것입니다. Convolution의 채널의 개수는 필터의 개수에 따라 달라지게 됩니다. 파라미터의 개수는 커널의 크기와 인풋 채널 숫자와 아웃풋 채널 숫자의 곱으로 구할 수 있습니다. 일반적인 CNN은 Convolution layer, pooling layer, fully conneted layer로 구성되어 있습니다. Convolution Layer와 pooling layer는 이미지에서 유용한 정보를 뽑아내는 역할을 합니다. Fully connected Layer는 최종 결정을 하게 해주는 역할을 합니다. 예를 들어, 강아지인지 고양이인지 분류해주는 층이라고 볼 수 있습니다. 하지만, 최근에는 Fully connected layer를 줄여가는 추세에 있습니다. 이것은 parameter의 개수가 영향이 있습니다. parameter의 개수가 많아지면 많아질수록 학습이 어렵고, 일반화 성능이 떨어지기 때문입니다.
Stride는 넓게 걷는다는 의미를 갖는데, 이것은 커널이 입력 이미지를 convolution할 때, 몇 칸씩 움직이는 지를 결정해줍니다. 기본적인 Convolution을 적용하게 되면, 크기가 줄어들게 되고 가장자리의 정보를 잃어버리게 됩니다. Padding은 입력 이미지의 크기를 유지해주고 가장자리의 정보를 유지하고 싶을 때 활용합니다. 이미지 주변을 숫자로 감싸서 Convolution을 적용하게 됩니다. 파라미터의 수는 커널의 크기*인풋 채널*아웃풋 채널로 구할 수 있습니다.
1*1 Convolution은 채널의 수를 줄이는 방법입니다. 이렇게 채널의 수를 줄이게 되면 그만큼 파라미터의 수를 감소시킬 수 있으며, 대표적으로 bottleneck architecture가 있습니다.
최성준 교수님 - 1*1 convolution의 중요성
1) ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)
Classification, Detection, Localization, Segmentation과 같은 다양한 대회가 진행됩니다. 그중 Classification은 1000개의 클래스들을 가지고 있으며, train으로는 45만 장의 이미지를 사용합니다. 2015년부터 사람의 성능보다 좋아지기 시작했습니다.
2) AlexNet
Alexnet에서는 filter로 11*11을 사용했는데 이것은 파라미터 관점에서 그렇게 좋은 선택은 아닙니다. 볼 수 있는 영역의 크기는 넓어지지만 그만큼 파라미터의 수가 증가하기 때문입니다. AlexNet은 5개의 Conv layer와 3개의 Dense layer로 구성했습니다. 주요 아이디어는 ReLU activation을 사용했고, 2개의 GPU를 사용했습니다. Local response normalization(입력 공간에서 응답이 많이 나오는 것을 죽이는 방법인데 현재 많이 사용되지 않습니다), Overlapping pooling을 사용했습니다. Data augmentation과 Dropout을 사용했습니다. 지금 시점에서 봤을 때에는 당연히 사용하는 것들이지만 2012년도에는 당연하지 않았던 개념들이었습니다. ReLU 함수는 선형 함수가 가지는 좋은 성질들을 포함하고 있습니다. 또한 경사 하강법을 최적화하기 쉬운 특징이 있습니다. vanishing gradient 문제를 해결할 수 있었습니다.
3) VGGNet
VGGNet은 3*3 convolution filter로 깊이를 깊게 쌓았고 fully connected layer에서 1*1 convolution을 사용했으며 Dropout을 적용했습니다. 여기서 주의 깊게 봐야 할 점은 3*3 filter만 사용했다는 점입니다. 필터가 커지는 이점은 인풋 이미지를 찍었을 때 고려되는 크기가 커진다는 것인데 이것을 우리는 Receptive field라고 말합니다. 3*3을 2개의 층으로 쌓았을 때, 마지막 레이어의 하나의 값은 인풋 이미지의 5*5 영역을 반영하고 있습니다. 5*5를 이용해서 1개의 층으로 쌓았을 때에도 동일한 영역을 반영하고 있습니다. 하지만, 두 개의 파라미터의 개수가 차이가 나게 됩니다. 3*3을 2개로 쌓은 경우 Receptive field의 크기는 같지만 파라미터의 수가 더 적게 나오게 됩니다. 이런 이유에서 최근에 나오는 논문들의 filter들은 커봐야 7*7을 넘지 않습니다.
4) GoogLeNet
GoogLeNet에서는 1*1 convolution을 잘 활용하게 되면 파라미터의 수를 효과적으로 줄일 수 있는 지를 알 수 있습니다. Network 속에 Network를 가지는 NiN 구조였으며 inception block을 활용했습니다. inception block은 Conv을 하기 전에 1*1 Conv을 적용하는 것을 말합니다. 이것은 채널의 측면에서 파라미터의 수를 줄일 수 있게 됩니다. 1*1을 적용한 차이로 인해서 파라미터의 수가 3배 이상 차이가 나게 됩니다.
5) ResNet
네트워크가 깊어지면서 학습하기 어려워졌습니다. 그래서 ResNet에서는 identity map(skip connection)을 추가하게 되었습니다. skip connection은 convolution 한 값에다가 feature 맵을 더해주는 것입니다.
identity map을 사용하기 전에는 아무리 층을 많이 쌓아도 좋은 결과를 얻을 수 없었는 데 이 방법을 사용하면서 더 좋아지는 결과를 얻게 되었습니다. Batch Normalization을 Convolution 뒤에 사용했습니다. Bottleneck architecture는 3*3 conv하기 앞뒤에 1*1 conv layer를 넣어서 파라미터를 줄이는 효과를 가져왔습니다.
6) DenseNet
DenseNet은 ResNet에서 더하는 것을 Concatenation을 해보자는 아이디어를 사용했습니다. Concatenation을 통해서 기하급수적으로 파라미터가 증가하게 됩니다. 이를 막기 위해 Dense Block과 Transition Block을 사용했습니다.
최성준 교수님 - Computer Vision Applications
1) Semantic Segmentation
Semantic Segmentation은 이미지의 픽셀마다 어떤 라벨에 포함되는지를 분류하는 것입니다. Semantic Segmentation은 자율주행에서 많이 활용되고 있는 방법입니다. fully convolutional network는 마지막의 dense layer를 convolutional network로 변경해주는 것입니다. 이런 식으로 변경해주는 이유는 분류만 해주는 것이 아니라 heat map 형태로 대략적인 위치를 확인할 수 있기 때문입니다. Deconvolution(conv transpose)은 special dimension을 늘려주는 역할을 합니다. 하지만, 온전히 복원하는 것은 힘듭니다.
2) Detection
Detection은 픽셀로 위치를 구분하려고 하는 것이 아니라 바운딩 박스를 통해서 개체를 분류하는 방식입니다. R-CNN은 2000개의 임의의 영역을 추출한 뒤 동일한 크기로 맞춰서 CNN을 통해서 feature들을 계산해서 SVM으로 분류하는 방식입니다. R-CNN의 단점은 2000개의 이미지가 CNN을 통해야 하므로, 시간이 너무 오래 걸립니다. SPPNet은 CNN을 한 번만 적용해보자는 아이디어로 만들어진 방법입니다. Fast R-CNN은 SPPNet과 굉장히 유사하지만 마지막에 Neural Networks를 적용한 부분이 다릅니다. Faster R-CNN은 Region Proposal Network와 Fast R-CNN을 합친 것입니다. bounding box를 뽑는 것도 네트워크로 학습하자고 해서 만든 것이 Region Proposal Network입니다. Region Proposal Network는 이미지에서 특정 영역이 bounding box로의 의미가 있는 지를 확인하는 것입니다. 미리 정해놓은 바운딩 박스 크기인 anchor box로 구하게 됩니다.
YOLOv1은 faster R-CNN보다 훨씬 빠른 속도를 가지고 있습니다. Region Proposal Network가 없기 때문에 빠른 속도를 낼 수 있습니다. 동작원리는 이미지가 들어오면 n개의 그리드로 영역을 나눠줍니다. B개의 bounding box를 찾아주고 쓸모 있는지를 찾아주면서 해당 그리드가 어떤 클래스인지를 예측하는 것을 동시에 진행합니다. 두 개의 정보를 취합해서 결과를 표현해 줄 수 있습니다.
2. 피어 세션 정리
수업 관련 질문, NotMnist 데이터 불러오기