Prerequisites
-우리의 output: B x 10647 x 85의 tensor
- B: batch 개수
- 10647: image당 예측한 BB 개수
- 85: BB attribute 개수
-true detection을 얻기 위해서는 output이 object score thresholding, non-maximal suppression을 거치도록 해야 함
- 이걸 위해 util.py에 write_results function 작성
Object Confidence Thresholding
-우리의 예측 tensor는 B x 10647 개의 BB에 대한 정보를 가진다.
-threshold아래의 objectness score를 가진 BB는 값을 0으로 만든다.
Note
-IoU(Intersection over union): 객체 인식의 성능 평가를 하는 지표
- 어떤 영역들 사이에 intersection?: ground-truth와 proposed-region(prediction)
- ground truth: 우리가 정한 정답(미묘하게 다르긴 하지만, label같은 개념)
-NMS(non-maximum supression): 한 가지 object에 많은 BB가 생기는데, 가장 score가 높은 박스만 남기고 나머지를 제거하는 승자독식 과정
- IoU값이 가장 큰 것을 남기는 과정인듯
Object Confidence Thresholding
-bounding box attributes: 중심좌표, height, width
- 그런데, IoU를 계산하기 위해서는 BB의 꼭짓점 좌표를 이용하는 것이 편리함
- (center x, center y, height, width)를 (top-left corner x, top-left corner y, right-bottom corner x, right-bottom corner y)로 transform
-각 image마다 true detection의 개수는 다를 수 있음
- 따라서 confidence thresholding, NMS는 별개 image마다 각각 수행해줘야 함(vectorize불가)
prediction
의 첫번째 요소만큼 iterate해줘야 함
-BB attributes중 class score가 max인 것 1개만 남기면 됨.
- BB 85개의 row 중 class score에 해당하는 80row의 class score를 지우고, max값으로 바꿔준다.
-NMS
- 먼저 특정 class의 detection을 추출
- NMS perform: bbox_iou function 사용
- bbox_iou
Calculating the IoU
Writing the predictions