상세 컨텐츠

본문 제목

[3주차 / 진유석 / 논문리뷰] Fast R-CNN

방학 세션/CV

by 진유석 2023. 1. 31. 23:56

본문

https://blog.naver.com/andrew9909 에도 동일한 글을 작성하고 있습니다. latex 문법 오류로 인해 수식이 조금 깨지는 현상이 있습니다.

 

0. 들어가며

Fast R-CNN은 R-CNN의 후속 연구입니다. 기존 R-CNN의 한계점들은 다음과 같습니다.

1) 모델이 여러 개의 component, 즉 multi-stage pipeline으로 구성되어 end-to-end 구조가 아님. ConvNet 학습 이후 SVM 학습, 마지막으로 BBox regressor 학습

2) 이로 인해 학습 시간, 필요 메모리 면에서 많은 부담이 됨.

3) 약 2000개의 RoI(Region of Interest)마다 CNN 연산을 수행하기 때문에 시간이 굉장히 많이 걸림

 

Fast R-CNN은 이러한 문제를 개선하여 1장의 이미지만을 입력으로 받습니다. 또한 region proposal들의 크기를 warp & crop하지 않고 RoI pooling이라는 기법을 이용해 고정된 크기의 feature map을 FC layer에 전달합니다. 또한 multi-task loss를 사용해 모델을 한 번에 학습시킬 수 있습니다.

 

한계점으로는 여전히 selective search를 사용한다는 것이며, selective search는 여전히 R-CNN과 같이 CPU에서 진행되기 때문에 bottleneck이 발생합니다. 이는 Fast R-CNN의 후속 연구인 Faster R-CNN에 의해 해결됩니다.

 

1. 모델 구조 ① RoI Pooling Layer

RoI Pooling Layer는 feature map에서 관심 영역(Region of Interest)를 적절한 크기로 나누어 고정된 크기의 feature map을 얻는 과정입니다.

 

RoI Pooling Layer는 기본적으로 maxpooling을 사용하며, 고정된 크기의 vector로 변환한다는 점이 특징입니다. 위키피디아에 RoI Pooling 과정을 잘 표현한 gif 파일이 있어 가져왔습니다.

input으로부터 객체가 있을 만한 곳을 나타내는 RoI가 생성됩니다. 이를 미리 정해 둔 크기로 적절히 나눈 뒤, 각 격자 안에서 maxpooling을 수행해 고정된 크기의 feature map을 얻습니다. 그 과정을 조금 더 자세히 설명하면 다음과 같습니다.

 

1) 먼저 원본 이미지를 CNN 모델에 통과시켜 feature map을 얻습니다.

예를 들면 800 x 800 크기의 이미지를 VGG에 통과시켜 8 x 8의 feature map을 얻습니다. 가로, 세로가 100분의 1로 줄었으니, sub-sampling ratio는 1/100이라고 할 수 있습니다.

 

2) 원본 이미지에 대해 selective search 알고리즘을 적용하여 region proposal들을 얻습니다.

 

3) RoI Projection을 통해 subsampling된 feature map에서 각 region proposal에 해당하는 영역을 추출합니다. region proposal은 800 x 800 이미지에 대해 수행되었기 때문에 subsampling된 feature map보다 크기가 훨씬 클 것입니다. 이 큰 region proposal을 작은 feature map에 투영시키는 것을 RoI Projection이라고 합니다.

 

4) 투영된 RoI를 위 gif 파일과 같이 적절히 나눈 후 maxpooling을 통해 고정된 크기의 feature map을 얻습니다.

 

1. 모델 구조 ② pre-trained model 사용

기존의 pre-trained 모델을 적절히 변형하여 사용했습니다. 예를 들면 기존 모델의 마지막 maxpooling layer를 RoI pooling layer로 바꾸고, 1000개 중에서 답을 내야 하는 이미지넷 classification에서는 softmax를 통해 1000개 중에 하나를 내겠지만, K개의 카테고리 + 배경까지 해서 K+1 개의 답 중 하나를 내도록 하는 식입니다. 또한, 그냥 이미지만 input으로 들어가는 것이 아니라 이미지와 해당 이미지의 RoI까지 input으로 들어가도록 했습니다.

 

