본문 바로가기
인공지능/딥러닝

딥러닝 Object detection (이미지에서 객체를 검출 하는 방법)(feat. 2 stage detector)- 2

by 도토리묵 :D 2022. 12. 3.

지난 시간에 이어 이번에는 전통적인 Object detection방법이 아닌 딥러닝이 나온 이후를 살펴보자~

 

Object Detection Milestones

딥러닝 이후로는 1stage detector와 2 stage detector 2가지 방법으로 나뉘게 된다.

 

 

 

📍One stage detector, Two stage detector

 

one stage detector vs two stage detector

 

Object Detection은 지난시간에 설명한 것과 같이 물체를 식별하는 Classification 문제와,  물체의 위치를 찾는 Localization 문제를 합한 것이다.

 

간단하게 설명해서

 

1-stage Detector는 이 두 가지 task를 동시에 행하는 방법이고,

2-stage Detector는 이 두 문제를 순차적으로 행하는 방법이다.

 

이번 시간에는 2 stage detector에 대해 다뤄보려 한다

Object detection 분야에 딥러닝을 최초로 적용시킨 모델인 R-CNN부터 알아보자 🙃

 

 

 

 

✅ R - CNN (Regions with CNN features)

R-CNN은 Regin With Convolution Neuron Networks features의 약자로 즉 설정한 region을 CNN의 feature(입력값)로 활용하여 Object detection을 수행하는 신경망이라는 의미이다.

 

본격적인 설명에 앞서 selective search에 대해 알아야 하기에 해당 설명 부터 하고 넘어가자!~!

 

 

📌 Selective Search

출처: selective search paper with code

 

selective search 란 객체의 위치를 찾는 방법이다.

 

기존의 슬라이딩 윈도우를 통한 이미지 모든 영역에 대한 search 방식의 비효율성으로이제는 object가 있을 법한 영역만 찾는 selective search 방법이 나오게 되었다.

 

과정을 간략하게 설명하자면

입력 이미지에 대해  segmentation을 실시해서 이를 기반으로 후보 영역을 찾는다.

초기에는 후보영역이 많이 만들어지는데 유사한 영역끼리 적절하게 통합해 나가면서 바운딩 박스의 수는 줄어들게 된다.

유사한 후보영역을 찾는 기준은 색깔과 주변 픽셀 값들의 변화량 그리고 바운딩 박스의 크기 차이로 정해 진다.

 

 

 

 

📌 R - CNN 동작원리

이제 본격적으로 R-CNN 에 대해 알아보자!

 

R-CNN 구조

동작 순서를 한번 보자면 

 

1. 인풋 이미지에 대해 selective search 알고리즘을 적용해 물체가 존재할 법한 위치 2000개가량을 찾는다.

(여기서 물체가 존재할만한 위치를 관심 영역, 영어로 reagions of interest 줄여서 ROI라고 하겠음)

 

2. 이 2000개의 ROI를 동일한 크기로 warpping 한 후 동일한 크기의 이미지로 변경한다

 

3. Warped image를 CNN에 넣어 feature를 추출한다.

 

3. 찾은 feature 들에 대해 이진(binary) svm에 넣어줘 class분류 결과를 얻는다. 그리고 동시에 이 feature 들어 대해  regression을 적용하여 바운딩 박스의 위치를 예측한다.

 

최초의 R-CNN은 좋은 성능을 냈지만 몇 가지 한계점이 존재했다.

 

  • 입력 이미지에 대한 CPU 기반의 selective search 과정 자체가 시간이 많이 걸림
  • 찾아낸 2000개의 영역을 각각 CNN을 통해 특징 추출을 하기에 연산량이 많다
  • 또한 CNN과, Classification, 바운딩 박스 Regression 이 세 가지를 따로 학습해 함으로 학습이 느렸고 테스트에 시간이 오래 걸림

 

이러한 문제점을 해결하기 위해 Fast R-CNN이 등장했다.

 

 

 

 

✅ Fast R - CNN

Fast R-CNN 구조

Fast R-CNN 은 selective search에서 얻어진  roi들을 각각 cnn에 넣는 방식이 아닌 이미지 통째로  cnn에 넣는 방식이다.

이 방식을 이용해 R-CNN에서 CNN 연산을 2000번 하던걸 Fast R-CNN는  1번으로 줄였다.

 

동작 순서를 보면

 

1. Fast R-CNN 은 R-CNN과 같이 selective search를 통해 ROI를 찾고  동시에 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.

 

2. 이제 selective search로 찾았었던 ROI를 feature map크기에 맞춰 투영시켜 피쳐 맵 상에서의 ROI를 찾는다.

 

