AI/알면 좋은 내용들

Bounding Box를 위한 Ap, mAP

openingsound 2021. 5. 11. 00:55

평가 방식을 읽고 생각을 하다가 1번이 GT bbox 이고 2 와 3이 pre bbox라면 NMS에서 두개의 bbox가 지워지지 않아 AP계산시 어떻게 되는지 궁금해져 자료들을 찾게 되었고 찾은 내용들을 정리하게 되었습니다.

당연히 아래에 있는 IoU에 의한 TP, FP, FN들을 이해 한다면 위 와 같은 상황은 고려하지 않아도 됩니다.

개별 이미지에 대한 IoU계산과 TP, FP, FN

우선 GT bbox와 pred bbox의 IoU를 측정 하여 IoU >= threshold 가 되면 TP이고 IoU < threshold 가 되면 FP 로 분류하게 됩니다. 본 대회의 평가 방식은 mAP50 임으로 threshold 는 0.5가 됩니다. 당연히 이미지에 GT가 있지만 감지를 하지 못할 경우 FN으로 분류 됩니다.

이미지에는 gt boxes들과 우리가 예측한 pred boxes 들이 있습니다. gt boxes와 pred boexes에서 한개씩 bbox를 뽑아 둘을 비교 하는데 어떤 bbox들이 서로의 쌍인지 알 수 있을까요? 당연히 모델은 이를 알 수 없기에

for ipb, pred_box in enumerate(pred_boxes): for igb, gt_box in enumerate(gt_boxes):

위 코드와 같이 모든 bbox쌍들을 돌며 IoU를 계산 해주고 threshold 인 0.5를 넘는다면 ipb, igb,(인덱스 들) IoU를 저장해 줍니다. 즉 이 단계에선 하나의 ipb가 여러개의 igb와 연결이 되어 있을 수도 있고 반대의 경우도 가능합니다.

이제 confidence가 높은 순으로 정렬을 하는데 당연히 그 기준은 IoU가 됩니다. (submission의 score가 아님)

정렬을 하여 IoU가 높은 순대로 bbox 쌍을 확인합니다. 그리고 해당 gt bbox와 pr bbox가 둘다 아직 한번도 사용되지 않았다면 해당 쌍은 TP가 되고 gt와 pr bbox들은 사용되었다고 체크를 합니다. 이런식으로 저장된 모든 bbox쌍을 확인하며 TP의 총 갯수를 확인 합니다.

이후 len(pred_boxes) - TP = FP , len(gt boxes) - Tp = FN이 됩니다. 잠시 위의 이미지를 생각해보면 2번과 1번 bbox의 IoU가 3번과 1번의 IoU보다 크기 때문에 2는 TP가 되고 3은 FP가 됩니다. (NMS 과정이 매우 중요하다는 것을 알 수 있습니다.)

Precision Recall 곡선

PR 곡선은 confidence 레벨에 대한 threshold 값의 변화에 의한 물체 검출기의 성능을 평가하는 방법입니다.(위의 threshold 랑은 다르다!) confidence는 제출을 할 때 해당 bbox에 대하여 정확도에 대해 얼마나 확신이 있는지 알려주는 값인 score가 기준이고 해당 값을 기준으로 정렬을 합니다.


이후 위에서 부터 누적 TP와 FP를 고려하여 Precision과 Recall을 고려해 줍니다. 위에서 구해진 FN이 없어서 의하 할 수도 있지만 마지막 행까지 내려가도 TP에 등장하지 않아 점수를 계속 감소 시키는 것으로 역할을 하고 있습니다.

위에서 구한 Precision과 Recall로 그래프를 그려보면 (다른 이미지를 가져와서 위 표와 그래프의 값이 일치 하지는 않습니다.) Recall은 threshold가 내려갈 수록 값이 단조적으로 증가하지만 precision은 그렇지 않고 하나의 Recall에서도 여러 precision값을 가지기도 하는데 이럴 경우 그래프에서 값은 수직으로 떨어지게 그려집니다.

AP

파랑색 선은 PR곡선을 나타냅니다. 이 PR곡선을 하나의 값으로 바꿔 성능을 평가 하고 싶은데 PR그래프는 단조롭게 감소하지 않으므로 Recall값에 대해 최대 Precision값을 설정합니다.각 Recall 에서 각 정밀도 값을 해당 Recall 오른쪽에 있는 최대 Precision값으로 바꿔 버립니다. (빨간선)

이런 작업을 하는(해도 되는) 이유는 PR곡선이 단조롭게 감소하지 않는 이유는 특정 예외, 데이터 부족인데 precision과 Recall 이 둘다 좋아진다면 높은 precision이 될거라고 생각하기 때문에 해줘도 된다고 합니다.

mAP

mAP는 항상 전체 데이터셋에 대하여 계산 된다!

11 point interpolation technique을 사용합니다. (일반적으로 사용하는 것 같은데 다른글에선 정말 넓이로 구하는 곳도 있었음) recall을 0.1 단위로 0.0 , 0.1 ... 0.9 , 1.0 을로 쪼개서 11개의 Recall 값들에 대해 최대 값을 더하여 11로 나눠 줍니다.

Recall과 Precision이 왼쪽과 같다면 interpolated Precision은 우측과 같이 됩니다. Recall 이 0.4 일 때 Precision 값이 0.40, 0.67로 2개가 있었는데 더큰 값인 0.67로 된 것을 볼 수 있습니다.

AP = 1 / 11 (4 * 1.0 + 2 * 0.67+ 4 * 0.57 + 1 * 0.5) = 0.74

이렇게 모든 이미지에 대한 각 Class별 AP를 구하고 평균을 취해주면 mAP를 구할 수 있게 됩니다.

혹시 잘못된 정보가 있으면 바로 댓글 달아주세요!!

Reference