def test_color_input(self, rank4_input_model, rank3_input_model): mlmodel = ct.convert( rank4_input_model, inputs=[ ct.ImageType(shape=(1, 3, 10, 20), color_layout=ct.colorlayout.RGB) ], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add", "cast"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.RGB) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp32") verify_prediction(mlmodel) with pytest.raises(ValueError, match="must have rank 4"): mlmodel = ct.convert( rank3_input_model, inputs=[ ct.ImageType(shape=(1, 10, 20), color_layout=ct.colorlayout.RGB) ], minimum_deployment_target=ct.target.macOS12, )
def test_color_output(self, rank4_input_model, rank4_input_model_with_channel_first_output): # check that an error is raised if the output shape is not of form (1, 3, H, W) with pytest.raises(ValueError, match="Shape of the RGB/BGR image output,"): mlmodel = ct.convert(rank4_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], outputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], minimum_deployment_target=ct.target.macOS13, ) mlmodel = ct.convert(rank4_input_model_with_channel_first_output, inputs=[ct.ImageType(color_layout=ct.colorlayout.BGR)], outputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add", "cast"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.BGR) assert_spec_output_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.RGB) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp32") verify_prediction(mlmodel) # check neural network conversion mlmodel = ct.convert(rank4_input_model_with_channel_first_output, inputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], outputs=[ct.ImageType(color_layout=ct.colorlayout.BGR)], ) assert_ops_in_mil_program(mlmodel, expected_op_list=["add"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.RGB) assert_spec_output_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.BGR) verify_prediction(mlmodel)
def test_grayscale_output(self, rank4_grayscale_input_model, rank4_grayscale_input_model_with_channel_first_output): # check that an error is raised if the output shape is not of form (1, 1, H, W) with pytest.raises(ValueError, match="Shape of the Grayscale image output,"): mlmodel = ct.convert(rank4_grayscale_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], ) with pytest.raises(TypeError, match="float16 dtype for outputs is only supported for deployment target >= iOS16/macOS13"): mlmodel = ct.convert(rank4_grayscale_input_model_with_channel_first_output, outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], minimum_deployment_target=ct.target.macOS12, ) mlmodel = ct.convert(rank4_grayscale_input_model_with_channel_first_output, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], ) assert_ops_in_mil_program(mlmodel, expected_op_list=["add"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) assert_spec_output_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) verify_prediction(mlmodel) mlmodel = ct.convert(rank4_grayscale_input_model_with_channel_first_output, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], minimum_deployment_target=ct.target.macOS13, ) assert_cast_ops_count(mlmodel, expected_count=0) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_spec_output_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp16") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp16") verify_prediction(mlmodel) mlmodel = ct.convert(rank4_grayscale_input_model_with_channel_first_output, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) assert_spec_output_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp16") verify_prediction(mlmodel)
def test_grayscale_input(self, rank4_input_model, rank3_input_model, rank4_grayscale_input_model): with pytest.raises(ValueError, match="must have rank 4"): mlmodel = ct.convert(rank3_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], minimum_deployment_target=ct.target.macOS13, ) # invalid shape with pytest.raises(ValueError): mlmodel = ct.convert(rank4_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], minimum_deployment_target=ct.target.macOS13, ) mlmodel = ct.convert(rank4_grayscale_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "transpose", "add", "cast"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp32") verify_prediction(mlmodel) with pytest.raises(TypeError, match="float16 dtype for inputs is only supported for deployment target >= iOS16/macOS13"): mlmodel = ct.convert(rank4_grayscale_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], minimum_deployment_target=ct.target.macOS12, ) # test that grayscale_16 raises error when used with neural network with pytest.raises(TypeError, match="float16 dtype for inputs is only supported for deployment target >= iOS16/macOS13"): mlmodel = ct.convert(rank4_grayscale_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], ) mlmodel = ct.convert(rank4_grayscale_input_model, inputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16)], outputs=[ct.TensorType(dtype=np.float16)], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["transpose", "add"]) assert_spec_input_image_type(mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp16") assert_output_dtype(mlmodel, expected_type_str="fp16") verify_prediction(mlmodel)
def test_color_output(self, rank4_input_model, float32_input_model_add_op): # check that an error is raised if the output shape is not of form (1, 3, H, W) with pytest.raises(ValueError, match="must have rank 4. Instead it has rank 2"): ct.convert(float32_input_model_add_op, inputs=[ct.TensorType(shape=(10, 20))], outputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], minimum_deployment_target=ct.target.macOS13) mlmodel = ct.convert( rank4_input_model, inputs=[ ct.ImageType(shape=(1, 3, 10, 20), color_layout=ct.colorlayout.BGR) ], outputs=[ct.ImageType(color_layout=ct.colorlayout.RGB)], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add", "cast"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.BGR) assert_spec_output_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.RGB) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp32") verify_prediction(mlmodel) # check neural network conversion mlmodel = ct.convert( rank4_input_model, inputs=[ ct.ImageType(shape=(1, 3, 10, 20), color_layout=ct.colorlayout.RGB) ], outputs=[ct.ImageType(color_layout=ct.colorlayout.BGR)], ) assert_ops_in_mil_program(mlmodel, expected_op_list=["add"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.RGB) assert_spec_output_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.BGR) verify_prediction(mlmodel)
def test_grayscale_output(self, rank4_grayscale_input_model): with pytest.raises( TypeError, match= "float16 dtype for outputs is only supported for deployment target >= iOS16/macOS13" ): ct.convert( rank4_grayscale_input_model, inputs=[ct.TensorType(shape=(1, 1, 10, 20))], outputs=[ ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16) ], minimum_deployment_target=ct.target.macOS12, ) mlmodel = ct.convert( rank4_grayscale_input_model, inputs=[ ct.ImageType(shape=(1, 1, 10, 20), color_layout=ct.colorlayout.GRAYSCALE) ], outputs=[ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE)], ) assert_ops_in_mil_program(mlmodel, expected_op_list=["add"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) assert_spec_output_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) verify_prediction(mlmodel) mlmodel = ct.convert( rank4_grayscale_input_model, inputs=[ ct.ImageType(shape=(1, 1, 10, 20), color_layout=ct.colorlayout.GRAYSCALE_FLOAT16) ], outputs=[ ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16) ], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["add"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_spec_output_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp16") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp16") verify_prediction(mlmodel) mlmodel = ct.convert( rank4_grayscale_input_model, inputs=[ ct.ImageType(shape=(1, 1, 10, 20), color_layout=ct.colorlayout.GRAYSCALE) ], outputs=[ ct.ImageType(color_layout=ct.colorlayout.GRAYSCALE_FLOAT16) ], minimum_deployment_target=ct.target.macOS13, ) assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add"]) assert_spec_input_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE) assert_spec_output_image_type( mlmodel._spec, expected_feature_type=ft.ImageFeatureType.GRAYSCALE_FLOAT16) assert_prog_input_type(mlmodel._mil_program, expected_dtype_str="fp32") assert_prog_output_type(mlmodel._mil_program, expected_dtype_str="fp16") verify_prediction(mlmodel)