이번 강의에선 computer vision의 main task중 하나인 Object detection에 대해서 다룬다.
이 전까지 봐왔던 image classification task는 하나의 전체이미지를 CNN을 거쳐 single category label을 출력하는 형태였다.
Image classification은 많은 어플리케이션에서 사용되어온 만큼 매우 유용하지만 하나의 label(object)에 대해서만 분류한다는 단점이 있다.
Object detection은 single RGB 이미지를 input으로 받아 감지된 object들의 set 을 output으로 출력하는 형태이다.
각각의 object들은 Category label 과 해당 object의 spatial extent(location정보)를 나타내는 Bounding box 를 갖는다.
Object detection은 image classification과 비교하면 상대적으로 약간의 복잡한 변화가 추가된 형태이다.
일단 기본적으로 vgg, resnet과 같은 CNN을 통해 이미지의 vector representation(feature vector)을 뽑아낸다.
Vector representation을 통해 category label를 위한 loss, bounding box를 위한 loss 두가지의 branch를 갖게된다.
이때 gradient descent를 위해 두개의 loss를 잘 조합하여 single scalar loss를 구해주어야한다.
두개의 loss를 weighted sum을 통해 하나의 loss를 뽑아내게 되는데 이때 두 loss간 상대적인 중요도에따라 잘 tuning해주어야 한다.
이렇게 하나의 network에서 mutiple diffenrent loss를 갖는 형태를 Multitask Loss 라고 한다.
하지만 이러한 Sliding window approach는 위 그림에서처럼 고정된 box size에 대한 모든 possible position뿐 아니라 모든 possible box sizes, possible aspect ratios를 고려해보면 엄청난 연산을 해야하고 이는 실현 불가능하다.
이러한 문제로 Object detection에 대한 또다른 approach가 필요하다.
이미지의 모든 possible region들을 object detector를 통해 평가하는 대신 "set of candidate regions"을 생산하는 external algorithm을 사용한다.
이러한 Region proposals algorithm을 활용하여 object detection의 input으로 넣는 딥러닝 모델을 살펴보자.
R-CNN은 우선 input image에 selective search와 같은 region proposal mothod를 사용하여 2000개의 RoI(Region of interest)를
뽑아낸다.
이때 2000개의 각각의 RoI들은 서로 다른 사이즈와 aspect ratio
를 갖고있기에 (224x224)size로 warping 시켜준다.
Warped image region들은 각각 CNN으로 forwarding시켜 처리한다.
하지만 이때 selective search를 통한 image region들은 detect하고자하는 object들과 일치하지 않을 뿐더러 selective search를 통한 bounding box 추출 메커니즘이 black-box의 형태로 학습이 되지 않는다는 문제가 있다.
Black-box형태의 메커니즘에의해 발생한 문제는 이전에 살펴본 Multi-task loss 를 사용하여 해결한다.
CNN은 class score외에도 B-box를 예측하는 output이 있다.
R-CNN의 test시 pipeline은 다음과 같다.
위 그림에서 주황색에 해당하는 Area of Intersection에 보라색에 해당하는 Area of Union을 나눠주어 overlap되는 ratio를 계산하게된다.
직전에 언급한데로 해당 논문에서는 IoU가 0.5이상인 것을 positive window로 사용하였다.
Non-max suppression 구현에는 다양한 방법들이 있지만 가장 간단한 방법으로는 greedy algorithm을 사용하는 것이고 다음과같은 과정을 갖는다.
위 그림에서 NMS를 진행하면 파랑, 보라 box만이 남게된다.
위에서 언급하였던 IoU matric을 사용해 individual box간 비교하는 방법외에 object detector가 test-set에 얼마나 잘 작동할지를 평가하는 overall perfomance metric이 필요하다.
Object detection에서 흔히 사용되는 matric인 Mean Average Precision 을 살펴보자.
일단 모든 test-set image를 object detector로 forwarding시키고 NMS를 통해 불필요한 detection들을 걸러낸다.
위 과정을 통해나온 각각 image의 bunch of detected boxes는 각category에 대한 class score를 갖게된다.
이 각각의 category를 가지고 Average Precision을 구하게되는데 이는 각 category가 overall에서 얼마나 잘 하고있는지? 를 나타내며 Precision Recall Curve를 통해 나타낼 수 있다.
각각의 detection에서 PR Curve를 그리는 법을 살펴보자
모든 detection에 대해 Precision, Recall을 계산하여 plotting을 하였으면 PR curve의 area를 구하여 Average Precision (AP) 를 구해준다.
위처럼 category별로 구해진 AP들을 평균내어 mAP를 구해줄 수 있게된다.
하지만 이런 mAP는 사실 IoU > 0.5 를 사용하기에 localizing boxes를 평가하는데 적합하지 못하다.
Fast R-CNN에서 feature를 cropping를 하는데 이때 backbone network까지 differentiable하게 만들어줘 backporp될 수있게 만들어 주어야 한다.
그렇다면 어떤 방식으로 differentiable하게 feature를 cropping하는지 살펴보자.
Projection된 RoI를 위 그림처럼 대충 2x2 sub-reigion으로 나누고 각 sub-reigion들을 max pooling시켜준다.
RoI pooling으로 인해 input region이 매번 다르더라도 tensor(output)가 매번 고정된 size를 갖게되는 것 이다.
-> 일단 어디서 본 것은 conv layer의 input size는 고정될 필요는 없지만 fc layer의 size는 고정되어야한다고 본 것 같다.
이렇게 Fast R-CNN은 전체 이미지에 convolution연산을 진행함 으로서 2000번 conv연산 할 것을 원콤으로 처리한것. (conv layer에서 모든 region proposal의 연산을 공유했다고 볼 수도 있다)
추가로 snap하는 과정에서 약간의 오차가 생길 수 있어 약간 더 복잡한 방식으로 bilinear interpolation을 사용하는 RoI Align이 사용되곤 하는데 강의에서 깊게 다루지 않고 정리하기 너무 빡세서 혼자만 대충 봤습죠
이러한 Fast R-CNN도 "Slow" R-CNN에 비해 속도가 훨씬 빨라졌지만 여전히 (cpu를 사용하는) heuristic algorithm인 selective search를 사용하기에 여전히 이부분이 'bottle neck'이다
그렇기에 CNN을 사용하여 region proposal을 구하는 방법이 필요하다.
직전에 언급한데로 병목이 일어나는 heuristic algorithm인 selective search를 제거하고 CNN을 통해 region proposals을 예측해야한다.
이를 위해 Faster R-CNN에서는 Region Proposal Network(RPN)을 추가함으로 CNN에서 reigion proposal을 예측할 수 있게 만들었다.
Faster R-CNN은 Region Proposal Network(RPN)을 제외한 나머지 구조는 Fast R-CNN과 동일하다.
Image level feature에서 selective search를 통해 region proposal을 뽑아내는 대신 RPN을 통해 region proposal을 뽑아낸다.
RPN에서 어떻게 CNN을 통해 trainable way로 region proposal을 뽑아내는지 알아보자.
위와같은 고정된 크기의 anchor box만을 사용하면 모든 type의 object들을 잘 표현하지 못하기에 위 그림처럼 feature map마다 K개의 (서로 다른 size, aspect ratio를 갖는) anchor box들을 사용한다.
Faster R-CNN은 위 그림처럼 4개의 loss를통해 학습하게 된다.
각각의 loss들은 이전에 언급이 되었기에 설명은 생략합니다.
Single-Stage Object Detection에서는 Faster R-CNN의 첫번째 stage만 사용하고 object or not을 판단하는 binary classification 대신에 full classification decision을 사용한다.
(위 그림에서 C+1 category별로 anchor를 사용)
또한 regression도 카테고리별로 box transform을 학습하게 되는데 이를 category-specific regression 이라고 한다.
Object detection task든 다양한 선택을 할 수 있고 이로인한 trade-off관계를 위 그림을 제공하는 paper를 통해 insight를 얻을수 있다. 언젠간 읽어보겠지 ㅎㅎ.
끝 -