Deep Learning(기본) - 3. Object Detection(2)

Ui Jin·2022년 11월 16일
0

Deep Learning

목록 보기
7/15

Object Detection With Neck

1. BackGround

1) Neck

앞서 CNN에서 배웠듯이, 일반적으로 CNN모델의 깊이가 깊어질수록 Receptive Field의 크기가 커진다.

이것을 참고하여 Faster R-CNN을 보면, Backbone모델의 가장 마지막단만 활용하여 RPN의 입력으로 주어진다는 점을 확인할 수 있다.

즉, Faster R-CNN은 큰 Receptive Field를 갖는 Feature Map을 전달해주기 때문에, 큰 물체들에 대해서는 Bounding Box를 잘 찾지만, 비교적 작은 물체에 대해서는 Bounding Box를 잘 찾지 못하게 된다고 해석할 수 있다.

이 문제를 해결하기 위해 나온 개념이 바로 Neck이다.
Neck은 RPN의 입력으로 Feature Map을 주기 전에 Backbone의 중간에 존재하는 여러 Feature Map을 뽑아내서,
RPN에서 여러 크기의 Receptive Field 고려할 수 있도록 섞어주는 역할을 하게 된다.


여기서 Neck을 사용하지 않고 바로 RPN과 Backbone의 각 Feature Map을 결하면 어떨까 라는 생각을 할 수 있다.

하지만 위의 생각처럼 바로 연결할 경우 low level Feature Map에는 sementic 정보가 부족하게 되고 High Level Feature Map에는 Localize 정보가 부족하기 때문에 정보 전달이 제대로 되지 않는다고 한다.


결론: Neck은 다양한 크기의 객체를 탐지하기 위해 등장하였다.


Faster R-CNN등장 이후에 나온 모델들은 FPN을 시작으로 거의 모두 중간에 Neck을 활용한 Layer를 추가로 활용해 Bounding Box를 예측하게 되었다.

여기서는 이 Neck의 구조를 변경해 가며 모델의 성능을 개선시킨 모델들을 알아보도록 하자.


2. Two-Stage Detection Model

1) FPN

동작과정 순으로 천천히 살펴보자


1. Bottom up : ResNet

먼저 이미지를 Input으로 받았을 때, BackBone Model을 통과 시켜 Feature Map을 뽑아내야 한다.

이때, Faster R-CNN과 다른점은 BackBone Model통과 시 각 Layer에서 나온 Feature Map을 모두 뽑아내야 한다는 점이다.

본 논문에서는 BackBone Model로 ResNet을 사용하였고, ResNet에서 Pooling을 통해 Feature Map이 줄어드는 구간을 기준으로 총 4개의 Feature Map을 뽑아주었다.


2. Top Down : Neck

Top Down에서는 Bottom Up과정에서 나온 Feature Map과 UpSampling과정중 나오는 Feature Map을 합쳐주는 과정을 거친다.

이때, 두 Feature Map은 위의 그림과 같이 Channel과 크기가 서로 다르기 때문에 이에 대한 조절이 필요하다.

본 논문에서는
Bottom Up Feature Map에 대해서는 1x1 Conv를 통해 Channel을 조절해 주고,
Top Down Feature Map에 대해서는 Nearest Neighbor UpSampling을 통해 Width와 Height를 조절해 주어 더해주도록 해 주었다.

이 과정을 Lateral Connections라고 한다.


3. RPN

Top Down과정에서 구한 모든 Feature Map에 대해 RPN을 적용하여 ROI 후보들을 모두 구한다.

참고로 RPN의 Output은 다음과 같았다. (단, k는 Anchor의 총 개수)

  • 2k 개의 Cls Layer : 배경여부 판별
  • 4k 개의 Reg Layer : Bound Box의 위치 미세조절

그리고 Faster R-CNN과 마찬가지로 이 ROI 후보들에 대해 NMS를 수행하여 정해진 개수의 ROI를 구한다.


4. ROI Projection

k=[k0+log(wh224)]k = [k_0 + log(\frac{\sqrt {wh}}{224})]

위의 RPN의 Output으로 Boundbox의 X, Y, 그리고 WidthHeight를 구할 수 있었다.

이때 WidthHeight를 위의 식에 대입하면, 해당 Boundbox가 몇번째 Feature Map에서 나온 것인지 알 수 있다.

따라서 먼저 위의 식을 통해 K를 구한 후 이를 활용해 해당 Feature Map에 ROI Projection을 수행하도록 한다.


5. ROI Pooling

Projection을 통해 구한 Feature Map의 ROI에 대해 ROI Pooling을 수행한다.
(ROI Pooling은 1-level, `77 Target bins`인 SPP와 동일하다.)*

