Semantic Segmentation
이미지의 모든 픽셀마다 분류한다.
피카츄와 지우, 공책뿐 아니라 뒤의 배경에 대한 픽셀들에 대해서도 나누어 분류한다.
자율주행, 운전 보조장치 등에 사용된다.
Fully Convolutional Network
원래 fully connected network에서는 마지막에 flat하게 펴서 dense layer로마지막에 label을 예측한다.
Fully convolutional network에서는 dense layer가 없다.
Convolutionalization : dense layer을 없애는 과정
dense layer 대신 convolution layer로 바꾼다. 바꾸어도 필요한 파라미터 수가 일치하고 output 모양도 일치한다.
그리고 output을 heatmap으로 내보내어 semantic segmentation에 적합하다.
input의 width와 height(spatial dimension)에 의존적이지 않다.
input이 커지거나 작아지는 것과 상관없이 동일한 convolution filter로 찍기 때문에 output도 같이 커진다.
그래도 비교하면 input에 비해서 output은 작아진다.
ex)원래 이미지 크기 100x100 -> output heatmap 10x10
Deconvolution
이 작아진 heatmap을 다시 dense pixel로 늘려야 한다. 그 방법이 convolution transpose라고도 불리는 deconvolution이다.
convolution의 역연산인데 사실 이게 가능하지 않다. 예를들어 2.5라는 pixel이 2+0.5였는지, 1+1.5였는지 알 수 없기 때문이다.
그래서 deconvolution이 convolution의 엄밀한 역연산은 아니지만 파라미터 숫자와 네트워크의 입력 출력의 느낌은 같다.
padding을 되게 많이 주어서 늘려나가는 것이다.
Detection
이미지의 어디에 물체가 있는지 bounding box로 찾는다.
1. R-CNN
image안에서 Selective search로 무엇인가로 여겨지는 모든 region을 bounding box로 뽑아서 같은 크기로 바꾼다. AlexNet으로 이미지들의 feature를 뽑아낸 다음 SVM으로 분류한다.
R-CNN의 문제 중 하나는 뽑은 bounding box를 모두 CNN을 거쳐야 한다는 것이다. 그래서 시간이 오래걸린다.
예를들어 한 이미지에서 뽑힌 bounding box가 20개면 한 이미지에 대해서만 CNN이 20번 이루어져야 한다.
2. SPPNet
R-CNN의 단점을 극복해보자
bounding box에 해당하는 이미지를 가져오니 시간이 너무 오래걸리니까 이미지 전체에 대한 feature map을 뽑아서 bounding box위치에 해당하는 tensor로 가져와서 한 이미지당 CNN을 한 번만 돌릴 수 있게 되었다.
하지만, tensor를 bounding box의 개수만큼 가져와서 pooling으로 하나의 vector로 만들고 또 분류를 해야하기 때문에 여전히 느리다.
3. Fast R-CNN
SPPNet과 비슷하지만 마지막에 neural network를 통해서 bounding box regression과 classification을 했다는 점이 다르다.
4. Faster R-CNN
bounding box를 좀 잘 뽑아내보고 싶어져서 뽑아내는 방법인 region proposal을 학습했다.
그래서 학습한 것을 Region Proposal Network(RPN)이라고 한다.
Faster R-CNN = Region Proposal Network + Fast R-CNN
Region Proposal Network
image에서 특정 영역이 bounding box로 의미가 있을지를 판단한다.
anchor box는 미리 정해놓은 bounding box의 크기인데, 대충 물체의 크기가 얼마나 클지를 template을 정해놓는 것이다.
Fully convolutional network에서는 모든 영역을 돌아가며 convolution을 하게 된다.
해당 영역의 이미지가 쓸모 있을지 없을지 여부를 Fully convolutional network가 가지고 있게 된다.
위의 예시에서는 9는 9개의 각기 다른 비율과 사이즈의 anchor box의 갯수이고,
4는 bounding box를 얼마나 키우고 줄일지(width, height)와 offset을 얼마나 줄지 (x,y)에 대한 4개의 파라미터가 필요하다는 의미이다.
마지막으로 2는 그 해당 bbox(=bounding box)가 쓸모 있을지 없을지 여부를 뜻한다.
그래서 54개의 값을 잘 보면 bbox를 사용할지 말지 여부와 위치를 알게 된다.
5. YOLO
Faster R=CNN보다 훨씬 빠르다.
RPN를 사용하지 않고 이미지에서 한 번만 보고 바로 output이 나올 수 있다. (You Only Look Once)
image를 S*S의 grid로 나누고 grid 각각이 찾고자 하는 물체의 중앙이 포함되어 있는지 먼저 알아본다.
그 grid cell이 물체의 bbox와 그 bbox가 쓸모있을지를 예측한다. 이걸 B개만큼의 bbox를 예측한다.
동시에 전체 grid에 대해서 각 grid가 어떤 class에 속할지를 예측하고 해당 bbox의 class를 예측한다.
그래서 쓸모있을지와 class정보를 취합해서 박스와 그 박스의 class를 알 수 있다.
bbox마다 (x,y,w,h)와 쓸모 있을지 여부(confidence)가 필요하다.
C는 class의 수이다.
그래서 총 $S\times S \times(B\times 5 + C)$ 크기의 channel을 갖는 tensor가 된다.
'부스트캠프 AI Tech 3기 > 이론 : U-stage' 카테고리의 다른 글
[Day15] DL Basic 8. Sequential Models - Transformer (0) | 2022.02.10 |
---|---|
[Day15] DL Basic 7. Sequential Models - RNN (0) | 2022.02.09 |
[Day14] DL Basic 5. Modern CNN (0) | 2022.02.09 |
[Day14] DL Basic 4. Convolution은 무엇인가? (0) | 2022.02.09 |
[Day13] DL Basic 3. Optimization - 3 : Regularization (0) | 2022.02.08 |