def _test_image_prediction(self, model_name, epoch, label_name):
        try:
            data = read_image(VAL_DATA, label_name=label_name)
        except:
            download_data()
            data = read_image(VAL_DATA, label_name=label_name)

        mod = load_model(model_name=model_name,
                         epoch_num=epoch,
                         data_shapes=data.provide_data,
                         label_shapes=data.provide_label,
                         label_names=[
                             label_name,
                         ])

        input_shape = (1, 3, 224, 224)
        coreml_model = mxnet_converter.convert(
            mod, input_shape={'data': input_shape})

        mxnet_acc = []
        mxnet_top_5_acc = []
        coreml_acc = []
        coreml_top_5_acc = []

        num_batch = 0

        for batch in data:
            mod.forward(batch, is_train=False)
            mxnet_preds = mod.get_outputs()[0].asnumpy()
            data_numpy = batch.data[0].asnumpy()
            label_numpy = batch.label[0].asnumpy()
            for i in xrange(32):
                input_data = {'data': data_numpy[i]}
                coreml_predict = coreml_model.predict(
                    input_data).values()[0].flatten()
                mxnet_predict = mxnet_preds[i]
                label = label_numpy[i]
                mxnet_acc.append(is_correct_top_one(mxnet_predict, label))
                mxnet_top_5_acc.append(
                    is_correct_top_five(mxnet_predict, label))
                coreml_acc.append(is_correct_top_one(coreml_predict, label))
                coreml_top_5_acc.append(
                    is_correct_top_five(coreml_predict, label))
                num_batch += 1
            if (num_batch == 5): break  # we only use a subset of the batches.

        print("MXNet acc %s" % np.mean(mxnet_acc))
        print("Coreml acc %s" % np.mean(coreml_acc))
        print("MXNet top 5 acc %s" % np.mean(mxnet_top_5_acc))
        print("Coreml top 5 acc %s" % np.mean(coreml_top_5_acc))
        self.assertAlmostEqual(np.mean(mxnet_acc),
                               np.mean(coreml_acc),
                               delta=1e-4)
        self.assertAlmostEqual(np.mean(mxnet_top_5_acc),
                               np.mean(coreml_top_5_acc),
                               delta=1e-4)
Exemplo n.º 2
0
    def _test_image_prediction(self, model_name, epoch, label_name):
        try:
            data = read_image(VAL_DATA, label_name=label_name)
        except:
            download_data()
            data = read_image(VAL_DATA, label_name=label_name)

        mod = load_model(
            model_name=model_name,
            epoch_num=epoch,
            data_shapes=data.provide_data,
            label_shapes=data.provide_label,
            label_names=[label_name,]
        )

        input_shape = (1, 3, 224, 224)
        coreml_model = mxnet_converter.convert(mod, input_shape={'data': input_shape})

        mxnet_acc = []
        mxnet_top_5_acc = []
        coreml_acc = []
        coreml_top_5_acc = []

        num_batch = 0

        for batch in data:
            mod.forward(batch, is_train=False)
            mxnet_preds = mod.get_outputs()[0].asnumpy()
            data_numpy = batch.data[0].asnumpy()
            label_numpy = batch.label[0].asnumpy()
            for i in xrange(32):
                input_data = {'data': data_numpy[i]}
                coreml_predict = coreml_model.predict(input_data).values()[0].flatten()
                mxnet_predict = mxnet_preds[i]
                label = label_numpy[i]
                mxnet_acc.append(is_correct_top_one(mxnet_predict, label))
                mxnet_top_5_acc.append(is_correct_top_five(mxnet_predict, label))
                coreml_acc.append(is_correct_top_one(coreml_predict, label))
                coreml_top_5_acc.append(is_correct_top_five(coreml_predict, label))
                num_batch += 1
            if (num_batch == 5): break # we only use a subset of the batches.

        print("MXNet acc %s" % np.mean(mxnet_acc))
        print("Coreml acc %s" % np.mean(coreml_acc))
        print("MXNet top 5 acc %s" % np.mean(mxnet_top_5_acc))
        print("Coreml top 5 acc %s" % np.mean(coreml_top_5_acc))
        self.assertAlmostEqual(np.mean(mxnet_acc), np.mean(coreml_acc), delta=1e-4)
        self.assertAlmostEqual(np.mean(mxnet_top_5_acc), np.mean(coreml_top_5_acc), delta=1e-4)
    # parse the input data name/shape and label name/shape
    input_shape = yaml.safe_load(args.input_shape)
    data_shapes = []
    for key in input_shape:
        # We prepend 1 because the coreml model only accept 1 input data at a time (=batch-size).
        shape = (1,)+literal_eval(input_shape[key])
        input_shape[key] = shape
        data_shapes.append((key, shape))

    # if label name is not in input then do not use the label
    label_names = [args.label_names,] if args.label_names in input_shape else None

    pre_processing_arguments = args.pre_processing_arguments

    mod = load_model(
        model_name=model_name,
        epoch_num=epoch_num,
        data_shapes=data_shapes,
        label_shapes=None,
        label_names=label_names
    )

    kwargs = {'input_shape': input_shape}
    if pre_processing_arguments is not None:
        kwargs['preprocessor_args'] = yaml.safe_load(pre_processing_arguments)

    coreml_model = convert(model=mod, mode=mode, class_labels=class_labels, **kwargs)
    coreml_model.save(output_file)
    print("\nSUCCESS\nModel %s has been converted and saved at %s\n" % (model_name, output_file))
Exemplo n.º 4
0
    # parse the input data name/shape and label name/shape
    input_shape = yaml.safe_load(args.input_shape)
    data_shapes = []
    for key in input_shape:
        # We prepend 1 because the coreml model only accept 1 input data at a time.
        shape = (1,)+literal_eval(input_shape[key])
        input_shape[key] = shape
        data_shapes.append((key, shape))

    # if label name is not in input then do not use the label
    label_names = [args.label_names,] if args.label_names in input_shape else None

    pre_processing_arguments = args.pre_processing_arguments

    mod = load_model(
        model_name=model_name,
        epoch_num=epoch_num,
        data_shapes=data_shapes,
        label_shapes=None,
        label_names=label_names
    )

    kwargs = {'input_shape': input_shape}
    if pre_processing_arguments is not None:
        kwargs['preprocessor_args'] = yaml.safe_load(pre_processing_arguments)

    coreml_model = convert(model=mod, mode=mode, class_labels=class_labels, **kwargs)
    coreml_model.save(output_file)
    print("\nSUCCESS\nModel %s has been converted and saved at %s\n" % (model_name, output_file))