본문 바로가기
Google Machine Learning Bootcamp 2022/Convolutional Neural Networks

3. Object Detection

by 사향낭 2022. 8. 2.

Detection Algorithms

 

 

Object Localization

 

 

Landmark Detection

 

여러 방면에 landmark detection을 활용할 수 있다. (AR, 자율주행 등등)

 

 

Object Detection

 

Sliding windows detection: window를 만들어 이미지 전역을 sweeping 하면서 그 window에 대해 detection 하는 방법.

 

computational cost가 크다.

 

 

Convolutional Implementation of Sliding Windows

 

Turning FC layer into convolutional layers: FC layer의 input이 w x h x j 형태라고 한다면, w x h x k 형태의 filter를 이용하여 1 x 1 x k로 만든다. (k는 original FC layer의 output shape) (이러한 방식으로 FC layer를 convolutional layer로 생각할 수 있다)

 

한 window에 대해 적용하는 operation을 모두에게 적용함으로써 computational cost를 확연히 줄일 수 있다.

(convolution이기 때문에 가능한 것 같고, 위에서 FC layer를 convolutional layer로 형태를 바꾼 이유도 convolution이 필요하기 때문이다)

(중복되는 영역을 window 개별마다 계산하는 것보다 계산한 값을 공유하는 것이 더 좋다)

 

 

Bound Box Predictions

 

YOLO algorithms: image를 3x3 grid 형태로 만들어 한 grid cell마다 object localization을 한다. (output 3x3x8)

 

당연히 grid를 더 잘게 쪼갤수도 있다.

 

grid cell마다 왼쪽 상단을 (0, 0)으로, 오른쪽 하단을 (1, 1)로 정한다.

 

당연하게도 중심점의 좌표값은 0과 1 사이에 있어야 하지만 width와 height는 1을 넘을 수도 있다

(여러 grid cell에 걸쳐있는 물체일 때)

 

 

Intersection Over Union

 

Evaluating object localization: Intersection over Union (IoU) = \( \frac{size of intersection}{size of union of the prediction and the answer} \)

 

일반적으로 0.5를 넘으면 맞다고 생각한다. (선택사항)

 

 

Non-max Suppression

 

grid를 잘게 쪼갰을 때, 여러 grid cell에서 동일한 object를 detection할 수 있을 것이다.

 

이러한 경우 겹치는 bounding box 중 가장 IoU가 높은 bounding box를 선택한다.

 

반대로 non-max들을 suppression한다.

 

좀 더 자세히 이 과정을 살펴보자면, 먼저 모든 grid cell에 대해 object localization을 한다.

 

그런 다음 prediction probability가 0.6(특정 threshold) 밑인 것들을 버린다.

 

후에 prediction probability가 가장 큰 것들을 prediction output으로 잡고, 이렇게 prediction output으로 잡은 것과의 IoU가 0.5 이상인 것들을 다 버린다.

 

이 과정이 training과 test 과정 모두에 통용되는 것인지 모르겠다.

 

버리는 것들은 training 과정에서 학습할 때에도 안 쓰이는 건가.

 

 

Anchor Boxes

 

만약 한 grid cell에 object center가 두 개 이상 있다면 어떻게 해야 할까.

 

일단 object 두 개 이상에 대한 output이 필요한 것은 당연할 것이다.

 

그렇다면 그 output의 순서는 어떻게 정하는가인데, 기준이 되는 anchor box에 ordering을 한다.

 

그런 다음 찾은 object에 대해 anchor box와의 IoU를 계산하고, 가장 높은 anchor box의 index를 따른다.

 

anchor box 개수 이하로만 object를 찾을 수 있다.

 

 

YOLO Algorithm

 

grid cell로 나누어 object localization을 한다. (anchor box를 사용할 수도 있다)

 

그런 다음 non-max suppressed outputs를 구한다.

 

- For each grid cell, get 2 predicted bounding boxes

 

- Get rid of low probability predictions

 

- For each class (pedestrian, car, motorcycle) use non-max suppression to generate final predictions.

 

 

Region Proposals

 

R-CNN: Propose regions. Classify proposed regions one at a time. Output label + bounding box.

 

Fast R-CNN: Propose regions, Use convolution implementation of sliding windows to classify all the proposed regions.

 

Faster R-CNN: Use convolutional network to propose regions

 

object가 있을 것 같은 region을 추정하여 그 부분에만 object localization을 할 수 있을 것이다.

 

 

Semantic Segmentation with U-Net

 

자율주행이나 X-Ray, MRI 사진 같은 방면에 semantic segmentation을 사용하여 어떤 부분에 주목해야 하는지 알 수 있다.

(어떤 부분이 암으로 의심된다, 어떤 부분은 가까이 가면 위험하다 등)

 

모든 pixel에 대해 class labeling을 한다.

 

 

Transpose Convolutions

 

input보다 shape이 더 큰 output이 필요할 때 쓸 수 있는 방법 중 하나다.

 

normal convolution은 filter의 element와 input의 element를 1:1로 매칭 시킨다면, transpose convolution은 filter의 모든 element와 input의 한 element를 매칭 시킨다.

 

이 과정을 input의 모든 element마다 해준다.

 

stride에 따라 그 결과를 배치시키고 겹치는 부분은 summation 해준다.

 

이 방법을 설명하는 이유는 보통 convolution을 거치면 shape이 작아지는데 semantic segmentation을 하기 위해서는 output이 input과 width와 height가 같아야 하기 때문이다.

 

 

U-Net Architecture Intuition

 

layer를 계속해서 거치면 resolution이 낮아진다고 생각할 수 있다.

 

따라서 Semantic segmentation에서 high resolution을 deep layer에 제공하기 위해 skip connection을 사용한다. 

 

 

U-Net Architecture

 

Convolution & ReLU, max pooling, transpose convolution, skip connection, 1x1 convolution을 사용하여 U-Net을 만들 수 있다.

댓글