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)
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))
# 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))