Exemplo n.º 1
0
  def test_data_layout():
    infer_server =cnis.InferServer(dev_id=0)
    # Load model
    model = infer_server.load_model(utils.model_dir)
    # Check model input and output data type and dim order
    if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
     cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
      assert model.input_layout(0).dtype == cnis.DataType.UINT8
      assert model.input_layout(0).order == cnis.DimOrder.NHWC
      assert model.output_layout(0).dtype == cnis.DataType.FLOAT16
      assert model.output_layout(0).order == cnis.DimOrder.NHWC
    else:
      assert model.input_layout(0).dtype == cnis.DataType.UINT8
      assert model.input_layout(0).order == cnis.DimOrder.NHWC
      assert model.output_layout(0).dtype == cnis.DataType.FLOAT32
      assert model.output_layout(0).order == cnis.DimOrder.NONE
      assert model.output_layout(1).dtype == cnis.DataType.INT32
      assert model.output_layout(1).order == cnis.DimOrder.NONE

    # Check data type size is correct
    assert cnis.get_type_size(cnis.DataType.UINT8) == 1
    assert cnis.get_type_size(cnis.DataType.FLOAT32) == 4
    assert cnis.get_type_size(cnis.DataType.FLOAT16) == 2
    assert cnis.get_type_size(cnis.DataType.INT16) == 2
    assert cnis.get_type_size(cnis.DataType.INT32) == 4
Exemplo n.º 2
0
    def test_observer():
        infer_server = cnis.InferServer(dev_id=0)
        session_desc = cnis.SessionDesc()
        session_desc.model = infer_server.load_model(utils.model_dir)
        session_desc.show_perf = False

        class TestPostproc(cnis.Postprocess):
            """To use custom postprocess, we define a class TestPostproc which inherits from cnis.Postprocess.
      The execute_func API will be called by InferServer to do postprocess.
      """
            def __init__(self):
                super().__init__()

            def execute_func(self, result, model_output, model_info):
                result.set({"key1": "result1", "key2": "result2"})
                return True

        session_desc.postproc = cnis.Postprocessor()
        session_desc.set_postproc_func(TestPostproc().execute)

        class TestObserver(cnis.Observer):
            """To receive results from InferServer, we define a class TestObserver which inherits from cnis.Observer.
      After a request is sent to InferServer and is processed by InferServer, the response_func API will be called with
      status, results and user data.
      """
            def __init__(self):
                super().__init__()
                self.called = False

            def response_func(self, status, data, user_data):
                # Check user data
                assert "user_data" in user_data
                assert user_data["user_data"] == "cnis"
                assert len(data.data) == 1
                # Check data
                result = data.data[0].get_dict()
                assert "key1" in result
                assert "key2" in result
                assert result["key1"] == "result1"
                assert result["key2"] == "result2"
                self.called = True

        obs = TestObserver()
        session = infer_server.create_session(session_desc, obs)
        input_pak = cnis.Package(1, utils.tag)
        if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
           cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
            input_pak.data[0].set(
                np.random.randint(0, 255, size=(300, 300, 4), dtype=np.uint8))
        else:
            input_pak.data[0].set(
                np.random.randint(0, 255, size=(416, 416, 3), dtype=np.uint8))
        infer_server.request(session, input_pak, {"user_data": "cnis"})
        infer_server.wait_task_done(session, utils.tag)
        assert obs.called
        infer_server.destroy_session(session)
Exemplo n.º 3
0
    def test_video_infer_server_request_sync():
        # Create VideoInferServer object
        infer_server = cnis.VideoInferServer(dev_id=0)
        session_desc = cnis.SessionDesc()
        session_desc.name = "test_session"
        # Load model
        session_desc.model = infer_server.load_model(utils.model_dir)

        # Create VideoPreprocessorMLU and set parameters. Use CNCV preproc.
        session_desc.preproc = cnis.VideoPreprocessorMLU()
        if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
           cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.BGRA,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=False)
        else:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.RGB24,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=True)
        session_desc.show_perf = False

        # Create synchronous session
        session = infer_server.create_sync_session(session_desc)

        # Prepare input video_frame
        video_frame = utils.prepare_video_frame()
        output = cnis.Package(1, utils.tag)
        status = cnis.Status.SUCCESS
        # Request VideoFrame
        assert infer_server.request_sync(session, video_frame, utils.tag,
                                         status, output)
        assert status == cnis.Status.SUCCESS

        # Prepare input video_frame
        video_frame = utils.prepare_video_frame()
        input_pak = cnis.Package(1, utils.tag)
        input_pak.data[0].set(video_frame)
        # Request input package
        assert infer_server.request_sync(session, input_pak, status, output)
        assert status == cnis.Status.SUCCESS

        # Prepare input with bounding boxes
        video_frame = utils.prepare_video_frame()
        bbox = [cnis.BoundingBox(x=0, y=0, w=0.5, h=0.5)] * 4
        output = cnis.Package(1, utils.tag)
        status = cnis.Status.SUCCESS
        # Request VideoFrame and bounding boxes of it
        assert infer_server.request_sync(session, video_frame, bbox, utils.tag,
                                         status, output)
        assert status == cnis.Status.SUCCESS

        # Destroy session
        infer_server.destroy_session(session)
Exemplo n.º 4
0
def prepare_input(model):
  """Read image from file. Set OpenCV mat to input package."""
  img = cv2.imread(cur_file_dir + "/data/test.jpg")
  # resize to model input shape
  resized_img = cv2.resize(img, (get_model_input_wh(model)))
  # convert color to model input pixel format
  if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
     cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
    result_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2BGRA)
  else:
    result_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2RGB)
  # Create input package and set OpenCV mat to input package
  input_pak = cnis.Package(1, utils.tag)
  input_pak.data[0].set(result_img)
  return input_pak
