Lecture 11 | Detection and Segmentation
Lecture 11 | Detection and Segmentation
Computer Vision Tasks

- Semantic Segmentation
→ 입력은 이미지이고 출력은 이미지의 모든 픽셀에 카테고리를 정한다. classification처럼 카테고리가 있지만 이미지 전체가 아니라 각각의 픽셀에 카테고리가 매겨진다.
- Classification + Localization
→ 이미지 분류 + 이미지 내에 객체가 어디에 있는지 네모박스를 그리는 것, Localization문제에서는 이미지내에 하나의 객체가 존재한다고 가정한다. 따라서 기본적으로 이미지내에 객체 하나만 찾아서 레이블을 매기고 위치를 찾아낸다.
- Object Detection
→ object detection의 task는 이미지에 나타나는 객체들의 Bbox와 해당하는 카테고리를 예측하는 것이다, classification + localization과 비교하면 예측하는 Bbox의 수가 입력 이미지에 따라 달라진다는 차이가 있다.
- Instance Segmentation
→ 객체별로 Bbox를 예측하는 것이 아니라 객체 별 segmentation Mask를 예측한다. 이미지에서 각 객체에 해당하는 픽셀을 예측하는 문제이다.
1. Semantic Segmentation
Semantic Segmentation의 특징

- Semantic Segmentation은 개별 객체를 구별하지 않는다. (Semantic Segmentation의 단점)
- ex) 암소 그림을 보면 두 마리의 소를 각각 분류해 주지 않는다.
Semantic Segmentation Idea: Sliding Window

과정
- 입력이미지를 아주 작은 단위로 쪼갠 후
- 이 작은 영역들만 가지고 classification을 진행한다.
(여기서 이미지 한장을 분류하기위해 만들어진 모델을 이용해서 이미지의 작은 영역을 분류하게 할 수도 있다.)
단점
- 모든 픽셀에 대해서 작은 영역으로 쪼개고, 모든 영역을 forward/backward pass를 진행해야 하기 때문에 아주 비싼 계산 비용이 발생한다.
- 또한 서로 다른 영역이라도 인접해 있으면 어느정도는 곂쳐있기 때문에 특징들을 공유할 수 있다.(영역간 구별에 악영향을 줌)
Semantic Segmentation Idea: Fully Convolutional
Base

과정
- 입력이미지를 3x3 zero padding을 수행하는 Conv layer들을 통과 시킨다.
- 이후 출력된 tensor에 입력 이미지의 모든 픽셀 값에 대해 classification score를 매긴다.
- 이때 네트워크를 학습 시키기위해 모든 픽셀의 classification loss를 계산하고 평균값을 취한다. 그리고 기존처럼 backprop을 수행한다.
단점
- 하이퍼파라미터만 잘 조절해주면 비교적 잘 동작하지만 이 네트워크에 경우 spatial size를 계속 유지시켜야 하기 때문에 비용이 아주 크다.
Downsampling and Upsampling

과정
- spatial resolution전체를 가지고 convolution을 수행하기 보다는 original resolution에서 conv layer는 소량만 사용하고 Max pooling, stride Conv등으로 feature map을 downsampling한다.
- 이후 Unpooling을 통해 feature map을 Upsampling하여 입력 사이즈로 복원한다.
장점
- 계산효율이 좋아진다. (계산 비용 절감)
- 이 방법을 통해 네트워크가 lower resolution을 처리하도록하여 네트워크를 더 깊게 만들 수 있다.
Unpooling

- Nearest Neighbor Unpooling: reception field에 모든 자리에 똑같은 값으로 채워넣는 방식
- Bed of Nails Unpooling: reception field에 한자리를 골라 같은 자리에 값을 채워넣는 방식

