728x90
반응형

키워드

1. Region Proposal Network (RPN)을 도입하여 후보 영역 생성을 CNN 내부에서 처리. 객체 검출의 속도와 정확도를 크게 개선.

2. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks"

3. Faster R-CNN, Region Proposal Network, Anchor box, two-stage detection, NMS

Faster R-CNN

  Object detection은 region proposal 알고리즘을 사용하여 객체 위치를 가정한다. 여러 네트워크에서 새로운 실행 시간을 줄이는 새로운 방법이 도안되었으나, region proposal 계산이 여전히 bottleneck으로 남아있다. 가장 널리 사용되는 방법 중 하나인 selective search는 엔지니어링된 low-level feature를 superpixel 기반으로 병합하는 방식으로 많은 시간을 소비한다.

  R-CNN은 주로 classifier 역할을 하며 bounding box를 예측하지 않는다. 이에 정확성은 region proposal 모듈의 성능에 따라 달라진다. 이어서 bounding box를 예측하기 위해 deep 네트워크를 사용하는 방법을 제안되었고, OverFeat 에서 FC레이어가 단일 객체의 위치를 파악하기 위해 학습되기도 했다.

  이에 detection과 CNN 네트워크를 공유하여 거의 비용이 들지 않는 region proposal을 가능하게 하는 region proposal network(RPN) 가 등장했다. RPN은 Fast R-CNN 기반의 네트워크에서 region을 생성하기 위해 end-to-end 방식으로 학습되는 layer이며, region proposal을 생성하기 위해 CNN의 feature map을 사용한다. 이를 통해 추출된 각 region은 네트워크를 통과하며 bounding box와 클래스 점수가 동시에 예측된다. 테스트 시에도 네트워크를 공유함으로써 계산에 대한 비용이 작아 시간이 빠르다. 

Faster R-CNN

  위 이미지는 region proposal의 여러 예시로 (a)는 이미지 피라미드, (b)는 다양한 스케일/크기를 가진 filter 피라미드, (c) reference box의 피라미드를 사용했다. RPN은 마지막 (C)의 방식으로 다양한 규모, 종횡비의 “앵커(anchor)”를 사용하여 region proposal을 효율적으로 예측하도록 설계되어있다.

Architecture

Faster R-CNN

  Faster R-CNN은 크게 두개의 모듈로 구성된다. 첫 번째 모듈은 영역을 제안하는 네트워크이고, 두 번째 모듈은 제안된 영역을 사용하여 클래스와 Bounding box를 계산하는 Fast R-CNN 모듈이다. 즉, object detection을 위한 하나로 통합된 단일 네트워크이며, RPN 모듈은 Fast R-CNN 모듈에 어디를 봐야 하는지 알려주는 역할을 한다.

Region Proposal Network

  RPN은 마지막 shared conv 레이어의 feature map를 입력으로 사용하고, 각각 objectness 점수가 있는 직사각형 object proposal 세트를 출력한다. 이에 두 Net이 공통의 Conv 레이어를 공유한다고 볼 수 있으며, Classification 네트워크로 ZFNet, VGG16이 사용되었다.

Faster R-CNN

  입력 feature map의 n × n 개 window를 입력으로 사용하며, 각 슬라이딩 윈도우는 더 낮은 차원의 feature에 매핑된다. 이후 box regression 레이어(reg)과 box classification 레이어(cls)라는 두 개의 FC 레이어에 연결된다. 이러한 구조는 슬라이딩 윈도우 방식으로 작동하므로 FC 레이어는 모든 공간 위치에서 공유한다고 볼 수 있으며, 자연스럽게 n×n conv 레이어와 두 개의 1×1 conv 레이어로 이루어져 있다. 위 이미지의 빨간 영역이 슬라이딩 윈도우 방식으로 작동한다고 보면 된다.

Anchor

  각 슬라이딩 윈도우 위치에서 여러 region을 추출하여 동시에 예측한다. 각 region에 대해 가능한 최대 proposal 수는 k로 두면, reg 레이어에는 k 상자의 좌표를 인코딩하는 4k개의 출력하고, cls 레이어는 각 제안에 대해 개체가 있을 확률과 개체가 아닐 확률을 추정하는 2k개의 점수를 출력한다.

  이 k개의 proposal을 앵커(anchor)라고 부른다. 기본적으로 3개의 크기와 3개의 종횡비를 사용하여 각 슬라이딩 위치에 k = 9개의 앵커를 생성한다. 이전 RPN 이미지에서 k 앵커 박스의 예시 이미지를 확인할 수 있다. 기존에는 BB regression을 위해 이미지 혹은 feature 피라미드 방식이 널리 사용되었으나, 속도가 오래걸리는 단점이 있다. 이에 filter 피라미드를 활용하는 대안도 활용되기도 했다. Faster R-CNN은 이와 달리 앵커 피라미드를 활용하였다고 볼 수 있으며, 다양한 크기와 종횡비의 앵커 상자를 참조하여 bounding box를 분류하고 regression 하는 방식이다. 단일 이미지, feature map, filter를 사용하기에 추가 cost가 없다는 점에서 굉장히 유리한 방식이다.

