YOLOv2

iissaacc·2022년 1월 12일

paper reading

목록 보기
13/20

Prologue

대표적인 1 stage detector의 SOTA detector다. 2 stage detector는 2개의 subnetwork가 bbox를 찾고 그 안에 있는 object를 분류했지만 YOLO계열 detector는 bbox와 object classfication을 한 방에 예측한다.

1 stage detector

그래서 이런 detector를 1 stage detector라고 부른다. backbone이 만드는 feature map안에 detection에 필요한 정보가 다 들어있기 때문인데 feature map의 channel방향에 들어있는 정보들은 anchor box coordinate(N×tx,y,w,h{N\times t_{x,y,w,h}}), objectness score(to{t_o}), class score(Cn{C_n})가 들어있다. 그래서 feature map의 channel은 N×tx,y,w,h,o+CnN\times t_{x,y,w,h,o}+{C_n}이렇게 결정된다.

Backbone

VGGNet처럼 Conv layer로 feature를 추출하고 pooling layer로 spatial dimension을 줄인다. 이전 연구와는 다르게 fc layer를 버리고 Batch Norm과 anchor를 도입했다.

작은 object에 대한 성능을 높이기 위해 출력 stage와 그 직전의 stage를 dimension과 channel을 맞춰서 concatenate한다.

How is anchor defined?

RPN에서는 aspect ratio rr개, scale ss개를 정해서 anchor마다 r×sr\times s개의 anchor box를 찾게 했다면 여기에서는 전체 data에서 자주 나타나는 height, width쌍 NN개를 찾는다. 이렇게 찾은 anchor NN개를 가지고 k-means알고리즘을 활용해서 gird cell마다 몇 개의 anchor뿌릴지 정했다.

일반적으로 k-means는 data point의 거리를 최소로하는 집합 kk개를 구하는 알고리즘이다. 이 연구에서는 data point의 거리 대신 IoU를 활용했다.

d(box,centeroid)=1−IoU(box,centeroid)d(\text{box}, \text{centeroid})=1-\text{IoU}(\text{box},\text{centeroid})

그래프에서 kk가 55를 넘어가는 시점부터 기울기가 완만해진다. 동시에 anchor box가 55일때 recall도 높게 할 수 있었다.

Offset

기본적으로 RPN과 YOLOv2가 x,yx,y를 찾는 방법은 크게 다르지 않다.

RPN

G^x=Pwdx(P)+PxG^y=Phdy(P)+Py\hat{G}_x=P_wd_x(P)+P_x\\ \hat{G}_y=P_hd_y(P)+P_y

RPN에서는 anchor box의 Pw, PhP_w,\ P_h의 비율로 G^x, G^y\hat{G}_x,\ \hat{G}_y를 ground truth에 최대한 가깝게 한다. 일반적인 경우 변동폭이 크지 않지만 극단적인 경우에는 subsample을 벗어날 수 있다고 우려했다.

YOLOv2

연구에서는 이 점을 지적해서 x,yx, y가 확실하게 grid cell에 들어있게 하기 위해 offset function을 이렇게 바꿨다.

bx=σ(tx)+cxby=σ(ty)+cyb_x=\sigma(t_x)+c_x\\ b_y=\sigma(t_y)+c_y

ground truth가 속한 grid cell의 upper left corner, bx, byb_x,\ b_y가 속한 grid cell의 upper left corner를 구하면 cx, cyc_x,\ c_y를 알 수 있다. σ(⋅)\sigma(\cdot)은 (0,1)(0,1)이므로 bx, byb_x,\ b_y는 노란 grid cell에만 넣어둘 수 있다는 점에서 RPN보다 안정적으로 bbox의 위치를 예측할 수 있다고 주장하고 있다.

Loss function

후속연구에서 패러다임이 바뀌지 않았으므로 YOLOv1과 같은 loss function을 쓴다.

Epilogue

  • RPN에서는 입력 이미지 위에 anchor를 뿌리게 되어있는데 YOLOv2에서는 feature map위에 anchor를 뿌리게 되어있다. 그러면 입력 이미지와 feature map의 비율을 계속 추적해야하지 않나 싶다.

  • 2 stage detector는 bbox와 classification을 따로 하기때문에 전체적인 context를 읽는 능력이 떨어지지만 YOLO같은 1 stage detector는 전체 이미지를 보기때문에 비교적으로 context를 읽는 성능이 좋다고 주장하고 있다.

  • YOLOv3에서는 그냥 backbone을 바꾸면서 약간 튜닝하는 것만으로 SOTA detector를 만들어냈다.

Reference

  1. YOLO9000: Better, Faster, Stronger
  2. You Only Look Once: Unified, Real-Time Object Detection
  3. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

0개의 댓글