+++ /dev/null
-# -*- coding: utf-8 -*-
-from __future__ import absolute_import, print_function, division
-
-import tensorflow as tf
-from libs.configs import cfgs
-
-
-def make_anchors(base_anchor_size, anchor_scales, anchor_ratios,
- featuremap_height, featuremap_width,
- stride, name='make_anchors'):
- '''
- :param base_anchor_size:256
- :param anchor_scales:
- :param anchor_ratios:
- :param featuremap_height:
- :param featuremap_width:
- :param stride:
- :return:
- '''
- with tf.variable_scope(name):
- base_anchor = tf.constant([0, 0, base_anchor_size, base_anchor_size], tf.float32) # [x_center, y_center, w, h]
-
- ws, hs = enum_ratios(enum_scales(base_anchor, anchor_scales),
- anchor_ratios) # per locations ws and hs
-
- # featuremap_height = tf.Print(featuremap_height,
- # [featuremap_height, featuremap_width], summarize=10,
- # message=name+"_SHAPE***")
-
- x_centers = tf.range(featuremap_width, dtype=tf.float32) * stride
- y_centers = tf.range(featuremap_height, dtype=tf.float32) * stride
-
- if cfgs.USE_CENTER_OFFSET:
- x_centers = x_centers + stride/2.
- y_centers = y_centers + stride/2.
-
- x_centers, y_centers = tf.meshgrid(x_centers, y_centers)
-
- ws, x_centers = tf.meshgrid(ws, x_centers)
- hs, y_centers = tf.meshgrid(hs, y_centers)
-
- anchor_centers = tf.stack([x_centers, y_centers], 2)
- anchor_centers = tf.reshape(anchor_centers, [-1, 2])
-
- box_sizes = tf.stack([ws, hs], axis=2)
- box_sizes = tf.reshape(box_sizes, [-1, 2])
- # anchors = tf.concat([anchor_centers, box_sizes], axis=1)
- anchors = tf.concat([anchor_centers - 0.5*box_sizes,
- anchor_centers + 0.5*box_sizes], axis=1)
- return anchors
-
-
-def enum_scales(base_anchor, anchor_scales):
-
- anchor_scales = base_anchor * tf.constant(anchor_scales, dtype=tf.float32, shape=(len(anchor_scales), 1))
-
- return anchor_scales
-
-
-def enum_ratios(anchors, anchor_ratios):
- '''
- ratio = h /w
- :param anchors:
- :param anchor_ratios:
- :return:
- '''
- ws = anchors[:, 2] # for base anchor: w == h
- hs = anchors[:, 3]
- sqrt_ratios = tf.sqrt(tf.constant(anchor_ratios))
-
- ws = tf.reshape(ws / sqrt_ratios[:, tf.newaxis], [-1, 1])
- hs = tf.reshape(hs * sqrt_ratios[:, tf.newaxis], [-1, 1])
-
- return hs, ws
-
-
-if __name__ == '__main__':
- import os
- os.environ["CUDA_VISIBLE_DEVICES"] = '0'
- base_anchor_size = 256
- anchor_scales = [1.0]
- anchor_ratios = [0.5, 2.0, 1.0]
- anchors = make_anchors(base_anchor_size=base_anchor_size, anchor_ratios=anchor_ratios,
- anchor_scales=anchor_scales,
- featuremap_width=32,
- featuremap_height=63,
- stride=16)
- init = tf.global_variables_initializer()
- with tf.Session() as sess:
- sess.run(init)
- anchor_result = sess.run(anchors)
- print (anchor_result.shape)