- Max Unpooling: unpooling시 같은 자리에 값을 채우는 것이 아니라 maxpooling에서 선택된 위치에 채워넣는 방식 (따라서 downsampling시 maxpooling에서 사용했던 요서들을 잘 기억하고 있어야함)
Q. 왜 이 방법이 좋은 아이디어이고 어떤 점에서 중요한지?
→ semantic segmentation에서는 모든 픽셀들의 클래스를 모두 잘 분류해야한다, 즉 객체간의 경계가 명확해야 더 좋다. Max Unpooling은 기존 Maxpooling에서 뽑아온 자리로 값을 넣어주기 때문에 공간정보를 조금은 더 디테일하게 다룰 수 있다.
Leanable Upsampling: Transpose Convolution
Nearest neighbor, Bed of nails, Max Unpooling은 고정된 함수르 사용하고 별도의 학습을시키지 않는다.하지만 transpose convolution은 특징맵을 upsampling할 때 어떤 방식으로 할지를 학습할 수 있다.

과정
- 내적연산을 수행하지 않고 우선 입력 특징 맵에서 값을 하나 선택한다.
- 이후 이 값(스칼라)과 필터를 곱하고 출력의 선택한 영역(여기서는 3x3)에 그 값을 넣는다. (Receptive field가 곂치면 더해준다.)
특징
- Transpose convilution에서는 입력과 필터가 내적연산을 하는 것이 아니라 입력값이 필터에 곱해지는 가중치의 역할을 한다.
- 문헌마다 부르는 이름이 다르다.
Transpose Convolution Example

Transpose Convolution이름이 붙여진 이유


- stride가 1일때는 비슷하지만 stride가 2이상일때는 transopose Conv은 근본적으로 다른 연산을 하게된다.
Q. 왜 평균을 내지 않고 sum을 하는지?
→ 그냥 더하기만 하는 이유는 앞서 살펴본 transpose Conv의 수식때문이다. 하지만 분명히sum은 문제가 될 수 있다. Receptive field의 크기에 따라서 magnitudes가 달라진다.
checkboard artifact
→ 또한 3x3 transpose Conv을 사용하면 checkboard artifact가 발생한다.
2. Classification + Localization
Classification + Localization의 구조

- classification + localization은 2개의 fully connected을 가지고 있다.
- 하나의 fully connected는 class score를 계산하여 이미지를 카테고리로 분류하고
- 다른 하나는 (x, y, w, h) 4개의 원소를 가진 vector와 연결되어있다. 이때 이 4개의 원소는 Bounding Box의 위치를 나타낸다.
- classification + localization은 2개의 loss가 존재하여 최종 loss는 이 두개의 loss를 더한 값을 사용하는 Multitask loss를 수행한다.
Aside: Human Pose Estimation
Human Pose Estimation이란?
사람의 관절을 예측해 사람의 동작을 예측하는 분서기법

입력: 사람이미지
출력: 사람의 관절 위치

과정
- Conv layer를 통해 각 관절의 특징들을 추출하고
- 14개의 점(관절)에 대해서 regression loss를 게산하고 backprop으로 학습시킨다.
Classification과 Regression의 차이점
- Classification과 Regression의 일반적인 차이점은 결과가 categorical한지 continueus한지이다.
3. Object Detection
Object Detection: Impact of Deep Learning

- Object Detection은 2011년도에 들어서면서 잠시 주춤했지만 2013년도에 Deep learning을 도입하고 나서 급격한 성장을 보여주고 있다.
Object Detection의 Regression 어려움

- Object detection은 classification + localization과 달리 이미지마다 객체의 수가 달라져 각 이미지마다 서로 다른 수의 output이 필요하다.
Sliding Window
근본적인 아이디어는 semantic segmentation에서 작은 영역으로 쪼갰던 아이디어와 유사하다.

과정
- 이미지로부터 다양한 영역을 나눠 각각의 작은 영역을 CNN의 입력으로 넣는다.
- 이후 CNN에서는 이 작은 영역에 대해서 classification을 수행한다.
특징
- Object detection은 classification + localization과 달리 여러개의 Bbox가 필요하기 때문에 카테고리에 배경을 추가한다. 이때 이 배경은 어떠 카테고리에도 속하지 않는것을 의미한다.
단점
- brute force방법인 sliding window를 하려면 너무 많은 경우의 수(이미지마다 객체수가 다름, 객체마다 Bbox의 크기가 다름)가 존재한다. 따라서 많은 영역을 CNN에 넣어야하고 이는 엄청 큰 계산량을 요구한다.
Region Proposals
Region proposal은 딥러닝을 사용하지않지만 전통적인 신호처리 기법이다.

