FPN, Feature Pyramid Networks for Object Detection 논문을 읽어보고, 내용을 정리한 포스팅입니다.
Abstract
스케일 불변성(scale-invariance)를 얻기 위해 Feature Pyramids를 사용하는 것은 필수적입니다. 하지만 Feature Pyramids는 많은 연산량과 메모리가 필요하여, detection 속도가 느려지는 문제점이 있습니다. 이를 개선하기 위해 제안된 방법이 FPN입니다.
FPN을 Faster R-CNN에 사용하여 최고 성능을 얻었습니다.
Different Architectures for Detection
object detection 방법은 image를 CNN에 전달시켜 생성된 feature map을 이용합니다. 이미지의 해상도가 축소되었기 때문에 작은 물체를 탐지하기가 어렵다는 문제가 발생합니다. 이를 해결하기 위해서 다양한 방법을 활용합니다.
(a) Featurized image pyramid
입력 이미지를 다양한 크기로 resize한 뒤에 CNN에 통과시켜 feature map을 얻습니다. 다양한 크기의 feature map은 크고 작은 물체들을 검출할 수 있을 것입니다. 하지만, 이 방법은 resize된 각 이미지에 CNN을 적용해야 하므로 많은 연산량과 시간이 소모됩니다. 느리기 때문에 거의 사용하지 않는 방법입니다.
(b) Single feature map
YOLO에서 사용하는 방법입니다. 하나의 이미지에 CNN을 한번만 통과하므로 빠릅니다. 하지만 최종 크기의 feature map만 사용하기 때문에 작은 물체에 대한 정보가 소실되는 문제점이 있습니다.
(c) Pyramidal feature hierarchy
SSD에서 사용하는 방법입니다. 순전파로 계산된 여러 계층에서의 multi-scale feature map을 재사용 합니다. SSD는 VGG net의 conv4_3이후의 feature map을 사용합니다. 따라서 고해상도의 feature map을 사용하지 않아, 작은 물체에 대한 정보가 소실되는 문제가 있습니다.
(d) Feature Pyramid Network
FPN, Feature Pyramid Net에서 제안하는 방법입니다. top-down pathway와 lateral connection을 사용하여 고해상도, 저해상도 feature map을 결합합니다. 이 결과로 feature pyramid는 모든 scale의 정보를 담고있고 하나의 이미지로부터 빠르게 계산되기 때문에, speed, memory, power의 손실 없이 이용할 수 있습니다.
그리고, feature pyramid의 각 level에서 prediction이 독립적으로 수행됩니다.
(e) Similar Structure with (d)
TDM, SharpMask, RED-Net, U-Net 등 FPN논문이 등장할 시기의 최신 모델들이 사용하는 방법입니다. FPN과 비슷하게 top-down을 이용하고, feature map을 연결하기 위해 skip connection을 사용합니다. FPN과 차이점은 마지막 stage에서만 predict를 수행합니다.
Feature Pyramid Networks
FPN은 bottom-up pathway, top-down pathway, lateral connection으로 이루어져 있습니다. 각각이 어떤 역할을 하는지 알아보겠습니다.
Bottom-up pathway
bottom-up pathway는 backbone ConvNet의 순전파 연산을 말합니다. 동일한 크기의 feature map을 출력하는 layers들을 동일한 stage로 묶습니다.(ResNet을 backbone으로 이용한 경우, padding이 적용된 conv layer를 거치면 입력값과 동일한 크기의 feature map이 생성됩니다. 이를 개별적으로 보지 않고 하나의 stage로 보는것입니다.) 1 stage를 거칠때마다 feature map의 크기는 1/2가 됩니다.
각 stage의 마지막 layer의 출력값을 pyramid에 사용할 feature map으로 이용합니다. 5개의 residual block의 경우에 각각의 feature map을 {C2, C3, C4, C5}로 정의합니다. 이는 conv2, conv3, conv4, conv5의 출력값입니다. 입력 이미지에 대해 {4, 8, 16, 32}의 stride를 지니고 있습니다.(크기가 2배수로 감소했다는 의미입니다.) conv1은 포함하지 않았는데, 메모리 제한때문에 포함하지 않았다고 합니다.
Top-Down Pathway and Lateral Connection
Top-down pathway는 상위 feature map을 nearest neighbor upsamling 기법을 적용하여 해상도를 2배씩 키웁니다.
lateral connection은 bottom-up pathway와 top-down pathway에서 같은 크기의 feature map을 결합합니다. bottom-up pathway의 feature map에 1x1 conv를 적용하여 feature map의 channel을 감소시킨 뒤에 단순히 top-down pathway feature map에 더하여 계산합니다.
이렇게 결합된 feature map에 3x3 conv를 적용하여 최종적인 feature map을 생성합니다. 그리고 이 최종 feature map을 {P2, P3, P4, P5}라고 부르고 각각은 {C2, C3, C4, C5}와 동일한 크기를 지닙니다. 각각의 feature map의 channel 수는 256으로 고정합니다.
아래 그림은 위 과정을 시각화한 그림입니다.
Feature Pyramid Networks for RPN
RPN은 Faster R-CNN에서 region proposal로 이용하는 region proposal network입니다. 이 RPN을 FPN으로 대체하여 성능이 상승했습니다. 어떤 방식으로 RPN을 FPN으로 대체했는지 알아보겠습니다.
RPN은 마지막 conv layer의 feature map에 256 채널의 3x3 conv를 적용하여 Intermediate layer를 생성합니다. 이 intermediate layer에 1x1 conv를 두 갈래로 적용하여 class(object/non-object), bounding box regression을 수행합니다. class, bounding box regression을 수행할 때, 사전에 설정한 anchor를 기반으로 예측합니다.
이 RPN을 FPN으로 대체합니다. 3x3 conv와 1x1 양갈래 conv를 feature pyramid에서 각 lavel에 부착합니다. 각 level은 다양한 크기의 feature map을 의미하므로 anchor이 필요가 없습니다. 대신에, 각 level에서 scale이 같은 anchor만을 사용합니다. 예를 들어, P2에는 32x32 anchor, P3에는 64x64 anchor 만을 사용합니다. 논문에서는 {P2, P3, P4, P5, P6} 각각에 {32^2, 64^2, 128^2, 256^2, 512^2} 면적을 지닌 anchor로 정의했습니다. P5는 크기가 큰 물체의 정보를 담고 있을 것이라고 예상가능합니다. 따라서 가장 크기가 큰 anchor를 지정합니다. 또한 anchor의 aspect ratio는 {1:2, 1:1, 2:1}로 지정하여 각 level에서 3개의 anchor를 사용합니다.
ground-truth box와 IoU가 0.7이상인 anchor은 positive label로 지정하였고, IoU 0.3 이하인 anchor는 negative label로 지정합니다.
Feature Pyramid Networks for Fast R-CNN
Fast R-CNN은 RoI pooling을 사용합니다. selective search로 proposal을 생성하고, 생성된 proposal을 최종 feature map에 투사합니다. 투사된 영역(RoI)은 RoI pooling layer를 거쳐서 고정된 크기의 벡터가 됩니다. 이 벡터가 두 fc layer로 전달되어 class와 bounding box를 예측합니다.
아래 그림은 Fast R-CNN의 작동 방식을 시각화한 그림입니다.
FPN을 Fast R-CNN에 사용하기 위해 RoI를 pyramid level에 할당합니다. RoI를 pyramid level에 할당할 때 다음 수식을 사용합니다. RoI의 크기에 따라 할당되는 pyramid level을 결정하는 수식입니다.
RoI의 넓이 w, 높이 h로 k를 결정합니다. 그리고 feature pyramid의 $P_k$에 해당 RoI를 지정합니다. $k_0$은 224 x 224 크기의 RoI가 매핑되는 수이며, 논문에서는 4로 설정합니다. 만약 112 x 112 크기의 RoI가 입력되면 k=3, $P_3$에 매핑됩니다. 그리고 feature pyramid의 각 level에 class-specific classifier와 bounding box regressor를 부탁합니다. RoI pooling layer로 7x7 크기의 feature map을 추출하고, 그 뒤에 두 개의 1,024차원의 fc layer를 부착합니다.
참고 자료
[2] towardsdatascience.com/review-fpn-feature-pyramid-network-object-detection-262fc7482610
'논문 읽기 > Object Detection' 카테고리의 다른 글
[논문 읽기] RetinaNet(2017) 리뷰, Focal Loss for Dense Object Detection (0) | 2021.03.08 |
---|---|
[논문 읽기] OHEM(2016) 리뷰, Training Region-based Object Detectors with Online Hard Example Mining (0) | 2021.03.06 |
[논문 읽기] SSD(2016) 리뷰, Single Shot MultiBox Detector (0) | 2021.03.01 |
[논문 읽기] Faster R-CNN (2015) 리뷰 (0) | 2021.02.18 |
[논문 읽기] Fast R-CNN(2014) 리뷰 (1) | 2021.02.14 |