그리고 이 ROI Pooling을 통해 구한 Output Feature로 Fully Connected Layer이후 Softmax ClassifierBounding Box Regression을 진행한다.

2) DetectoRS

Cascade R-CNN에서 영감을 받아 나온 모델구조로 Bound Box의 위치를 여러번 확인하여 예측하면 더 좋은 성능을 가져올 것이라는 생각에서 시작된 모델이다.

기본적인 모델의 구조는 FPN과 같지만, Neck부분이 Recursive하게 동작한다는 부분이 다르다.


1. Recursive Feature Pyramid(RFP)

먼저 기존의 FPN모델을 살펴보자.

xi=Bi(xi1)x_i = B_i(x_{i-1})

: ii번째 BackBone Feature Map은
i1i-1번째 Feature Map에 BackBone연산을 수행한 것과 같다.

fi=Fi(fi+1,xi)f_i=F_i(f_{i+1}, x_i)

: ii번째 FPN Feature Map은
ii번째 BackBone Feature Map과 i+1i+1번째 FPN Feature Map을 합친후에 FPN연산을 수행한 것과 같다.


이제 RFP 모델의 수식을 살펴보면 다음과 같이 xix_i에 대한 정의가 달라지는 것을 확인할 수 있다.

xi=Bi(xi1,Ri(fi))x_i = B_i(x_{i-1}, R_i(f_i))

: ii번째 BackBone Feature Map은
i1i-1번째 Feature Map과 fif_i에 Atrous Spatial Pyramid Pooling을 한것을 합친 후, 이것에 BackBone연산을 수행한 것과 같다.
(Atrous Spatial Pyramid Pooling은 뒤에서 설명)

fi=Fi(fi+1,xi)f_i=F_i(f_{i+1}, x_i)

: ii번째 FPN Feature Map은
ii번째 BackBone Feature Map과 i+1i+1번째 FPN Feature Map을 합친후에 FPN연산을 수행한 것과 같다.


2. Atrous Convolution

위와 같이 일반적인 Convolution에서 dilation rate를 추가로 설정해 주어 Receptive Field를 강제로 키우는 Convolution방법을 말한다.

(참고)


3. Atrous Spatial Pyramid Pooling (ASPP)

ASPP는 이전 FPN에서 받아온 Feature Map을 Atrous Convolution을 활용해 다양한 Receptive Field을 가지도록 Feature Map들을 계산하고, 이 Feature Map을 Concat하도록 하는 Layer를 의미한다.

이때 서로 다른 dilation rate와 kernel size를 사용하기 때문에 각각 다른 크기의 Feature Map을 생성하게 되는데, 보통 해당 Feature Map들에 Bi-Linear Interpolate를 통한 Upsampling을 적용해 크기를 맞춰 준 후에 Concatenate해주게 된다.


이후로는 FPN과 동일하게 작동한다.

3) BiFPN

BiFPN은 EfficientDet에서 제안된 모델 구조로 그림과 같이 PANet의 Neck부분에서 연산이 이루어지지 않는 Feature Map을 제거하고, 새롭게 연결해 준 구조를 의미한다.

(EfficientDet: One Stage Detection모델로 추후 설명)
(PANet: 그림과 같은 Neck구조를 갖는 Segmentation모델로 추후 설명)


1. Weighted Feature Fusion

일반 FPN에서는 Lateral Connection시 단순히 크기만 조절하여 더해주었다.

하지만 본 논문에서는 단순히 더하는 점 때문에 특정 Feature Map에 집중하지 못해 문제가 발생한다고 생각하여 위의 그림과 같이 Feature Map별로 가중치를 부여한 후에 더하도록 해 주었다.

4) NASFPN

NAS를 사용해 FPN의 Neck의 구조를 찾은 시도를 한 논문이다.

본 논문에서는 COCO Dataset과 ResNet을 BackBone Model로 하여 찾았다고 한다.

때문에 다른 Dataset을 사용하거나 BackBone Model을 바꾸자 할 경우 새롭게 구조를 찾아야 한다.

즉, 범용적이지 못하고, Search Cost가 매우 높다는 단점이 존재한다.

5) AugFPN

AugFPN은 FPN에서 다음과 같은 문제를 제기한 후에 이를 보완하는 방식으로 성능향상을 의도하였다.


1. FPN의 문제

  • 서로 다른 level의 feature간에는 semantic정보에 대한 차이가 여전히 존재하기 때문에 Multi Scale 특성이 미약하다.
  • Highest Feature Map에서는 따로 Lateral Connection이 없기 때문에 정보손실이 발생한다.
  • 하나의 Feature Map만을 고려하여 ROI를 생성한다.

2. Consistent Supervision


3. Residual Feature Augmentation


4. Soft ROI Selction

33

profile
github로 이전 중... (https://uijinee.github.io/)

0개의 댓글