히비스서커스의 블로그

[CS231n 11] Detection and Segmentation 본문

Theory/Computer Vision

[CS231n 11] Detection and Segmentation

HibisCircus 2021. 9. 6. 23:53
728x90

 내용들은 전적으로 stanford university의 CS231n 2017 11강 강의 내용을 기반으로 작성하였음을 먼저 밝힙니다.

 

 

앞서 자세히 배웠던 Computer Vision에서의 Task는 Image Classficiation으로 이미지 한 장에 대한 label을 맞추는 테스크였다. 이제 Computer Vision에서의 다른 Task들이 무엇이 있고 어떻게 수행하는지 살펴보자.

 

 

크게 Semantic Segmentation, Classification + Localization, Object Detection, Instance Segmentation 4가지를 살펴보자. 간단하게 각각의 개념만 짚고 넘어가자면 Semantic Segmentation은 이미지 안의 모든 픽셀들을 카테고리화 하여 나타낸 맵과 같은 개념이다. Classification + Localization은 이미지에 대한 label 뿐 아니라 이미지 내에 하나의 object에 대해 bounding box로 위치를 나타내는 개념이다. Ojbect detection은 이미지 내에서 여러 개의 object 들에 대해서 bounding box로 위치를 나타내는 개념이다. Instance Segmentation은 이미지 내의 여러 object 들에 대해서 각각을 segmentation을 한 개념이다.

 

 

1. Semantic Segmentation

 

 

앞서 말했든 Semantic Segmentation은 Image Classification과는 다르게 이미지 전체에 하나의 카테고리가 아닌 모든 픽셀에 대해 카테고리가 메겨진다는 차이점이 있다.  개별객체(instance)를 구분해내지는 못하기 때문에 사진에 고양이 두 마리가 있다면 이 두마리를 구분해내지 못한다.

 

sliding window

이미지 한 장을 분류하기 위해 sliding window와 같은 접근 방식으로 이미지를 매우 작은 단위로 쪼개어 분류해본다고 해보자. 이럴 경우 모든 영역에 대해 forward/backward pass를 하는 것은 매우 큰 비용이 들게 되어 비효율적이다. 

 

Convolution layer

3x3 zero padding을 수행하는 convolution layer를 쌓아올리면 이미지의 공간정보는 손실하지 않는다. 출력 Tensor는 CxHxW 인데 출력 tensor는 모든 픽셀에 대해 score를 메긴 값이다. 학습을 위해서는 모든 픽셀의 classfication loss를 계산하고 평균값을 취한 후 back propagation을 수행하면 된다.

 

질문1. training data를 만드는 방법

- annotation을 하는 작업이 들어가기에 시간과 비용이 많이 든다.

 

질문2. loss function이 어떻게 적용되는지

- 모든 픽셀에 대한 출력값과 ground truth와의 cross entropy를 계산하는 것을 일반적으로 사용한다.

 

질문3. 모든 픽셀이 카테고리 종류를 알고 있다고 가정하는지

- 그렇다. 

 

입력 이미지의 spatial size를 유지시켜주어야 한다는 것이 가장 큰 문제점이다. 

 

downsampling upsampling

특정맵을 downsampling upsampling을 사용하여 spatial resolution 전체가 아닌 소량으로 convolution을 수행한다.

downsample의 방법: Max pooling, Stride Convolution

upsample의 방법:  계산효율이 좋아진다, lower resolution을 처리하도록 하여 네트워크를 더 깊게 만들 수 있다.

 

1. unpooling

1-1. nearest neighbor 

receptive field로 값을 그대로 복사

 

1-2. bed of nails

unpooling region에만 값을 복사하고 나머지는 0으로 채움

 

2. max unpooling

네트워크가 대칭적인 것을 이용한 방법으로 pooling과 연관을 짓는 것

downsampling 시 max pooling에 사용했던 요소들을 기억

upsampling 시 같은 자리에 값을 넣는 것이 아니라 maxpooling에 선택된 위치에 맞게 넣어주고 나머지는 0을 넣어준다.

 

질문 4. 왜 이방법이 중요한지

모든 픽셀의 카테고리를 잘 결정하는 것이 중요하고 결과에서 객체들 간의 디테일한 경계가 명확할수록 좋다.

max pooling과 같은 방법을 시행 시에 특정 맵의 비균징성이 발생한다.

max pooling후 특정 맵이 어느 receptive field에서 왔는지 알게 되면 더 공간적인 정보를 잘 기억할 수 있게 된다.

 

Transpose convolution

 

