Beispiel #1
0
def rect_grid_pyr(response_size,
                  rf,
                  search_size,
                  rect_size,
                  scales,
                  name='rect_grid_pyr'):
    '''Obtains the rectangles for a translation and scale scoremap.

    Args:
        response_size -- Dimension of scoremap. (height, width)
        rf -- Receptive field of scoremap.
        search_size -- Dimension of search image in pixels. (height, width)
        rect_size -- Size of rectangle in normalized co-ords in search image. [b, 2]
    '''
    with tf.name_scope(name) as scope:
        # Assert that receptive fields are centered.
        receptive_field.assert_center_alignment(search_size, response_size, rf)
        # Obtain displacement from center of search image.
        # Not necessary to use receptive field offset because it is centered.
        disp = displacement_from_center(response_size)
        disp = tf.to_float(disp) * rf.stride / search_size
        disp = tf.multiply(
            tf.expand_dims(disp, -4),  # [b, h, w, 2] -> [b, 1, h, w, 2]
            expand_dims_n(scales, -1, 3))  # [s] -> [s, 1, 1, 1]
        # Get centers of receptive field of each pixel.
        centers = 0.5 + disp
        rect_size = tf.multiply(
            tf.expand_dims(rect_size, -2),  # [b, 2] -> [b, 1, 2]
            tf.expand_dims(scales, -1))  # [s] -> [s, 1]
        rect_size = expand_dims_n(rect_size, -2,
                                  2)  # [b, s, 2] -> [b, s, 1, 1, 2]
        return geom.make_rect_center_size(centers, rect_size)
Beispiel #2
0
def _clip_rect_size(rect, min_size=None, max_size=None, name='clip_rect_size'):
    with tf.name_scope(name) as scope:
        center, size = geom.rect_center_size(rect)
        if max_size is not None:
            size = tf.minimum(size, max_size)
        if min_size is not None:
            size = tf.maximum(size, min_size)
        return geom.make_rect_center_size(center, size)
Beispiel #3
0
def _rect_translate_scale(rect, translate, scale, name='rect_translate_scale'):
    '''
    Args:
        rect: [..., 4]
        translate: [..., 2]
        scale: [..., 1]
    '''
    with tf.name_scope(name) as scope:
        center, size = geom.rect_center_size(rect)
        return geom.make_rect_center_size(center + translate, size * scale)
Beispiel #4
0
def modify_aspect_ratio(rect, method='stretch', axis=-1, eps=1e-3, name='modify_aspect_ratio'):
    if method == 'stretch':
        return rect  # No change.
    with tf.name_scope(name) as scope:
        center, size = geom.rect_center_size(rect)
        with tf.control_dependencies([tf.assert_non_negative(size)]):
            size = tf.identity(size)
        size = tf.maximum(size, eps)
        width = scalar_size(size, method, axis=axis, keepdims=True)
        return geom.make_rect_center_size(center, width)