3. 투영시킨 ROI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature 벡터를 얻는다.

(여기서 RoI Pooling 은 ROI에 해당하는 부분만 max pooling을 진행하여 피쳐 맵으로부터 저 차원 벡터로 축소하는 단계다 아래 설명 첨부함)

 

4. 이 feature벡터 들은 fully connected layer을 통과한 뒤 하나는 softmax함수를 통과하여 물체를 분류하고, 하나는 바운딩 박스 regressor를 통해 바운딩 박스 위치를 조절한다.

 

이전에는 2000번의 cnn 연산을 하였지만 한 번의 연산으로 속도가 빨라졌다. 

그리고 동일 데이터가 동시에 softmax와 바운딩 박스 regressor로 들어가 연산 과정을 공유하기에 end-to-end 즉, 한 번에 학습이 가능하다. 

 

하지만!! ROI를 생성하는 selective search알고리즘은 여전히 CPU 상에서 동작하고 이로 인해 병목현상이 발생하게 된다.

이러한 문제를 해결하기 위해 Faster R-CNN 이 등장합니다.

 

 

📌ROI - Pooling 

ROI-Pooling에 대해 설명하고 넘어가자면 위 사진과 같이 피쳐 맵에 사전에 정해진 그리드 셀을 가로 세로 절반으로 나눠 Max Pooling을 해줘 고정된 크기의 region을 만드는 과정이다.

 

이를 하는 이유는 기본적으로 분류를 위해서 Fully Connected Layer을 이용하는데  FC layer는 고정된 input 크기를 요구하기 때문에 크기가 제각각인 region을 고정된 크기로 바꿔줄 필요가 있기 때문이다.

 

하지만 정확하게 셀을 절반으로 나눠지지 않을 때는 이미지가 변형될 수 있다. (이를 방지하기 위한 게 ROI align)

 

 

 

 

✅ Faster R - CNN

 

Faster R-CNN 은 기존의 cpu계산으로 시간이 걸렸던 selective search 부분을 RPN (Region Proposal Network)으로 대체하여 속도 문제를 해결하였다. 

 

RPN은 GPU에서 수행되는데 이 덕분에 GPU를 통해 ROI연산이 가능해졌으며, ROI연산도 학습을 시켜 정확도를 높였다.

모델을 보면 RPN과 Fast R-CNN 모델이 합쳐졌다고 볼 수 있습니다.

 

RPN에서 region proposal를 추출하고 이를 Fast R-CNN 네트워크에 전달하여 객체의 class와 위치를 예측합니다.

이를 통해 모델의 전체 과정이 GPU 상에서 동작하여 병목 현상이 발생하지 않으며, 출력부터 입력까지 backpropagation을 통해서 gradient를 계산할 수 있다는 장점이 있다.

즉, end-to-end로 네트워크를 학습시키는 것이 가능해졌다는 이야기다. 

 

Fast R-CNN의 앞부분인  selective search 부분만 RPN으로 대체되었기에 RPN만 추가로 알아보자.

 

 

📌RPN (Region Proposal Network)

RPN은 region proposal network의 약자로 기존 selective search를 대체한 방식이다.

 

RPN의 입력값으로는 원본 이미지에서 cnn을 거쳐 나온 feature map이 들어간다.

그 feature map위에 sliding window를 사용하며 임이의 k개의 앵커 박스를 사용합니다.

(앵커 박스는 하단에 설명 추가함)

 

이렇게 만들어진 앵커 박스들에 대하여 classification 계층과 regression 계층으로 들어가게 된다.

 

classification계층에서는 박스 내부 객체 존재 유무에 대해 1과 0으로 출력한다.

regression 계층에서는 박스 중앙의 x, y 좌표 , 높이, 너비 이렇게 4가지 정보를 출력한다.

 

이 RPN단계에서 분류와 회귀를 하는 이유는 결국 학습을 위함이다.

 

여기까지 RPN의 과정이며 이 결과 값이 Fast R-CNN과 동일한 나머지 과정을 거치게 됩니다.

이로써 CPU에서 하던 selective search과정이 GPU상에서 RPN으로 돌아가게 됨으로 속도가 개선되었다.

 

 

 

📌Anchor box

앵커 박스란 고정된 크기의 바운딩 박스를 사용할 경우 다양한 크기의 객체를 포착하지 못할 수 있다는 문제가 있어 만들어진 서로 다른 크기의 바운딩 박스들을 말한다.

 

 

이번 시간에는 1 stage detector 들의 주요 모델들인 R-CNN 계열의 발전과 각각에 대해 구체적으로 알아봤는데 다음에는 2 stage 모델에 대해 알아보겠다.

댓글