의미
- Region Proposal은 object가 있을법한 Bbox를 제공한다.
특징
- Region Proposal을 찾아내는 다양한 방법이 있겠지만 RPN은 이미지내에 뭉텅이진 곳들을 찾아낸다.
- 이 지역들은 객체가 있을 지도 모르는 후보영역들이다. 이런 알고리즘은 비교적 빠르게 동작한다.
Selective Search
Selective Search란?
무식하게 이미지 내의 모든 위치와 스케일을 전부 고려하는 것(sliding window기법)이 아니라 RPN을 적용하고 객체가 있을법한 Region proposal을 얻어낸다. 또한 이렇게 얻은 Region proposal을 CNN의 입력으로 한다. 이 방법을 사용하면 계산량을 다루기 훨씬 수월하다.
특징
- Selective Search방법은 2초동안 CPU에서 2000개의 Region proposal을 만들어낸다.
- 노이즈가 매우 심하고 대부분 실제 객체가 아니겠지만 Recall은 아주높다.
- 따라서 이미지에 객체가 존재한다면 selective searchdml Regiopn proposal안에 속할 가능성이 높다.
R-CNN
R-CNN은 앞서 살펴본 Selective search방법을 도입한 Object detection모델이다.

과정
- 이미지가 입력으로 들어오면 Region proposal(Selective Search)을 수행하여 ROI를 구한다.
- 여기에서 Region proposal을 통해 추출된 ROI는 사이즈가 각양각색인데 이는 CNN에서 문제가 될 수 있다. 따라서 추출된 ROT로 CNN classification을 수행하려면 FC-layer등으로 보통 같은 입력사이즈로 바꿔주는 Warped작업을 수행한다.
- 이후 고정된 크기의 ROI를 CNN에 통과시킨다.
- CNN의 결과값으로 classification을 수행한다. 또한 ROI를 보정하기위한 Bbox regression도 함께 수행한다. (Selective Search의 Region proposal이 대게 정확하지만 그렇지 못한 경우도 있기 때문에)
Q. offset이 항상 ROI의 안쪽으로만 작동하는지?
→ 아니다. 예를 들어 Bbox가 사람을 나타냈는데 머리가 없다면 위로 Bbox를 옮기는 쪽으로 학습을 진행한다.
R-CNN의 문제점

- R-CNN은 200개의 ROI가 있고 각각이 독립적으로 CNN에 입력으로 들어가기 때문에 여전히 높은 계산비용이 발생한다.
Fast R-CNN
Fast R-CNN은 R-CNN의 문제점을 완화시킨 모델이다.

과정
- 입력으로 이미지가 들어가면 ROI마다 CNN을 수행하지 않고 전체 이미지에 대해서 CNN을 수행한다. 그 결과 전체 이미지에 대한 고해상도 feature map을 얻을 수 있다.
- 이후 Fast R-CNN도 Region proposal을 얻어오기 위해 Selective Search를 수행한다. 하지만 R-CNN과 달리 이미지로부터 ROI를 뜯어오지 않고 CNN feature map에 ROI를 projection 시키고 전체 이미지가 아닌 feature map에서 뜯어온다. 이렇게 하면 CNN의 feature를 여러 ROI가 공유할 수 있다.
- 그 다음에는 FC-layer가 존재하기 때문에 CNN feature map에서 뜯어온 ROI를 FC-layer의 입력에 맞게 크기를 조정해주는 ROI Pooling을 진행한다.
- 이후 크기가 조정된 ROI를 FC-layer의 입력으로 넣어서 classification score와 Linear regression offset을 게산한다.

- Fast R-CNN을 학습할 때는 두 loss를 합쳐 Multi-task loss로 backprop을 진행한다. 이 방법을 통해 전체 네트워크를 합쳐서 동시에 학습시킬 수 있다.
R-CNN vs Fast R-CNN

