def __get_input_template(self): scales = np.linspace(self.default_boxes_config["min_scale"], self.default_boxes_config["max_scale"], len(self.default_boxes_config["layers"])) mbox_conf_layers = [] mbox_loc_layers = [] mbox_default_boxes_layers = [] for i, layer in enumerate(self.default_boxes_config["layers"]): layer_default_boxes = ssd_utils.generate_default_boxes_for_feature_map( feature_map_size=layer["size"], image_size=self.input_size, offset=layer["offset"], scale=scales[i], next_scale=scales[i + 1] if i + 1 <= len(self.default_boxes_config["layers"]) - 1 else 1, aspect_ratios=layer["aspect_ratios"], variances=self.default_boxes_config["variances"], extra_box_for_ar_1=self.extra_box_for_ar_1) layer_default_boxes = np.reshape(layer_default_boxes, (-1, 8)) layer_conf = np.zeros( (layer_default_boxes.shape[0], self.num_classes)) layer_conf[:, 0] = 1 # all classes are background by default mbox_conf_layers.append(layer_conf) mbox_loc_layers.append(np.zeros( (layer_default_boxes.shape[0], 12))) mbox_default_boxes_layers.append(layer_default_boxes) mbox_conf = np.concatenate(mbox_conf_layers, axis=0) mbox_loc = np.concatenate(mbox_loc_layers, axis=0) mbox_default_boxes = np.concatenate(mbox_default_boxes_layers, axis=0) template = np.concatenate([mbox_conf, mbox_loc, mbox_default_boxes], axis=-1) template = np.expand_dims(template, axis=0) return np.tile(template, (self.batch_size, 1, 1))
def call(self, inputs): default_boxes = generate_default_boxes_for_feature_map( feature_map_size=self.feature_map_size, image_size=self.image_size, offset=self.offset, scale=self.scale, next_scale=self.next_scale, aspect_ratios=self.aspect_ratios, variances=self.variances, extra_box_for_ar_1=self.extra_box_for_ar_1) default_boxes = np.expand_dims(default_boxes, axis=0) default_boxes = tf.constant(default_boxes, dtype='float32') default_boxes = tf.tile(default_boxes, (tf.shape(inputs)[0], 1, 1, 1, 1)) return default_boxes
print("generating default boxes") scales = np.linspace(default_boxes_config["min_scale"], default_boxes_config["max_scale"], len(default_boxes_config["layers"])) mbox_conf_layers = [] mbox_loc_layers = [] mbox_default_boxes_layers = [] for i, layer in enumerate(default_boxes_config["layers"]): temp_image = image.copy() print(f"displaying default boxes for layer: {layer['name']}") layer_default_boxes = ssd_utils.generate_default_boxes_for_feature_map( feature_map_size=layer["size"], image_size=input_size, offset=layer["offset"], scale=scales[i], next_scale=scales[i + 1] if i + 1 <= len(default_boxes_config["layers"]) - 1 else 1, aspect_ratios=layer["aspect_ratios"], variances=default_boxes_config["variances"], extra_box_for_ar_1=extra_box_for_ar_1) grid_size = input_size / layer["size"] offset = layer["offset"] offset_x, offset_y = offset cx = np.linspace(offset_x * grid_size, input_size - (offset_x * grid_size), layer["size"]) cy = np.linspace(offset_y * grid_size, input_size - (offset_y * grid_size), layer["size"]) for n in range(len(cx)):