이미지 내에서 사물을 인식하는 방법에는 다양한 유형이 존재한다.
(https://medium.com/zylapp/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852)
한 장의 이미지가 주어졌을 때 어떤 class에 해당하는지 하나의 class로 분류 하는 것
정확히 해당 객체가 어디에 있는지 예측하는 것
여러개의 객체가 존재할 수 있는 상황에서 각 객체마다 Classification과 Localization을 같이 수행하는 것
여러개의 객체가 존재할 수 있는 상황에서 각 Object를 Pixel단위로 예측하는 것
Segmentation은 각 픽셀마다 클래스(class)를 할당하는 작업을 의미한다.
이미지 내에 있는 각 물체(object)들을 의미 있는(semantic) 단위로 분할(segmentation)하는 작업을 의미한다.
- 일반적으로 classification에서는 single image를 하나의 class로 classification했다.
- Segmentation에서는 각 pixel마다 하나의 class로 분류한다.
https://www.jeremyjordan.me/semantic-segmentation/
An example of semantic segmentation, where the goal is to predict class labels for each pixel in the image. -> 각 픽셀 포인트 하나하나 마다 클래스를 예측하는 것
이미지가 주어졌을 때, (height x width x 1(channel)) 크기를 가지는 한 장의 분할 맵(segmentation map)을 생성한다.
CNN에서는 Filter or Kernel 이라고 불리는 것을 사용한다.
각 필터는 입력에서 특정한 feature를 잡아내어 feature map을 생성한다.
filter는 하나의 특징에 초점을 맞추어 input을 전반적으로 스캔해가며 feature map을 뽑아내는 것이다.
하나의 필터는 슬라이딩 하면서 convolution 연산을 통해 feature map을 계산한다.
input과 filter의 channel은 같아야함.
입력 이미지의 로컬 영역과 filter 사이에서 내적(dot product)를 계산해 각 위치의 결과를 구한다.
Conv 연산은 해당 영역을 Vector로 만들 수 있다면 사실상 Vector의 내적을 하는 것과 마찬가지의 연산이다!!
- 동일한 위치에 대해서 각각 곱셈을 수행해서 그 합을 구하는 것과 마찬가지
각 위치에서의 Conv 연산 결과를 모아서 feature map을 생성- padding을 넣지 않는다면 해상도가 줄어 든다.
6개의 개별적인 filter를 가진 Conv layer를 이용하면 위와 같다. (filter 개별적으로 input tensor에 대해 적용되기 때문이다)
output tensor의 channel size 는 filter의 개수와 동일하다.
실제 CNN Layer는 여러 번 중첩되어 사용될 수 있다.기본적으로 Conv layer를 깊게 쌓아서 DL model을 만들게 되면 일반적으로 뒷 쪽으로 가면 갈 수록 filter의 개수는 커지고, width, height는 작아지고 channel은 커지게 구성하는 경우가 많다.
CNN classification model에서 중요한 정보는 유지한 상태로 해상도를 감소시키는 방법으로 Max pooling을 많이 사용한다.
가장 큰 값을 가지는 원소(element)만 남긴다.
Visualizing and Understanding Convolutional Networks(ECCV 2014)
CNN의 각 filter는 특정한 feature를 인식하기 위한 목적으로 사용된다.
VGG Net은 작은 크기의 3x3 Conv filter를 이용해 layer의 깊이를 늘려 우수한 성능을 보였다.
U자형으로 생긴 네트워크 U-Net
앞 부분을 그냥 encoder로 보고 다른 좋은 모델의 구조를 가져와서 사용하기도 한다.