사람은 오감, 특히 시각을 통해 세상과 소통을 합니다. 우리는 모든 정보의 약 75%를 눈을 통해서 받고, 뇌에서 50% 이상을 사용하여 시각정 정보를 처리한다고 합니다. 이러한 시각을 통해 정보를 해석하는 과정을 기계가 하는 방식으로 표현하면 아래 그림과 같이 나타낼 수 있습니다.
그림을 보시면 카메라가 사람의 눈 역할을 하며, GPU 및 알고리즘이 사람의 뇌 역할을 하게 됩니다. 추가적으로 이렇게 얻어진 정보를 다시 2D 이미지를 그려내는 것을 Rendering 이라고 부릅니다.
컴퓨터 비전이란 무엇일까요?
위키백과에 따르면 "컴퓨터 비전(Computer Vision)은 기계의 시각에 해당하는 부분을 연구하는 컴퓨터 과학의 최신 연구 분야 중 하나이다." 라고 나와있습니다. 즉, 컴퓨터 비전은 인간의 시각이 할 수 있는 몇 가지 일을 수행하는 자율적인 시스템을 만드는 것을 목표로 합니다. 그리고 컴퓨터 비전은 인간의 시각적 지각 능력을 이해하는 것을 포함합니다.
위 그림과 같이 과거에는 사람이 직접 feature을 추출하여 모델을 학습시켰다면, 현재는 Feature extraction과 Classification을 모델에서 동시에 하는 end-to-end 학습을 합니다.
Image classification 즉, 이미지분류란 영상안에 어떤 물체가 있는지 분류하는 문제입니다.
우리가 만약 모든 데이터를 가지고 있다 가정하면, 분류문제는 k-NN(k Nearest Neighbors)로 풀 수 있습니다. 하지만 이 방법은 시간, 공간 복잡도와 각 데이터의 유사도 측정 방법 선정에 있어서 단점이 있습니다.
그렇다면 neural network는 어떨까요?
위와 같은 상황에서 single fc layer로 이미지 분류를 한다면 layer가 1개이기 때문에 표현력이 떨어지며 일반화 성능도 떨어질 것 입니다. 아래 사진과 같이 말이죠.
이러한 단점들을 해결한 것이 바로 CNN 입니다.
CNN은 FC layer와는 달리 locally하게 연결된 neural network입니다. 또한 가중치를 공유하여 FCN보다 모델의 파라미터 수도 현저히 적습니다.
위 그림을 보면 FCN에 비해 CNN은 파라미터 수가 매우 적은 것을 볼 수 있습니다.
이렇게 CNN은 커널(필터)를 sliding window 기법으로 data를 순회하며 이미지의 국부적인 영역에서 feature을 추출합니다.
cnn의 다양한 아키텍쳐는 이전 포스팅에 올려놨으니 여기서는 간단하게만 소개하겠습니다.
LeNet-5
AlexNet
여기서 한 가지 알아가야 할 개념은 수용장(Receptive field) 입니다. convolution 연산은 입력과 그보다 작은 커널의 상호작용만으로 출력을 내기 때문에 결과적으로 특정 입력 노드 주변의 노드들만 기여를 하는데, 이때 기여하는 입력 노드들의 집합을 receptive field라고 합니다.
위 그림은 3-conv layer 일때의 receptive field의 예시입니다. output에서부터 확장해 나가면서 receptive field의 크기가 3x3, 5x5, 7x7까지 커지는 모습입니다.
VGGNet
Deeper architecture (16 and 19 layers)
Simple architecture (No LRN, only 3x3 conv filter blocks, 2x2 max pooling) -> 작은 filter를 쌓으면 큰 Receptive field를 보는 것과 같은 효과
Better performance & Better generalization
다른 아키텍쳐들은 다다음 강의인 Image Classification2 에서 이어집니다.
Neural Network는 데이터셋의 feature들을 학습합니다. 하지만 대부분의 dataset들은 biased 되어 있습니다. 즉, real data의 분포를 모두 표현할 수 없기 때문에 우리는 data augmentation을 사용하여 그 차이를 매꿀 수 있습니다.
data augmentation에는 많은 기법들이 있고, TORCHVISION.TRANSFORMS에서 확인할 수 있습니다.
CutMix
‘Cut’ and ‘Mix’ training example to help model better localize objects
Mixing both images and labels
RandAugment
Many augmentation methods exist. Hard to find best augmentations to apply
Automatically finding the best sequence of augmentations to apply
Random sample, apply, and evaluate augmentations
Augmentation policy has two parameters
Parameters used in the above example
Transfer learning : 기존에 미리 학습시켜놓은 모델을 사용하여 적은 학습으로 새로운 task에 적용
Fine-tuning the whole model
Teacher-student network structure
student network는 teacher network가 알고 있는 것을 학습합니다. 그리고 student network는 teacher network의 출력을 모방합니다. 이렇게 레이블이 지정되지 않은 데이터로만 학습을 수행하기 때문에 비지도 학습이라 할 수 있습니다.
Knowledge distillation
- Softmax with temperature : hard prediction과 같은 극단적인 값보다는 중간 값들도 나오게 만들어 더 많은 정보를 가지게 함으로써 student가 teacher를 더 잘 모방하게 합니다.
일반적으로 전체 데이터 중에서 일부 데이터만 라벨링이 되어있고, 대부분의 데이터는 unlabeled 데이터인 경우가 많습니다.
Semi-supervised learning(준-지도학습)은 말 그대로 Unsupervised (No label) + Fully Supervised (fully labeled) 입니다. 준지도학습은 아래 그림과 같이 학습을 이어나갑니다.
Recap : Data efficient learning methods so far
Data Augmentation + Knowledge distillation + Semi-supervised learning (Pseudo label-based method)
이를 좀더 쉽게 시각화 하면 아래 그림과 같다.
신경망은 점점 깊어지고 넓어지고 있습니다. 깊은 신경망은 넓은 receptive fields 와 더 많은 용량 및 비선형성에 의해 더 많은 feature 들을 학습할 수 있습니다.
하지만 무조건 깊은 신경망이 항상 좋은 성능을 낼까요?
Hard to Optimize
신경망의 깊이가 깊어질수록 최적화 하기가 어려워 집니다. 왜냐하면 Gradient vanishing / exploding 때문입니다. 또한 깊은 신경망은 파라미터 수가 많아지기 때문에 계산 복잡도가 매우 올라갑니다.
GoogLeNet의 핵심은 인셉션 모듈(inception module)
GoogLeNet은 NIN 개념을 확장한 신경망
1x1 커널
Auxiliary classifiers
신경망의 깊이를 깊게 하면 무조건 성능이 좋아질까??
위 그래프를 보면 오히려 56층의 신경망 구조가 20층의 신경망보다 더 나쁜 성능을 보입니다. 즉, 기존의 방식으로는 무조건적으로 깊은 신경망이 성능이 좋게 나오지 않는다는 것을 확인한 것입니다.
Residual Block
기존의 신경망은 입력값 x를 타겟값 y로 매핑하는 함수 H(x)를 얻는 것이 목적이었습니다. 그러나 ResNet은 F(x) + x 를 최소화하는 것을 목적으로 합니다. x는 현시점에서 변할 수 없는 값이므로, 이는 F(x)를 0에 가깝게 만드는 것이 목적 이 됩니다. F(x)가 0이 되면 출력과 입력이 모두 x로 같아지게 됩니다. F(x) = H(x) - x이므로 F(x)를 최소로 해준다는 것은 H(x) - x를 최소로 해주는 것과 같은데, 여기서 H(x) - x를 잔차(residual)라고 합니다.
지름길 연결(short cut)을 두는 이유는?
3x3 커널 사용
잔류 학습 사용
전역 평균 풀링 사용 (FC 층 제거)
배치 정규화(batch normalization) 적용 (드롭아웃 적용 불필요)
Overall architecture
ResNet에서는 레이어의 입력과 출력을 요소별로 추가했습니다.
Dense 블록에서는 각 레이어의 모든 출력은 채널 축을 따라 concat 합니다.