Boostcamp AI Tech

[Boostcamp Day-38] Faster R-CNN

ju_young 2021. 9. 30. 19:11
728x90

Faster R-CNN 마인드 맵

https://www.edrawmind.com/online/map.html?sharecode=615405c4d78a53a43983982 

 

EdrawMind: Online Mind Mapping & Brainstorming Software

 

www.edrawmind.com

 

generate_anchor_base

1. 9개의 anchor box 생성

2. 각 anchor box는 y_min, x_min, y_max, y_max 순서로 좌표값을 가짐

Output : 9x4 size array

 

ProposalCreator

1. anchor : shift된 anchor box들(36864, 4), loc : rpn에서 추출된 feature map(1x1 conv -> nx64*64*9x4) 를 받음

2. loc2bbox(anchor, loc)를 통해 loc(dy,dx,dh,dw)만큼 조정된 bounding box의 좌표값(RoI)을 얻음

3. 이미지 경계 안에 있는 RoI만 추출

4. 지정된 min_size보다 작은 RoI는 제거

5. score(foreground의 score)도 min_size보다 작은 RoI의 index를 제거

6. NMS 전 지정한 개수만큼 Slicing

7. NMS 적용(0.7)

8. NMS 적용 후 지정한 개수만큼 Slicing

Output : NMS를 적용한 RoI 좌표값

 

RegionProposalNetwork(RPN)

1. x(feature map) : 512x64x64, img_size : 원본 이미지 사이즈를 인자로 얻음

2. 9개의 anchor box를 받아 feat_stride(16)만큼 shift한 anchor box들(36864개)의 좌표를 반환

3. 512x64x64 feature map에 3x3 Conv(padding=3)를 적용하여 같은 크기의 512x64x64 feature map을 추출 -> ReLU적용

4. rpn_locs : 512x64x64 feature map에 1x1 Conv 적용 -> nx9*4x64x64 feature map 추출 -> nx64*64*9x4 으로 reshape

5. rpn_scores : 512x64x64 feature map에 1x1 Conv 적용 -> 9*2x64x64 feature map 추출 -> nx64x64x9*2 으로 reshape

6. rpn_fg_scores : rpn_scores를 nx64x64x9x2으로 reshape -> 각 anchor box 단위로 softmax 적용 -> 두 번째 열인 foreground만 선정 -> flatten 수행

7. rpn_scores : nx64*64*9x2으로 reshape

8. ProposalCreator에 rpn_locs, rpn_fg_scores, anchor, img_size, scale을 집어넣어 NMS를 적용한 foreground RoI 좌표값을 얻음 -> 해당 batch index도 같이 생성

Output : rpn_locs, rpn_scores, rois, roi_indices, anchor -> nx64*64*9x4(feature map), nx64*64*9x2(feature map), 2000x4(foreground의 roi), 2000(foreground의 roi의 index), shift한 anchor box

 

RoIHead

1. indices_and_rois : RPN에서 얻은 roi_indices, rois를 concat

2. xy_indices_and_rois : indices_and_rois 의 좌표값을 x, y, x, y 순서로 reshape -> RoIPool에서 x, y, x, y 순서로 값을 받기 때문

3. x( 128x512x7x7 feature map)과 xy_indices_and_rois를 받아 RoI Pooling(spatial_scale 지정) 수행 ->128x512x7x7 feature map 반환 -> flatten 수행(25088)

4. fc layer 적용(4096)

5. roi_cls_locs: linear 적용하여 n_class * 4 feature vector 반환, roi_scores : linear 적용하여 n_class feature vector 반환

Output : roi_cls_locs, roi_scores

 

AnchorTargetCreator

1.RPN에서 shift된 anchor box를 받음 -> 이미지 경계 안에 있는 anchor box의 index 선정

2. anchor box와 ground truth bbox의 iou를 계산 -> iou가 0.3 미만은 negative, 가장 크거나 0.7이상이면 positive로 labeling -> groung truth와 가장 근접한 anchor box와 그렇지 않는 것들의 index(argmax_ious)를 반환

Output : argmax_ious, label -> 18376, 18376

 

ProposalTargetCreator

1. ProposalCreator에서 얻은 RoI와 ground truth bbox, label을 사용

2. RoI와 ground truth bbox를 concat

3. RoI와 ground truth bbox의 IoU를 계산

4. 가장 큰 IoU를 가지는 index와 label을 선정(gt_assignment, gt_roi_label)

5.RoI가 0.5이상이면 positive sample, 0~0.5이면 negative sample로 지정 -> 지정한 개수를 초과하면 random sampling을 수행

Output : sample_roi, gt_roi_loc, gt_roi_label -> positive/negative roi, ground truth loc(regression 해야할 ground truth loc값(dy, dx, dh, dw)), label

728x90

'Boostcamp AI Tech' 카테고리의 다른 글

[Boostcamp Day-40] Neck  (0) 2021.10.01
[Boostcamp Day-39] Object Detection Library  (0) 2021.09.30
[Boostcamp Day-37] Overview  (0) 2021.09.30
[Boostcamp Day-37] Object Detection Pstages  (0) 2021.09.30
[Boostcamp 8주차] 피어세션  (0) 2021.09.24