def _setup_net(self):
with tf.variable_scope('bbox'):
inputs_0 = tf.Variable(trainable=False, validate_shape=(None, self.config.size[0], self.config.size[1], 3))
self.bbox_infer_model._setup_input(inputs_0)
assign_op = tf.assign(inputs_0, self.data_batches)
with tf.control_dependencies([assign_op]):
self.bbox_infer_model._setup_net()
def crop_bbox(width, height, input, bbox):
expand_rate = 0.1
top = tf.maximum(tf.floor(bbox[1] * height - height * expand_rate), 0)
bottom = tf.minimum(tf.floor((bbox[1] + bbox[3]) * height + height * expand_rate), height)
left = tf.maximum(tf.floor(bbox[0] * width - width * expand_rate), 0)
right = tf.minimum((tf.floor(bbox[0] + bbox[2]) * width + width * expand_rate), width)
top = tf.cond(top >= bottom, lambda: tf.identity(0), lambda: tf.identity(top))
bottom = tf.cond(top >= bottom, lambda: tf.identity(height), lambda: tf.identity(bottom))
left = tf.cond(left >= right, lambda: tf.identity(0), lambda: tf.identity(left))
right = tf.cond(left >= right, lambda: tf.identity(width), lambda: tf.identity(right))
return input[top:bottom, left:right, :]
with tf.variable_scope('nsr'):
origin_width, origin_height = 512, 512
inputs_1 = tf.Variable(trainable=False, validate_shape=(None, self.config.size[0], self.config.size[1], 3))
self.infer_model._setup_input(inputs_1)
inputs = self.bbox_infer_model.inputs
bboxes = self.bbox_infer_model.model_output
inputs = tf.stack([crop_bbox(origin_width, origin_height, inputs[i], bboxes[i]) for i in range(self.config.batch_size)])
inputs = tf.image.resize_images(inputs, self.config.size)
assign_op = tf.assign(inputs_1, inputs)
with tf.control_dependencies([assign_op]):
self.infer_model._setup_net()
vars_dict = self._vars()
assign_ops = assign_vars(vars_dict, self.bbox_vars_dict, 'bbox')
assign_ops.extend(assign_vars(vars_dict, self.vars_dict, 'nsr'))
with tf.control_dependencies(assign_ops):
self.output = stack_output(self.max_number_length, self.length_output, self.numbers_output)
评论列表
文章目录