Faster R-CNN 마인드 맵
https://www.edrawmind.com/online/map.html?sharecode=615405c4d78a53a43983982
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
'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 |