티스토리 뷰
하이레벨적으로 아직도 헷갈리는 것 같아서 정리해보았다.
즉, Convolution Filter들이 단계별로 복잡한 특징을 뽑아내고, 마지막에 그 특징들을 조합해 ' 컵'. '사람' 과 같은 클래스를 알아맞히는 방법이 어떻게 진행되는거지?
일단 CNN 큰 흐름
- Input : 이미지를 픽셀 단위로 입력 받음.
- Feature Extraction : 여러 단계의 Convolution과 Pooling을 거치면서, 이미지 안의 'Features'들 예를 들어, edges, textures, shapes 들을 뽑아냄.
- Classification : 마지막에 Fully Connected Layer(FC Layer)나 Global Average Pooling 등을 통해 "이 이미지의 최종 feature vector가 어떤 class에 가까운지" 판단하는 걸 확률 형태로 결과 뽑아냄.
2. 에서 "어떤" 특징을 뽑아내는가?
- 초반 layer : edge, corner 등 아주 단순한 형태 feature 발견. ex. "Horizontal filter"은 이미지에 수평선이 이에 대한 반응값이 커지고, 없으면 작게.
- 중간 layer : 초반 layer에서 발견한 단순한 특징을 조합해 조금 더 복잡한 패턴 인식. ex. "둥근 선들이 모여 있는 패턴"을 감지, 혹은 "특정 texture을 가진 영역" 찾아내기.
- 후반 layer : 더 상위 개념(ex. 컵 손잡이, 사람 눈,코,입 위치 등)을 포착. 이런 특징들이 합쳐져서 "이건 사람 얼굴", "컵이군" 이런 걸 판단하게 해주는 feature 뽑아냄.
3. 그래서 어떻게 아는건가?
CNN의 마지막에는 이렇게 convolution layer들이 이미지에서 추출한 유용한 특징 vector 바탕으로 컵에 해당하는 특징이 더 많은가? 사람에 해당하는 특징이 더 많은가 판단.
이때, FC Layer이나 global average pooling 뒤에 softmax 함수를 붙여서 여러 클래스 중 어디에 해당하는지 확률 분포를 통해 판단하게 해준다.