(boxes, query_boxes, criterion=-1, device_id=0)
return iou.astype(boxes.dtype)
rotated box iou running in gpu. 500x faster than cpu version
    (take 5ms in one example with numba.cuda code).
    convert from [this project](
        https://github.com/hongzhenwang/RRPN-revise/tree/master/lib/rotation).
    
    Args:
        boxes (float tensor: [N, 5]): rbboxes. format: centers, dims, 
            angles(clockwise when positive)
        query_boxes (float tensor: [K, 5]): [description]
        device_id (int, optional): Defaults to 0. [description]
    
    Returns:
        [type]: [description]
rotated box iou running in gpu. 500x faster than cpu version
    (take 5ms in one example with numba.cuda code).
    convert from [this project](
        https://github.com/hongzhenwang/RRPN-revise/tree/master/lib/rotation).
    
    Args:
        boxes (float tensor: [N, 5]): rbboxes. format: centers, dims, 
            angles(clockwise when positive)
        query_boxes (float tensor: [K, 5]): [description]
        device_id (int, optional): Defaults to 0. [description]
    
    Returns:
        [type]: [description]
rotated box iou running in gpu . 500x faster than cpu version ( take 5ms in one example with numba . cuda code ) . convert from [ this project ] ( https : // github . com / hongzhenwang / RRPN - revise / tree / master / lib / rotation ) . Args : boxes ( float tensor : [ N 5 ] ) : rbboxes . format : centers dims angles ( clockwise when positive ) query_boxes ( float tensor : [ K 5 ] ) : [ description ] device_id ( int optional ) : Defaults to 0 . [ description ] Returns : [ type ] : [ description ]
def rotate_iou_gpu_eval(boxes, query_boxes, criterion=-1, device_id=0):
    """rotated box iou running in gpu. 500x faster than cpu version
    (take 5ms in one example with numba.cuda code).
    convert from [this project](
        https://github.com/hongzhenwang/RRPN-revise/tree/master/lib/rotation).
    
    Args:
        boxes (float tensor: [N, 5]): rbboxes. format: centers, dims, 
            angles(clockwise when positive)
        query_boxes (float tensor: [K, 5]): [description]
        device_id (int, optional): Defaults to 0. [description]
    
    Returns:
        [type]: [description]
    """
    box_dtype = boxes.dtype
    boxes = boxes.astype(np.float32)
    query_boxes = query_boxes.astype(np.float32)
    N = boxes.shape[0]
    K = query_boxes.shape[0]
    iou = np.zeros((N, K), dtype=np.float32)
    if N == 0 or K == 0:
        return iou
    threadsPerBlock = 8 * 8
    cuda.select_device(device_id)
    blockspergrid = (div_up(N, threadsPerBlock), div_up(K, threadsPerBlock))

    stream = cuda.stream()
    with stream.auto_synchronize():
        boxes_dev = cuda.to_device(boxes.reshape([-1]), stream)
        query_boxes_dev = cuda.to_device(query_boxes.reshape([-1]), stream)
        iou_dev = cuda.to_device(iou.reshape([-1]), stream)
        rotate_iou_kernel_eval[blockspergrid, threadsPerBlock, stream](
            N, K, boxes_dev, query_boxes_dev, iou_dev, criterion)
        iou_dev.copy_to_host(iou.reshape([-1]), stream=stream)
    return iou.astype(boxes.dtype)
def rotate_iou_gpu_eval ( boxes , query_boxes , criterion = - 1 , device_id = 0 ) : box_dtype = boxes . dtype boxes = boxes . astype ( np . float32 ) query_boxes = query_boxes . astype ( np . float32 ) N = boxes . shape [ 0 ] K = query_boxes . shape [ 0 ] iou = np . zeros ( ( N , K ) , dtype = np . float32 ) if N == 0 or K == 0 : return iou threadsPerBlock = 8 * 8 cuda . select_device ( device_id ) blockspergrid = ( div_up ( N , threadsPerBlock ) , div_up ( K , threadsPerBlock ) ) stream = cuda . stream ( ) with stream . auto_synchronize ( ) : boxes_dev = cuda . to_device ( boxes . reshape ( [ - 1 ] ) , stream ) query_boxes_dev = cuda . to_device ( query_boxes . reshape ( [ - 1 ] ) , stream ) iou_dev = cuda . to_device ( iou . reshape ( [ - 1 ] ) , stream ) rotate_iou_kernel_eval [ blockspergrid , threadsPerBlock , stream ] ( N , K , boxes_dev , query_boxes_dev , iou_dev , criterion ) iou_dev . copy_to_host ( iou . reshape ( [ - 1 ] ) , stream = stream ) return iou . astype ( boxes . dtype )