Object detection 에서 사용되는 IoU (Intersection over Union) 구하는 함수, 좌표상에서 계산 과정 그림 설명

+ 이나스AI에는 인공지능 관련 다양한 강의가 있습니다.

- Object detection, Text To Speech, Reinforcement learning, OCR, Chatbot, Time series prediction,

- Meta learning, eXplainable AI, Transformer/BERT/GPT, Graph-based ML, etc

- 소스코드, 다이어그램 및 중간데이터에 기반하여 인공지능 알고리즘들의 작동원리와 구조를 이해하기 쉽고 정확하게 설명합니다.


+ 작업할 때 켜놓는 라이브 스트리밍 study with me 채널도 운영하고 있습니다.



Object detection 모델을 사용할 때는 정답 박스와 예측된 박스가 얼마나 일치하는지 평가하는 지표가 필요합니다.


이 때, IoU (Intersection over Union) 값이 사용될 수 있으며, 수식적으로 표현하면 아래와 같이 쓸 수 있습니다.

$$$IoU = \dfrac{\text{두 박스의 교집합 부분 넓이값}}{\text{두 박스의 합집합 부분 넓이값}}$$$


아래 함수는 두개의 박스를 입력으로 받아, 두 박스의 IoU 값을 계산 후 반환하는 함수입니다.

코드는 아래 Github 저장소에서 참고했습니다.

https://github.com/1297rohit/RCNN/blob/master/RCNN.ipynb


함수 아래에는 실제 좌표상에서 IoU 를 구하기 위해 사용된 연산들을 참고사항으로 설명한 그림을 첨부했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def get_iou(bb1, bb2): # 박스1, 박스2 를 입력으로 받음
    assert bb1['x1'< bb1['x2']
    assert bb1['y1'< bb1['y2']
    assert bb2['x1'< bb2['x2']
    assert bb2['y1'< bb2['y2']
    
    # intersection (교집합) 박스의 {(x1=x_left,y1=y_top), (x2=x_right,y2=y_bottom)} 좌표 구하기
    x_left = max(bb1['x1'], bb2['x1'])
    y_top = max(bb1['y1'], bb2['y1'])
    x_right = min(bb1['x2'], bb2['x2'])
    y_bottom = min(bb1['y2'], bb2['y2'])
 
    if x_right < x_left or y_bottom < y_top:
        return 0.0
    
    # 교집합 박스의 넓이
    intersection_area = (x_right - x_left) * (y_bottom - y_top)
 
    bb1_area = (bb1['x2'- bb1['x1']) * (bb1['y2'- bb1['y1'])
    bb2_area = (bb2['x2'- bb2['x1']) * (bb2['y2'- bb2['y1'])
 
    iou = intersection_area / float(bb1_area + bb2_area - intersection_area)
    
    assert iou >= 0.0 # iou 는 0보다 크거나 같아야함 (최악으로 못맞춘 경우)
    assert iou <= 1.0 # iou 는 1보다 작거나 같아야함 (최상으로 잘맞춘 경우)
    
    return iou # iou 값을 반환함
cs



그림1


그림2

그림3
그림4



+ 이나스AI에는 인공지능 관련 다양한 강의가 있습니다.

- Object detection, Text To Speech, Reinforcement learning, OCR, Chatbot, Time series prediction,

- Meta learning, eXplainable AI, Transformer/BERT/GPT, Graph-based ML, etc

- 소스코드, 다이어그램 및 중간데이터에 기반하여 인공지능 알고리즘들의 작동원리와 구조를 이해하기 쉽고 정확하게 설명합니다.


+ 작업할 때 켜놓는 라이브 스트리밍 study with me 채널도 운영하고 있습니다.

댓글

이 블로그의 인기 게시물

[논문 full 번역 + 이해를 위한 추가설명] CRNN, An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

[논문 full 번역 + 이해를 위한 추가설명] DQN, Playing Atari with Deep Reinforcement Learning

CUDA 와 CuDNN 의 설치, 삭제 및 버전 변경