Faster R-CNN

  여기서 다양한 형태의 앵커는 효율성이 더 높다. 위 표를 참고하면 여러 크기의 앵커를 사용하는 것이 효과적이라는 것을 알 수 있다. 이는 또한 탐지 정확도를 위해 크기와 종횡비가 분리된 차원이 아님을 의미한다. 다만 시스템 유연성을 유지하기 위해 설계에 이러한 두 가지 차원을 사용하였다.

  앵커의 또다른 중요한 속성은 translation invariant 하다는 점이다. 앵커와 앵커에 상대적인 제안을 계산하는 함수 측면에서 객체가 이동하는 경우 region도 이동되어야 하며, 동일한 feature가 전후 위치 모두에서 예측할 수 있어야 한다. 이전에 사용되던 region proposal 중 하나인 MultiBox 방법은 객체와 동일한 위치에 앵커를 생성하는 것이 아닌, k-means를 사용하여 800개의 앵커를 생성한다. 따라서 MultiBox는 객체가 이동되면 동일한 proposal이 생성된다는 것을 보장하지 않는다.

  학습시 각 앵커에는 binary cls 라벨이 할당되며 이는 객체 여부를 판단하는데 사용된다. 이 라벨은 두 기준으로 positive가 라벨링 된다. 첫번째는 GT box와 가장 높은 IoU(Intersection-over Union)가 있는 앵커, 두번째는 GT box와 IoU가 0.7 이상인 앵커다. 그리고 negative 레이블은 IoU가 0.3이하인 앵커를 라벨링하며, 나머지는 학습에 활용되지 않는다.

Loss function

Faster R-CNN

  손실 함수는 다음과 같이 정의된다. p는 앵커 i가 객체일 것으로 예상되는 확률이며, ti는 예측된 경계 상자의 파라미터화된 4개 좌표를 나타내는 벡터다. p*i를 통해 양의 앵커(p*i = 1)에 대해서만 활성화되고 그렇지 않으면 비활성화됨(p*i = 0)된다. cls 항은 미니 배치 크기(예: Ncls = 256)로 normalize되고, reg 항은 앵커 위치 수(예: Nreg ∼ 2, 400)로 normalize됩니다.

  Bounding box regression의 경우 4개 좌표의 parameter를 활용한다. x, y, w, h는 상자의 중심 좌표와 너비 및 높이이며, x, xa,  x*는 각각 예측, 앵커, GT box를 의미한다. 이는 앵커에서 인근 GT로의 bounding box regression으로 생각될 수 있으며, 이전 RoI 기반 방법과 다른 방식으로 구현된다. 그 이유는 RoI 기반 방식은 가중가 모든 영역 크기에서 공유되나, 앵커 방식은 다양한 크기를 설명하기 위해 k개의 BB regresor 세트가 학습되기 때문이다. 각 세트는 하나의 척도와 하나의 종횡비를 담당하며 가중치를 공유하지 않는다. 이에 feature의 크기/규모가 고정되어 있어도 다양한 크기의 상자를 예측하는 것이 가능하다.

Faster R-CNN

  추가로 다양한 λ 값을 비교했을때,  λ가 약1~100 범위 내에 있을 때 성능에 미미하게(~1% 정도) 영향을 받는다. 이는 넓은 범위에서 λ에 둔감하다는 것을 의미힌다. 추가로 모든 앵커의 손실 함수를 최적화하는 것이 가능하지만 negative(배경) 앵커가 많으면 학습이 편향되게 된다. 이에 256개의 앵커를 샘플링하여 미니 배치의 손실 함수를 계산하며, 샘플링된 posi, nega 앵커의 비율은 최대 1:1이다. 만약 posi샘플이 128개 미만인 경우 미니 배치를 nega 샘플로 채운다.

728x90

