컴퓨터 비전의 어려움
컴퓨터에서는 이미지를 인식할 때 픽셀을 이용해서 인식을 하기 때문에,
Semantic Gap 이 존재한다. Semantic Gap에 대해 소개해보자면,
이진수로 되어있는 data에서 encoding, resolutionm color, texture 의 low-level features를 거쳐, keyword, category, concept, ontology 그리고 human perception에 이르기까지 semantic gap이 존재한다는 것이다.
또한 이미지 인식의 challenges들을 추가로 살펴보자면
밝기 변화(illumination), 변형(Deformation), 가림(Occlusion), 배경장애(Backgraoud Clutter), 같은 class여도 다르게보이는(Intraclass variation)
CNN
- 이미지 분야를 다루기에 최적화된 인공신경망 구조
- Convolution layer, Pooling layer로 구성(pooling은 subsampling이라고도 불림)
Convolution Layer & Pooling layer
- 컨볼루션은 합성곱이라고 불리고 Kernel(filter)라고 불리는 윈도우 크기만큼의 X x X크기의 행렬을 Y x Y 크기의 이미지 행렬의 XxX크기 부분과 곱해서 모두 더하는 수학 연산자
- 그 행렬곱의 결과로 X x X 크기 부분의 값들이 더해져 하나로 모아짐
그렇다면? 왜 컨볼루션을 하지?
- 바로 컨볼루션 연산을 통해 원본 이미지의 특징들이 활성화맵으로 추출되기때문이다.
- 어떤 커널이냐에 따라 원본 이미지에서 다양한 특징을 추출 할 수있음(센터에 초점을 둔다던지, 테두리를 찾아낸다던지, 블러처리를 한다던지,,,
Tensorflow CNN
padding = ‘same’ or ‘valid’ 로 지정할 수 있는데
먼저 valid는 padding을 했을때 kernel size가 줄어든다.
근데 same의 경우 원본 사이즈랑 같도록 zero padding을 한다. 그래서 feature map size가 변하지않음
Dropout
- 대표적인 regularization 기법
- 학습과정에서 일부노드를 사용하지 않는 형태로 만들어서 오버피팅을 방지함
- train에서는 dropout을 수행해도 test data에 대해서는 dropout을 수행하지않음
표준 CNN모델
Keras.applications API를 통해 표준 CNN pre-trained model을 가져올 수 있음
Alexnet
- ReLU Non-linearity활성화함수와, multi-GPU가 특징임
- Local Response Normalization 또한 특징임!(최근에는 별로 사용 안 함)
- Overlapping pooling : 기존에는 stride와 filter size를 같게하여 pooling할때 겹치는 부분이 없게 했는데 alexnet에서는 겹치는 부분이 있게 함
Overfitting 방지기법도 몇 가지 적용함
- Data augumentation 방법1: 원본 이미지의 사이즈를 조금 줄여 상하대칭,으로 랜덤하게 크롭하여 이미지를 추가함, 테스트 데이터에 대해서도 상하반전해서 추가
- Data augumentation 방법2: PCA로이미지 RGB채널 강도를 변화시킴
- Dropout 적용
VGGNet
- depth를 키우는데 집중
- 작은 필터 사이즈도 깊게 쌓으면 충분히 효율적인 특징 추출이 가능하다는 걸 입증
GoogleLenet(Inception)
- 적은 parameter로 좋은 성능 뽑음
- 최대한 파라미터를 줄이면서 네트워크를 깊고 넓게 디자인하고자 함(레이어가 깊더라도 연결이 sparse하다면 파라미터수가 줄어듬) → overfitting 억제
- global average pooling을 제안(기존에는 feature map을 flattening시킴 근디 그냥 마지막 featuremap전체에대한 평균값을 뽑아 그니까 featuremap하나당 하나의 scalar값이 나오게 됨)
- 학습할 파라미터가 줄어서 오버피팅 방지효과
- spatial 정보의 평균이므로 input의 translation에 강건함
- vanishing gradient problem을 방지하기 위한 auxiliary classifier를 중간에 추가함