upsampling을 할 때 어떤 값을 갖게하는지를 알 수 있는 방법이다. 먼저 기존의 convolution 연산을 살펴보자.

 

1. Normal 3X3 convolution, stride 1, pad 1

빨간색 필터와 1개의 패딩을 한 input 4X4의 내적의 값이 빨간 스칼라 값을 갖게 되고 필터를 1개의 픽셀 크기만큼 오른쪽으로 옮긴 후 동일한 연산으로 파란색이 이루어진다. 이제 스트라이드를 1 증가시킨 것을 살펴보자.

 

2. Normal 3X3 convolution, stride 2, pad 1

stride 2인 strided convolution은 2개의 픽셀만큼 필터가 이동한다. 이는 입력과 출력에서 움직이는 거리 사이의 비율이라고 할 수 있따. 즉, stride 2인 strided convolution은 학습가능한 방법으로 2배 downsampling하는 것을 의미한다.

 

3. transpose convolution

 

 

transpose convolution에서는 이와 반대의 과정이 벌어진다. 입력이 2X2이고 출력이 4X4이다. 연산과정은 내적을 구하는 것이 아니라 입력값(가중치) X 필터의 값을 구하여 출력값에 넣어주는 것이다. stride가 2일 때 이므로 픽셀을 두 칸 이동하므로 이를 위의 슬라이드에서 빨간색 필터로부터 파란색 필터로 옮긴 것과 같다. 이때 필터부분이 receptive field인데 이 과정에서 두 부분이 겹치게 되는데 이는 간단하게 더해준다. 이 과정을 반복하여 upsampling 과정을 수행하는 것이다.

 

Transpose Conv라는 이름의 어원은 행렬에서의 Transpose에서 왔다고 보면 좋다. 아래의 행렬연산을 살펴보자.

stride가 1인 경우 X와 a의 내적과 X의 transpose와 a의 내적과는 조금 다르지만 기본적으로 같은 연산이 된다. 하지만 stride 2인 경우(stride > 1) 상황은 달라진다. 이는 더 이상 convolution이 아니게 된다.

 

2. image classification + localization

 

이미지가 어떤 카테고리에 속하는지 뿐 아니라 이미지 내에 카테고리가 어디에 위치하는지 알고 싶을 때

이미지 내에서 내가 관심있는 객체가 오직 하나뿐 이라고 가정한다는 것이 object detection과는 다른 점

 

구조

image classifcation 모델과 동일하게 Class score를 가진 FC layer가 존재하고,

Box coordinates를 가진 FC layer가 존재한다. (x, y, w, h)

 

loss function

class score FC layer :: softmax loss를 활용하여 정확한 라벨을 구별함

bbox FC layer :: ground truth bbox와 predict bbox사이의 차이를 측정하는 loss

 

질문 5. class score FC layer의 loss와 bbox FC layer의 loss의 차이를 같이 사용하는 이유와 오분류에 대해서 bbox가 있으면 어떻게 되는지

 

오분류의 문제에서 까다로울 수 있는데 bbox를 예측한 하나의 카테고리에 대해서만 하는 것이 아니라 모든 카테고리에 대해서 하나씩 예측하는 방법이 있다. 그 후 ground truth 카테고리에 해당하는 예측된 bbox에만 loss를 연결짓는다.

 

질문 6. 두 개의 loss function을 사용할 시에 loss의 단위가 달라서 gradient를 구하는데 문제가 되지 않는지

 

multi task loss 두 개의 loss의 가중치를 조정하는 하이퍼 파라미터가 존재하고 이 하이퍼파라미터를 조정해야 한다.

 

loss값을 비교하는 것이 아니라 다양한 모델의 성능 지표를 보는 것이 좋다.

 

질문 7. 앞의 모델의 가중치를 고정시키고 뒷 단의 두 개의 모델의 가중치를 학습시키는 방법은 어떤지

 

Transfer learning 관점에서 보면 fine tune을 할 시 항상 성능이 더 좋아진다. 가장 베스트의 방법은 imagenet과 같은 이미 갖춰진 가중치를 고정시킨 후 뒷 단의 두 개의 모델의 가중치를 학습시킨 후 learning rate를 줄이고 다시 전체적으로 학습시키는 방법을 사용한다.

 

Human Pose Estimation

bobox와 같이 이미지 내의 어떤 위치를 나타낸다는 것은 다른 것에도 적용할 수 있는데 바로 human pose estimation이다. 이를 위한 네트워크에서는 사람의 관절이 14개의 관절을 모두 동일하게 가지고 있다는 가정을 하게 된다.