1. 모델 구조 ③ Multi-task Loss

기존 R-CNN에서는 Classifier, BBox Regressior, Convnet을 각각 따로 학습시켜 매우 부담이 컸습니다. Fast R-CNN에서는 Loss 안에 Classifier와 BBox Regressior의 term을 모두 집어넣어 둘을 동시에 학습시킵니다.

 

$L(p,u,tu,v)=Lcls(p,u)+λ[u\ge 1]Lloc(tu,v)$L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)

 

$p=(p_0,.....,pk):(K+1)개의classscore$p=(p0,.....,pk):(K+1)classscore
$u:ground\ truth\ class\ score$u:ground truth class score

- u는 positive sample인 경우 1, negative sample인 경우 0으로 설정되는 index parameter입니다.

$t_u=(t_u^x,t_u^y,t_u^w,t_u^h):예측한\ bounding\ box좌표를\ 조정하는\ 값$tu=(txu,tyu,twu,thu): bounding box  
$v=(v_x,v_y,v_w,v_h):실제\ bounding\ box의\ 좌표값$v=(vx,vy,vw,vh): bounding box 
$L_{cls}(p,u)=−\log p_u:classification\ loss\ (Log\ loss)$Lcls(p,u)=logpu:classification loss (Log loss)
$L_{loc}(t_u,v)=\sum _{i∈x,y,w,h}^{ }smooth_{L1}(t_i^u−v_i):\ regression\ loss(SmoothL1\ loss)$Lloc(tu,v)=ix,y,w,hsmoothL1(tuivi): regression loss(SmoothL1 loss)
$smooth_{L1}(t_i^u-v_i)=\begin{cases}0.5x^2,\ if\ \left|\combi{x}\right|\ <\ 1\\\left|\combi{x}\right|\ -\ 0.5,\ otherwise\end{cases}$smoothL1(tuivi)={
0.5x2, if |x| < 1
|x|  0.5, otherwise
$lambda\ =\ 두\ loss\ 사이의\ 가중치를\ 조절하는\ balancing\ parameter$lambda =  loss    balancing parameter

1. 모델 구조 ④ Hierarchical Sampling

SGD 미니배치 구성 시 N개의 이미지를 sampling하고, 총 R개의 region proposal을 사용한다고 할 때, 각 이미지로부터 R/N개의 region proposal들을 sampling하는 방법입니다. 이를 통해 같은 이미지에서 추출된 region proposal들은 forward, backward propagration 시 연산과 메모리를 공유합니다.

 

1. 모델 구조 ⑤ Truncated SVD

 

Truncated SVD(Singular Vector Decomposition)을 통해 fc layer를 압축해 detection 시 시간을 단축시켰습니다.

Full SVD

행렬 A를 U, 시그마, V^T로 분해하는 것을 SVD라고 하는데, 이 때 U와 V는 정사각행렬이어야 합니다.

Truncated SVD

Truncated SVD는 시그마의 비대각 부분과 대각 원소 중 특잇값이 0인 부분을 모두 제거해 시그마 행렬을 작게 만듭니다. 없어진 원소들에 대응하는 U와 V^T 역시 줄여 연산량을 감소시켰는데, 이렇게 해서 행렬 A와 상당히 근사한 행렬 A'를 얻는 것이 가능합니다.

 

2. Training

 앞서 말씀드렸듯 pre-trained VGG16 모델을 사용하며, 자세한 설명은 1. 모델구조 ②에 작성했습니다. 추가적으로 실제 detection 시 bounding box에 대하여 NMS(Non Maximum suppression)이 적용되어 최적의 bounding box만을 출력하게 됩니다.

 

 

3. 실험 결과

논문에서 제시된 다양한 표들 중 일부만 가져왔는데요, 다양한 데이터셋에 대해서 모두 좋은 성능을 내는 모습을 확인할 수 있습니다. 또한 학습 시간 역시 매우 빨라졌습니다.

참고자료

https://herbwood.tistory.com/8

https://ganghee-lee.tistory.com/36?category=863370

https://www.youtube.com/watch?v=Jo32zrxr6l8

 

관련글 더보기

댓글 영역