기계의 시각에 해당하는 부분을 연구하고 있는 분야로, 인간의 시각이 할 수 있는 일을 수행하는 자율적인 시스템 구축을 목표로 한다.
이미지를 인식할 때에는 다양한 문제들이 존재한다.
또한, 다음과 같은 문제를 해결해야 하는 경우도 있다.
모든 컴퓨터 자료는 텍스트든 음악이든 이미지든 어떤 '규칙성 있는 수열'이기에 DL, ML로 처리가 가능하다.
과거에는 이미지에서 간단한 기하학적 형상을 단순화하고 다시 형상을 만들어냈다. Edge, Boundary등과 같은 단순한 특징들만을 표시했다. 복잡한 구조를 '단순화'하려고 하였다.
그 후, Image Segmentation(픽셀들을 그룹으로 묶어 의미있는 단위로 구분하는 작업)을 시작하였다. 이때, 그래프 알고리즘, 부스팅, 신경망 등이 등장하였다.
그런데 한가지 문제가 있었는데, NN이 이미지에 적용이 되지 않았다. 그 이유는 Locality와 Spatiality의 붕괴이다. 2차원 픽셀을 1차원으로 표현하면 픽셀관의 상관관계가 표현되지 못하고 붕괴된다. 이를 통계적으로 해결하려고 하였지만 실패하였다.
CNN이 등장하였다. 사진도 일종의 주파수이기에 시각 신호 처리 관점에서 Convolution이 등장하였고 이를 통해 2차원 곱으로 그대로 인식시키고 필터를 통해 내가 원하는 형태를 강제로 인식가능하게 만들어 줄 수 있다.
그런데 Convolution Layer를 거치고 나면 무조건 사이즈가 감소하게 되다. 해당 사이즈가 감소할 때, 그냥 냅두어도 되지만 Padding을 통해 채워줄 수 있다.(Zero Padding, Same Padding, Valid Padding)
Convolution에서 요점을 뽑아 주는 Pooling도 있다. 이 방식은 이미지의 invariance(불변성)값에 영향을 주게 되어, 일정두단의 shift움직임에 대해서 일반적인 모델 구축에 도움을 준다. 약간 위치가 변하여도 같은 값을 뽑아낼 수 있다.
Feature Map은 필터를 거치고 난 후의 모습이다. Feature Map의 개수는 필터의 개수이다.
부족해진 Dataset을 보충하고 Generalization을 높이기 위해 이미지 개수를 Image Augmentation을 통해 증가시켜준다. 이미지를 rotation, flip, rescaling, grayscaling, cutoff 해준다.
위 모델들을 앙상블(deep bagging 등)하여 극한의 성능을 끌어낼 수 있다.
모델
https://www.tensorflow.org/api_docs/python/tf/keras/applications/resnet
Pytorch Model 모음
https://github.com/rwightman/pytorch-image-models
YBIGTA에서 열심히 교육해주신 박0종님