이때의 입력은 사람 이미지이고 출력은 14개의 점에 대한 좌표의 값이다. 이 좌표의 값을 정답지와 비교하며 학습을 하게 된다. 이떄 loss function은 l2 loss를 사용하기도 하며 다양한 regression losses를 사용할 수 있다. 이는 기존의 categorical한 값이 아닌 continuous한 값이므로 이에 해당하는 다른 loss function을 사용해주어야 한다. 

 

질문 8. regression loss crosse

 

가장 요점적인 부분은 regression ouput이 고정된 개수를 가지게 된다면 다양한 문제(pose estimation)들을 해결할 수 있다는 점이다.

 

3. object detection

 

computervision에서 가장 중요한 분야이다.

고정된 카테고리가 존재하고 이들만 고려한다. 입력에 이미지가 주어지면 이미지에 나타내는 객체에 대해 bbox를 그려내는 것이다. 이때 이미지 내에 존재하는 객체의 수를 미리 알 수 없으므로 고정된 값을 가지지 않기 떄문에 꽤 어려운 문제가 된다.

 

 

전통적으로 pascal voc dataset에서 object detection의 성능을 높이는 것은 매년 이슈가 되고 있다. 

 

object detection은 이미지마다 객체의 수가 달라지며 이를 미리 알 수 없다는 점에서 image localization과는 매우 다른 문제이다. object detection 문제를 풀기에는 regression을 사용할 수 없다.

 

brute force sliding window

가장 큰 문제는 이미지 내의 모든 위치와 스케일을 고려해야 해서 계산 비용이 매우 비효율적으로 높아진다는 것이다.

 

Region proposal

전통적인 방법 중 하나로 Region Proposal Networks가 존재하는데 이는 object가 있을 법한 bbox를 제공해준다. 이는 selective search를 통해 만들 수 있다. 이렇게 나온 이미지는 recall값이 높기 때문에 대부분의 객체들은 이 안에 속하기 마련이다. 따라서, Region Proposal Networks를 통해 나온 그럴듯한 이미지들을 CNN에 넣고서 object detection을 수행하면 훨씬 더 효율적이다.

 

1. Region Based Method

 

RCNN

Region Proposal Network를 통해 약 200개의 ROI(Region Of Interset)를 추출해낸 후 고정된 동일한 사이즈로 크기를 바꿔준 다. 이를 CNN에 통과시킨 후 Classification에 SVM을 적용한다. 또한, Region Proposal을 보정하기 위한regression의 과정을 거치게 된다. 

RCNN은 BBox의 카테고리 뿐 아니라 BBox를 보정해줄 수 있는 offset 값 4개도 예측한다. 

 

질문. 고정된 동일한 사이즈로 조정하면서 변하게 되는 종횡비의 변형에 따른 오차가 있는지?

논문이 있을 것 같으나 확답은 해줄 수 없다.

 

질문. bbox가 굳이 사각형일 필요가 있는지

instance에서는 그렇지 않은 경우가 있지만 object detection에서는 변형이 쉬운 사각형을 쓴다.

 

질문. 고전적인 Region Proposal 은 학습이 되는지

기본적인 알고리즘(Selective Search)을 적용하는 것이지 학습이 되는 것은 아니다.

 

질문. offset이 항상 안쪽으로만 적용해야 하는지

바깥으로 향하여 bbox의 위치를 바꾸기도 한다.

 

질문. 수많은 ORI 객체 중에서 실제 객체가 포함되지 않는 ROI는 어떻게 해야하는지

카테고리에 배경 클래스를 추가시켜 없는 것은 배경으로 학습을 시키면 된다.

 

질문 필요한 데이터

일반적으로 fully supervised 이므로 이미지와 정답 bbox가 존재해야 한다.

 

문제점은 각 Region proposals마다 cnn을 수행해야 하므로 수 많은 forward passes가 요구되어 속도가 매우 느리다.

 

Fast RCNN

각 ROI마다 CNN을 수행하는 것이 아닌 전체 이미지에 대해 CNN을 수행한다. 이를 통해 전체 이미지에 대한 고해상도 feature map을 얻을 수 있는데 여기에 ROI를 projection 시키기에 CNN의 feature map을 ROI가 각각이 공유하게 된다.

그 다음 FC-lyer가 고정된 입력을 받을 수 있도록 ROI pooling layer를 거치게 되고 FC layer를 거쳐서 Classfication Score와 Linear Regression Offset을 계산하게 된다. 이때의 loss function은 두 Loss를 합친 multi-task loss를 사용한다.  