Exemplo n.º 5
0
    def test_video_preprocessor_mlu():
        # Create VideoPreprocessorMLU
        preproc = cnis.VideoPreprocessorMLU()
        assert preproc

        # Create InferServer object
        infer_server = cnis.InferServer(dev_id=0)
        session_desc = cnis.SessionDesc()
        session_desc.name = "test_session"
        # Load model
        session_desc.model = infer_server.load_model(utils.model_dir)

        # Create VideoPreprocessorMLU and set parameters. Use CNCV preproc.
        session_desc.preproc = preproc
        if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
           cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.BGRA,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=False)
        else:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.RGB24,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=True)
        session_desc.show_perf = False

        # Create synchronous session
        session = infer_server.create_sync_session(session_desc)
        # Request
        request_package(infer_server, session)
        # Destroy sessoion
        infer_server.destroy_session(session)

        # Use RCOP preproc.
        if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
           cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.BGRA,
                cnis.VideoPreprocessType.RESIZE_CONVERT,
                keep_aspect_ratio=False)
            # Create synchronous session
            session = infer_server.create_sync_session(session_desc)
            # Request
            request_package(infer_server, session)
            # Destroy sessoion
            infer_server.destroy_session(session)
Exemplo n.º 6
0
 def __init__(self, device_id):
   self.tag = "stream_0"
   self.dev_id = device_id
   self.core_ver = cnis.get_device_core_version(self.dev_id)
   self.model_dir = "http://video.cambricon.com/models/MLU270/Primary_Detector/ssd/vgg16_ssd_b4c4_bgra_mlu270.cambricon"
   if self.core_ver == cnis.CoreVersion.MLU220:
     self.model_dir = "http://video.cambricon.com/models/MLU220/Primary_Detector/ssd/vgg16_ssd_b4c4_bgra_mlu220.cambricon"
   elif self.core_ver == cnis.CoreVersion.MLU370:
     self.model_dir = "http://video.cambricon.com/models/MLU370/yolov3_nhwc_tfu_0.8.2_uint8_int8_fp16.model"
Exemplo n.º 7
0
 def test_model():
   infer_server = cnis.InferServer(dev_id=0)
   model = infer_server.load_model(utils.model_dir)
   if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
      cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
     assert model.input_layout(0)
     assert model.input_shape(0)
     assert model.output_layout(0)
     assert model.output_shape(0)
     assert model.input_num() == 1
     assert model.output_num() == 1
     assert model.batch_size() == 4
     assert model.get_key() == "./vgg16_ssd_b4c4_bgra_mlu270.cambricon_subnet0"
   else:
     assert model.input_layout(0)
     assert model.input_shape(0)
     assert model.output_layout(0)
     assert model.output_shape(0)
     assert model.output_layout(1)
     assert model.output_shape(1)
     assert model.input_num() == 1
     assert model.output_num() == 2
     assert model.batch_size() == 4
     assert model.get_key() == "./yolov3_nhwc_tfu_0.8.2_uint8_int8_fp16.model"
Exemplo n.º 8
0
    def test_video_infer_server_request_async():
        # Create VideoInferServer object
        infer_server = cnis.VideoInferServer(dev_id=0)
        session_desc = cnis.SessionDesc()
        session_desc.name = "test_session"
        # Load model
        session_desc.model = infer_server.load_model(utils.model_dir)

        # Create VideoPreprocessorMLU and set parameters. Use CNCV preproc.
        session_desc.preproc = cnis.VideoPreprocessorMLU()
        if cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU270 or \
           cnis.get_device_core_version(dev_id=0) == cnis.CoreVersion.MLU220:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.BGRA,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=False)
        else:
            session_desc.set_preproc_params(
                cnis.VideoPixelFmt.RGB24,
                cnis.VideoPreprocessType.CNCV_PREPROC,
                keep_aspect_ratio=True)
        session_desc.show_perf = False

        # Define a TestObserver class to receive results
        class TestObserver(cnis.Observer):
            """To receive results from InferServer, we define a class MyObserver which inherits from cnis.Observer.
      After a request is sent to InferServer and is processed by InferServer, the response_func API will be called with
      status, results and user data.
      """
            def __init__(self):
                super().__init__()
                self.called = False

            def response_func(self, status, data, user_data):
                assert status == cnis.Status.SUCCESS
                assert "user_data" in user_data
                assert user_data["user_data"] == "cnis"
                self.called = True

        # Create observer
        obs = TestObserver()
        # Create asynchronous session
        session = infer_server.create_session(session_desc, obs)

        # Prepare input video_frame
        video_frame = utils.prepare_video_frame()
        # Create user data
        user_data = {"user_data": "cnis"}
        # Request VideoFrame
        assert infer_server.request(session, video_frame, utils.tag, user_data)

        # Prepare input package
        video_frame = utils.prepare_video_frame()
        input_pak = cnis.Package(1, utils.tag)
        input_pak.data[0].set(video_frame)
        # Request package
        assert infer_server.request(session, input_pak, user_data)

        # Prepare input with bounding box
        video_frame = utils.prepare_video_frame()
        bbox = [cnis.BoundingBox(x=0, y=0, w=0.5, h=0.5)] * 4
        # Request VideoFrame and bounding boxes of it
        assert infer_server.request(session, video_frame, bbox, utils.tag,
                                    user_data)

        infer_server.wait_task_done(session, utils.tag)
        assert obs.called

        # Destroy session
        infer_server.destroy_session(session)