IoU 코드 구하기

2136 단어
주로 RoI와 GT의 IoU를 구하고 예측 결과와 GT의 IoU를 구할 수 있다
def iou(boxes1, boxes2):
    """Computes IoU overlaps between two sets of boxes.
    boxes1, boxes2: [N, (y1, x1, y2, x2)].
    """
    # 1. Tile boxes2 and repeat boxes1. This allows us to compare
    # every boxes1 against every boxes2 without loops.
    # TF doesn't have an equivalent to np.repeat() so simulate it
    # using tf.tile() and tf.reshape().
    b1 = np.repeat(boxes1, np.shape(boxes2)[0], axis=0)
    b2 = np.tile(boxes2, [np.shape(boxes1)[0], 1])
    # 2. Compute intersections
    b1_y1, b1_x1, b1_y2, b1_x2 = np.split(b1, 4, axis=1)
    b2_y1, b2_x1, b2_y2, b2_x2 = np.split(b2, 4, axis=1)
    y1 = np.maximum(b1_y1, b2_y1)
    x1 = np.maximum(b1_x1, b2_x1)
    y2 = np.minimum(b1_y2, b2_y2)
    x2 = np.minimum(b1_x2, b2_x2)
    intersection = np.maximum(x2 - x1, 0) * np.maximum(y2 - y1, 0)
    # 3. Compute unions
    b1_area = (b1_y2 - b1_y1) * (b1_x2 - b1_x1)
    b2_area = (b2_y2 - b2_y1) * (b2_x2 - b2_x1)
    union = b1_area + b2_area - intersection
    # 4. Compute IoU and reshape to [boxes1, boxes2]
    iou = intersection / union
    overlaps = np.reshape(iou, [np.shape(boxes1)[0], np.shape(boxes2)[0]])
    return overlaps

 roi_iou_max = tf.reduce_max(overlaps, axis=1)

첫 번째 단계는 먼저 양자 형상을 통일시켜 하나하나 비교하기 편리하도록 한다.
boxes1 = [[0,0,3,3], [1,1,5,5], [9,9,11,11]]
boxes2 = [[0,0,2,2], [1,1,3,3], [4,4,6,6], [6,6,9,9], [11,11,13,13]]
   
[[ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 0  0  3  3]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 1  1  5  5]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]
 [ 9  9 11 11]] 
[[ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]
 [ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]
 [ 0  0  2  2]
 [ 1  1  3  3]
 [ 4  4  6  6]
 [ 6  6  9  9]
 [11 11 13 13]]

이후의 교집합, 병집합, IoU는 모두 15x1의 행렬이고 마지막으로reshape는 3x5의 즉 [np.shape(boxes1)[0],np.shape(boxes2)[0]]는 boxes1의 각 항목을 하나하나 boxes2의 각 항목과 IoU를 비교하는 것을 의미하며, boxes1에서 같은 box가 얻은 결과는 같은 줄에 있다.

좋은 웹페이지 즐겨찾기