Fast RCNN은 ROI가 CNN의 feature map을 공유하고 있기 때문에 매우 빠른 속도로 진행되어 고정적인 속도를 가지는 Region Proposal이 속도를 늦추는 원인이 된다.

 

Faster RCNN

A

Faster RCNN은 region proposal network가 별도로 존재하여 CNN의 feature로부터 proposal들을 예측한다. 이후의 과정들은 fast RCNN과 동일하다. 이때의 loss는 region proposal network에서 2개, Faster-RCNN의 최종단에도 2개가 존재하여 총 4개의 loss를 고려해야 한다. region proposal network 2개의 loss는 region proposal network에서 객체가 있는지 없는지를 예측하는 binary classfication loss와 이에 관한 BBox loss가 존재한다. Faster-RCNN의 최종단 2개의 loss는 region proposal의 classfication을 결정하는 loss와 region proposal을 보정해주는 BBox regression loss이다.

 

지금까지는 region-based method였으나 다른 방법도 존재한다. 크게 YOLO(You Only Look Once), SSD(Single Shot Detection)가 존재한다. 이들의 주요 아이디어는 각 task를 따로 계산하지 않고 하나의 regression 문제로 풀어보겠다는 것이다. 

 

Single Shot Detection

SSD의 수행방법을 살펴보면 먼저 이미지를 7X7과 같은 grid로 나누어준후 각 grid에 대한 bbox를 3개 이상 (가로로 긴 것, 세로로 긴 것, 정사각형 등)을 만들어 준 후 예측을 수행한다. 이때, 첫 번째, 이 bbox들을 얼마나 옮겨야 하는지에 관한 offset 문제와 두 번째 각 bbox에 대해서 Classificiation score를 계산하는 문제가 존재한다.

네트워크에 입력 이미지가 들어오면 하나의 grid에 대해 (5B+C)개의 tensor를 가지게 되는데 5B는 4개의 BBox의 offset과 confidence score로 구성되고 C는 Classficiation Score이다. 즉, 정리하면 입력은 이미지이고 출력은 3-dimensional tensor이다.

 

faster RCNN과 SSD 둘 다 비슷한 방법이지만 차이점이 존재한다. Faster RCNN은 Region Proposal Network로 먼저 Regression 문제를 풀고 ROI 단위로 Classification을 수행하는 복합적 방법이지만 SSD는 한번의 forward pass 만으로 수행되는 방법이다.  

 

Dense Captioning

또한, 재밌는 Task로 object detection과 captioning을 합한 dense captioning이 존재하여 ROI에 대한 captioning을 수행하도록 하는데 end-to-end로 학습하여 동시에 예측할 수 있다. captioning과정에서는 NLP의 과정이 들어간다.

 

4. Instance Segmentation

 

마지막으로 Instance Segementation이 존재하는데 이는 Semantic Segmentation과 Object Detection을 합한 task이다. 

object detection 문제처럼 각 객체들을 구분해주어야 하고 각 픽셀이 어떤 객체에 속하는지 결정해주어야 하기 때문이다. 

 

mask R-CNN

 

Faster R-CNN과 매우 유사한 방법이지만 특징 맵에서 Region Proposal Network의 ROI만큼을 project한 후 (faster R-CNN과 같이 Classfication과 BBox Regression을 수행하는 것이 아니라) 각 BBox 마다 Segmentation mask를 예측하도록 한다.

 

구조로서 살펴보면 먼저 Faster R-CNN과 유사하게 특징 맵에서 Region Proposal Networkdml ROI만큼을 project한 후 Classification score(어떤 카테고리에 속하는지 계산)와 BBox offset을 해주는 (BBox의 좌표를 보정해주는) BBox Regressioni이 존재한다. 다른 점은 다른 갈래로 Semantic Segmentation을 위한 작은 네트워크가 존재하여 픽셀마다 객체인지 아닌지를 분류한다.

 

 

 mask R-CNN은 Object detection, Instance Segmentation 뿐 아니라 Loss와 Layer를 추가함으로써 pose estimation도 가능하다.  

 

 

-히비스서커스-

728x90

'Theory > Computer Vision' 카테고리의 다른 글

[WSSS] AE-PSL 논문 정리  (0) 2022.02.13
[CS231n 12] Visualizing and Understanding  (0) 2021.09.11
[CS231n Midterm] Short Answer  (12) 2021.03.25
[CS231n 9] CNN Architectures  (2) 2021.02.21
[CS231n 7] training neural network 2  (0) 2021.02.14