in sagemaker/src/word_and_line_segmentation.py [0:0]
def generate_output_image(box_predictions, default_anchors, cls_probs, box_target, box_mask, cls_target, x, y):
'''
Generate the image with the predicted and actual bounding boxes.
Parameters
----------
box_predictions: nd.array
Bounding box predictions relative to the anchor boxes, output of the network
default_anchors: nd.array
Anchors used, output of the network
cls_probs: nd.array
Output of nd.SoftmaxActivation(nd.transpose(class_predictions, (0, 2, 1)), mode='channel')
where class_predictions is the output of the network.
box_target: nd.array
Output classification probabilities from network.training_targets(default_anchors, class_predictions, y)
box_mask: nd.array
Output bounding box predictions from network.training_targets(default_anchors, class_predictions, y)
cls_target: nd.array
Output targets from network.training_targets(default_anchors, class_predictions, y)
x: nd.array
The input images
y: nd.array
The actual labels
Returns
-------
output_image: np.array
The images with the predicted and actual bounding boxes drawn on
number_of_bbs: int
The number of predicting bounding boxes
'''
output = MultiBoxDetection(*[cls_probs, box_predictions, default_anchors], force_suppress=True, clip=False)
output = box_nms(output, overlap_thresh=overlap_thres, valid_thresh=min_c, topk=topk)
output = output.asnumpy()
number_of_bbs = 0
predicted_bb = []
for b in range(output.shape[0]):
predicted_bb_ = output[b, output[b, :, 0] != -1]
predicted_bb_ = predicted_bb_[:, 2:]
number_of_bbs += predicted_bb_.shape[0]
predicted_bb_[:, 2] = predicted_bb_[:, 2] - predicted_bb_[:, 0]
predicted_bb_[:, 3] = predicted_bb_[:, 3] - predicted_bb_[:, 1]
predicted_bb.append(predicted_bb_)
labels = y[:, :, 1:].asnumpy()
labels[:, :, 2] = labels[:, :, 2] - labels[:, :, 0]
labels[:, :, 3] = labels[:, :, 3] - labels[:, :, 1]
output_image = draw_boxes_on_image(predicted_bb, labels, x.asnumpy())
output_image[output_image<0] = 0
output_image[output_image>1] = 1
return output_image, number_of_bbs