def test_multibox_transform_loc(): batch_size = 1 num_anchors = 3 num_classes = 3 cls_prob = sym.Variable("cls_prob") loc_preds = sym.Variable("loc_preds") anchors = sym.Variable("anchors") transform_loc_data, valid_count = sym.multibox_transform_loc(cls_prob=cls_prob, loc_pred=loc_preds, anchor=anchors) out = sym.nms(data=transform_loc_data, valid_count=valid_count) # Manually create test case np_cls_prob = np.array([[[0.2, 0.5, 0.3], [0.25, 0.3, 0.45], [0.7, 0.1, 0.2]]]) np_loc_preds = np.array([[0.1, -0.2, 0.3, 0.2, 0.2, 0.4, 0.5, -0.3, 0.7, -0.2, -0.4, -0.8]]) np_anchors = np.array([[[-0.1, -0.1, 0.1, 0.1], [-0.2, -0.2, 0.2, 0.2], [1.2, 1.2, 1.5, 1.5]]]) expected_np_out = np.array([[[1, 0.69999999, 0, 0, 0.10818365, 0.10008108], [0, 0.44999999, 1, 1, 1, 1], [0, 0.30000001, 0, 0, 0.22903419, 0.20435292]]]) target = "llvm" dtype = "float32" ctx = tvm.cpu() graph, lib, _ = nnvm.compiler.build(out, target, {"cls_prob": (batch_size, num_anchors, num_classes), "loc_preds": (batch_size, num_anchors * 4), "anchors": (1, num_anchors, 4)}) m = graph_runtime.create(graph, lib, ctx) m.set_input(**{"cls_prob": np_cls_prob.astype(dtype), "loc_preds": np_loc_preds.astype(dtype), "anchors": np_anchors.astype(dtype)}) m.run() out = m.get_output(0, tvm.nd.empty(expected_np_out.shape, dtype)) np.testing.assert_allclose(out.asnumpy(), expected_np_out, atol=1e-5, rtol=1e-5)
def get_multibox_detection_output(np_cls_prob, np_loc_preds, np_anchors, batch_size, num_anchors, num_classes): import nnvm.symbol as sym cls_prob = sym.Variable("cls_prob") loc_preds = sym.Variable("loc_preds") anchors = sym.Variable("anchors") transform_loc_data, valid_count = sym.multibox_transform_loc( cls_prob=cls_prob, loc_pred=loc_preds, anchor=anchors) out = sym.nms(data=transform_loc_data, valid_count=valid_count) target = "llvm" dtype = "float32" ctx = tvm.cpu() graph, lib, _ = nnvm.compiler.build( out, target, { "cls_prob": (batch_size, num_classes, num_anchors), "loc_preds": (batch_size, num_anchors * 4), "anchors": (1, num_anchors, 4) }) m = graph_runtime.create(graph, lib, ctx) m.set_input(**{ "cls_prob": np_cls_prob, "loc_preds": np_loc_preds, "anchors": np_anchors }) m.run() _, out_shape = nnvm.compiler.graph_util.infer_shape(graph, shape={"data": dshape}) out = m.get_output(0, tvm.nd.empty( tuple(out_shape[0]), dtype)) # output of "mbox_conf_softmax", shape: (1, 21, 8732) return out
def test_multibox_transform_loc(): batch_size = 1 num_anchors = 3 num_classes = 3 cls_prob = sym.Variable("cls_prob") loc_preds = sym.Variable("loc_preds") anchors = sym.Variable("anchors") transform_loc_data, valid_count = sym.multibox_transform_loc(cls_prob=cls_prob, loc_pred=loc_preds, anchor=anchors) out = sym.non_max_suppression(data=transform_loc_data, valid_count=valid_count, return_indices=False) # Manually create test case np_cls_prob = np.array([[[0.2, 0.5, 0.3], [0.25, 0.3, 0.45], [0.7, 0.1, 0.2]]]) np_loc_preds = np.array([[0.1, -0.2, 0.3, 0.2, 0.2, 0.4, 0.5, -0.3, 0.7, -0.2, -0.4, -0.8]]) np_anchors = np.array([[[-0.1, -0.1, 0.1, 0.1], [-0.2, -0.2, 0.2, 0.2], [1.2, 1.2, 1.5, 1.5]]]) expected_np_out = np.array([[[1, 0.69999999, 0, 0, 0.10818365, 0.10008108], [0, 0.44999999, 1, 1, 1, 1], [0, 0.30000001, 0, 0, 0.22903419, 0.20435292]]]) dtype = "float32" for target, ctx in ctx_list(): graph, lib, _ = nnvm.compiler.build(out, target, {"cls_prob": (batch_size, num_anchors, num_classes), "loc_preds": (batch_size, num_anchors * 4), "anchors": (1, num_anchors, 4)}) m = graph_runtime.create(graph, lib, ctx) m.set_input(**{"cls_prob": np_cls_prob.astype(dtype), "loc_preds": np_loc_preds.astype(dtype), "anchors": np_anchors.astype(dtype)}) m.run() tvm_out = m.get_output(0, tvm.nd.empty(expected_np_out.shape, dtype)) tvm.testing.assert_allclose(tvm_out.asnumpy(), expected_np_out, atol=1e-5, rtol=1e-5)