사진, 설명 출처



faster rcnn = RPN(region proposal network) + fast rcnn
RPN(region proposal network)
예시상황 가정:
- backbone 통과 후 (8, 8, 512)
anchor box 9개
input :
- backbone 통과후 feature map
-> (8, 8, 512)
output :
- class score(있는지 없는지), box regression(x, y, w, h)
-> (8, 8, 2, 9), (8, 8, 4, 9)
역할 :
- anchor box의 score, bbox 1차적으로 예측
Region propasals
input :
- anchor box (8, 8, 9), score (8, 8, 2, 9), bbox reg (8, 8, 4, 9)
output :
역할 :
과정 :
- NMS 이용해서(inference시에 nms와 다르게 class별 nms가 진행되지 않는다.) 걸러내고, score 상위 k 개 뽑는다.
ROI pooling
input :
- region propasals의 결과물. regions (8, 8, k)
output :
- 같은 크기의 feature map (7,7,512)
역할 :
- 모두 다른 크기를 가지는 region을 같은 크기로 통일
과정 :
- 목표 이미지 크기대로 그룹이 나눠지도록 한다음 max pooling
Fast R-CNN
input :
- ROI pooled anchor, (7, 7, 512)
output :
- loss
- class score (k+1) 배경까지 포함해서 +1
- box reg (k+1)*4 각 클래스별로 bbox reg
RPN을 이용해서 모든 anchor box에 대한 score, box reg 만들고
이를 기반으로 region proposal 에서 region 선택하고
선택된 region의 class score, bbox reg 만든다. => 최종 예측
train
- RPN에서 class score, bbox reg 예측
- fast R-CNN에서 class score, bbox reg 예측
두 개 모두 학습시 label이 필요할 것이다.
RPN train
RPN에서는 Anchor target layer
모든 anchor box의 GT와의 IOU를 봐서 positive / negative 인지 계산해둔다.
여기서 IOU의 기준은 0.7 이상 positive, 0.3 이하 negative 그외는 무시(애매하게 디텍션된거는 pos, neg에 포함하면 안된다.)
Fast R-CNN train
- Fast R-CNN 에서는
Proposal Target layer
proposal된 region과 GT간의 IOU를 계산 positive / negative 인지 계산해둔다.
여기서 IOU의 기준은 0.5 이상 positive, 0.1 ~ 0.5 negative
앞에서 한번 걸러서 제안된 영역이기 때문에 IOU가 애매하다고 없애진 않는 것 같다.
inference

미리 GT와 IOU 계산해서 label을 만들어놓을 필요가 없다.
클래스별로 모든 앵커박스를 예측하기 때문에 최종 예측할 때는 NMS를 이용해서 줄인다.