RPN 과 Fast R-CNN 간 feature sharing

  Classification 네트워크로는 Fast R-CNN을 사용했다. 이에 RPN과 Fast R-CNN으로 구성된 통합 네트워크를 학습하는 알고리즘이 필요하다. 두 네트워크 간 conv 레이어가 공유되어야 하며 이를 위한 세 가지 방향성이 있다.

  1. Alternating training. 먼저 RPN을 훈련하고 추출된 region을 사용하여 Fast R-CNN을 훈련하는 방식이다. 이후 조정된 Fast R-CNN 네트워크는 RPN을 학습하는데 사용되며 이 프로세스가 반복된다.
  2. Approximate joint training. 훈련 중에 RPN 및 Fast R-CNN 네트워크가 하나로 병합되어 학습한다. 이는 alternating training 대비 25~50% 학습 시간을 단축하나. Backpropagation 시 proposal box 좌표의 기울기가 무시된다. (ResNet의 skip 처럼 작동되는 듯 하다.)
  3. non-Approximate joint training. RPN에 의해 ​​예측된 bounding box는 RoI pooling 레이어의 입력으로 사용된다. 이에 이론적으로 유효한 backprop solver는 상자 좌표에 대한 기울기도 포함되어야 한다. 다만 기울기가 전파되지 않으므로, 이를 위한 RoI pooling 레이어가 필요하며,  "RoI warping" 레이어에 의해 구현될 수 있다.

  이에 4단계의 alternating training 알고리즘이 사용되었다. 알고리즘을 검증하기 위해 4단계 훈련 과정 중 두 번째 단계까지만 훈련을 진행한 후 테스트 시 각각 별도의 네트워크를 사용하면 결과가 58.7%로 약간 감소했다. 이를 통해 RPN fine-tuning을 위한 classifier의 feature를 사용하는 세 번째 단계가 도움이 된다는 것을 알 수 있다.

  1. Pre-trained된 네트워크를 기반으로 RPN을 학습한다.
  2. 학습된 RPN을 기반으로 Fast R-CNN을 학습한다. 이 시점에서 두 네트워크는 conv 레이어를 공유하지 않는다.
  3. 이제 두 네트워크는 단일 네트워크로 conv 레이어를 공유하고 우선  RPN에 고유한 레이어만 fine-tuning한다.
  4. 마지막으로 shared conv 레이어를 고정한 상태로 유지하면서, Fast R-CNN의 고유한 레이어를 fine-tuning한다.

  또한 학습 시 이미지 경계를 넘는 앵커 상자는 주의해서 처리해야한다. 훈련에서 경계를 넘어 발생하는 outlier를 무시하지 않으면 크고 수정하기 어려운 오류가 추가되고  훈련이 수렴되지 않는다. 이에 훈련 중에는 경계를 넘는 앵커를 무시하여 손실에 기여하지 않으나, 테스트 중에는 여전히 전체 이미지에 RPN을 적용한다. 이는 이미지 경계에 맞춰진 제안 상자를 생성하기 위함이다.

  여러 RPN region은 서로 겹친다. 이러한 중복성을 줄이기 위해 cls 점수를 기반으로 proposal에 NMS(Non-Maximum Suppression)를 적용한다. NMS의 IoU 임계값을 0.7로 고정하여 이미지당 상위 N개만의 제안 영역만 활용하는 방식이다. 실험은 N=2000을 사용하였으나, 아래 이미지를 참고하면 proposal 수를 크게 줄여도 SS 및 EB와 비교하여 정확도에 영향을 주지 않는다는 것을 알 수 있다. 이에 적당한 N을 사용해야 잘못된 정보가 전달되는 것을 방지할 수 있다.

Faster R-CNN
Recall-to-IoU matrix

결과

Faster R-CNN
성능 결과
Faster R-CNN
속도 결과

  Fast R-CNN의 base 네트워크로 ZFNet과 VGG16이 사용되었으며, 위 표는 서로 다른 region proposal 방법을 학습하고 테스트한 결과다. Selective search(SS), EdgeBoxes(EB)를 사용한 Fast R-CNN보다 N=300을 사용한 RPN 방식이 더욱 좋은 성능을 보였다. 또한 훨씬 빠르게 동작하기도 하였으며, 이는 N이 작을수록 FC 레이어의 비용도 줄어들었기 때문이다.

 테스트 시 RPN의 cls 및 reg 출력 중 하나를 꺼서 각각의 역할도 개별적으로 조사하였다. cls 레이어가 제거되면 N개의 무작위 proposal을 샘플링하였고, mAP는 N = 1000(55.8%)에서는 거의 변하지 않지만 N = 100에서는 44.6%로 상당히 저하되었다. 이는 cls 점수가 유효한 proposal을 제안해준다는 것을 설명한다. reg 레이어가 제거되면 앵커가 그대로 proposal이 되고, mAP는 52.1%로 떨어집니다. 이는 좋은 proposal이 주로 regressor에 기인함을 시사한다.

  추가로 one-stage, two-stage 방식의 비교 결과이다. One-stage방식은 OverFeat의 feature map의 슬라이딩 윈도우에서 regressor와 classifier를 사용하는 탐지 방법이다. Two-stage 방식은 faster R-CNN의 pipeline은 proposal과 classification으로 구성된 방식이다. RPN에서 feature는 정사각형(3×3) 슬라이딩 윈도우에서 제공되며 다양한 앵커를 기준으로 proposal이 생성되며, 이후 Fast R-CNN 에서 proposal으로 결과를 출력한다. 결과를 보면, 결과를 보면 two-stage의 정확도가 더 높으며, one-stage의 경우 처리할 proposal이 상당히 많기 때문에 속도도 더 느리다.

Faster R-CNN
MS COCO 데이터셋

Reference

논문 링크 : https://arxiv.org/abs/1506.01497

728x90
반응형

'딥러닝 > Object Detection' 카테고리의 다른 글

[Object Detection] SSD  (0) 2024.09.19
[Object Detection] YOLO  (0) 2024.09.14
[Object Detection] Fast R-CNN  (3) 2024.09.07
[Object Detection] R-CNN  (0) 2024.09.05
[Object Detection] Object Detection의 발전 과정  (0) 2024.08.31

+ Recent posts