- Fast R-CNN은 feature map을 서로 공유하기 때문에 train time에 대략 10배정도 빠르다.
- Fast R-CNN은 test time에 정말 빠르기 때문에 Region Proposal을 계산하는 시간이 대부분이게 된다. (2000개의 Region Proposal을 계산하는데 2초, CNN을 거치는데 1초)
따라서 Fast R-CNN은 Region Proposal을 계산하는 구간에서 병목현상이 발생하게 된다.
Faster R-CNN
Fast R-CNN의 병목현상의 이유는 근본적으로 Selective Search가 CNN외부, 즉 CPU에서 연산을 수행하기 때문이다. 따라서 Faster R-CNN은 CNN내부, 즉 GPU에서 Region proposal을 계산하도록 만든 모델이다.

과정
- Faster R-CNN도 Fast R-CNN처럼 이미지 전체가 Conv layer에 입력으로 들어가 feature map을 만든다.
- 여기서 Fast R-CNN과는 다르게 CNN안에 별도의 RPN이 존재하여 Region proposal을 생성한다. 이때 RPN은 원본이미지에서 ROI를 추출한다.
- 이후 ROI pooling을 통해 feature map에 projection되고 Fast R-CNN과 똑같이 Classification과 Bbox Regression이 진행된다.
Faster R-CNN Speed

- Faster R-CNN은 Fast R-CNN의 병목현상을 해결하였기 때문에 속도가 가장 빠른것을 확인할 수 있다.
YOLO / SSD
YOLO / SSD는 R-CNN의 계열의 2-way방식(classification, regression)이 아닌 1-way방식(regression)으로 Object detection을 수행한 모델들이다.

과정
- 전체 이미지를 Conv layer에 넣어 feature map을 생성한다.
- 이후 feature map을 grid cell단위로 나눈다. 이때 grid cell내부에는 base Bbox가 존재한다.
- 생성된 grid cell에서 bounding box를 생성(ROI)하여 Bbox의 offset 정보와 confidence score 정보를 알아낸다.
- 이후 Bbox의 offset예측과 Bbox에 대하여 classification score를 개선한다.
특징
- 하나의 CNN이 여러 Bbox의 위치(localization)와 Bbox의 classification score를 동시에 게산하여 동작 속도가 매우 빠르다.
- 다시말해 Faster R-CNN은 RPN으로 Regression문제를 해결하고 ROI단위로 classification문제를 해결한다면 YOLO/SDD와 같은 1-way방식(single shot method)는 한번에 foward pass만으로 이 두 문제를 해결한다.
Object Detection: Lots of variable

Aside: Object Detection +Cationing

- 각 region의 caption을 예측하는 모델
- caption을 예측해야하므로 SVM이나 softmax를 사용하지않고 RNN을 도입
Object Detection +Cationing 구조

4. Instance Segmentation
Mask R-CNN
Mask R-CNN은 Faster R-CNN과 유사한방법이며 다른 점은 Bbox regression을 하는게 아니라 Bbox마다 segmentation mask를 예측한다.

과정
- 처음 과정은 Faster R-CNN과 동일하며 RPN으로 뽑은 ROI영역 내에서 각각 semantic segmentation을 수행한다.
- 이후 feature map으로부터 ROI pooing(Align)을 수행한다. 이때 두 갈래가 형성된다.
- 첫 번째 갈래는 Faster R-CNN과 유사하게 Region proposal이 어떤 카테고리에 속하는지 계산하고 Bbox regression을 진행한다.
- 두 번째 갈래는 semantic segmentation을 위해한 mini-network로 각 픽셀마다 객체인지 하닌지를 분류한다.
Mask R-CNN also does Pose
Mask R-CNN을 사용하여 Human Pose Estimation을 진행할 수도 있다.

- Pose estimation을 위해 loss와 layer를 하나 더 추가하면 된다. 이때 Multi-task loss에서 loss가 하나더 추가된 방식으로 진행된다.
- Object Detection + Pose Estimation + Instance Segmentation
Recap

Syllabus
Youtube
'Deep Learning > cs231n' 카테고리의 다른 글
| Lecture 13 | Generative Models (2) | 2022.03.27 |
|---|---|
| Lecture 12 | Visualizing and Understanding (0) | 2022.03.20 |
| Lecture 10 | Recurrent Neural Networks (0) | 2022.03.05 |
| Lecture 9 | CNN Architectures (0) | 2022.02.15 |
| Lecture 7 | Training Neural Networks II (0) | 2022.02.13 |



