def predict(image): model = NASNetMobile() pred = model.predict(image) decoded_predictions = decode_predictions(pred, top=10) response = 'NASNetMobile predictions: ' + str( decoded_predictions[0][0:5]) print(response) np.argmax(pred[0]) return response
import keras from keras.applications.nasnet import NASNetMobile from keras.preprocessing import image from keras.applications.xception import preprocess_input, decode_predictions import numpy as np import tensorflow as tf from keras import backend as K sess = tf.Session() K.set_session(sess) model = NASNetMobile(weights="imagenet") img = image.load_img('cat.jpg', target_size=(224, 224)) img_arr = np.expand_dims(image.img_to_array(img), axis=0) x = preprocess_input(img_arr) preds = model.predict(x) print('Prediction:', decode_predictions(preds, top=5)[0]) # save the model for use with TensorFlow builder = tf.saved_model.builder.SavedModelBuilder("nasnet") # Tag the model, required for Go builder.add_meta_graph_and_variables(sess, ["atag"]) builder.save() sess.close()
class FeatureExtractor: def __init__(self, net='VGG16', weights='imagenet', size=None): print('[+] initialize: {}, weights: {}'.format(net, weights)) if net == 'Xception': from keras.applications.xception import Xception from keras.applications.xception import preprocess_input self.model = Xception(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'VGG16': print('[+] initialize using VGG16...') from keras.applications.vgg16 import VGG16 from keras.applications.vgg16 import preprocess_input self.model = VGG16(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'VGG19': from keras.applications.vgg19 import VGG19 from keras.applications.vgg19 import preprocess_input self.model = VGG19(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'ResNet50': from keras.applications.resnet50 import ResNet50 from keras.applications.resnet50 import preprocess_input self.model = ResNet50(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'InceptionV3': from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input self.model = InceptionV3(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (299, 299) elif net == 'InceptionResNetV2': from keras.applications.inception_resnet_v2 import InceptionResNetV2 from keras.applications.inception_resnet_v2 import preprocess_input self.model = InceptionResNetV2(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (299, 299) elif net == 'DenseNet121': from keras.applications.densenet import DenseNet121 from keras.applications.densenet import preprocess_input self.model = DenseNet121(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'DenseNet169': from keras.applications.densenet import DenseNet169 from keras.applications.densenet import preprocess_input self.model = DenseNet169(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'DenseNet201': from keras.applications.densenet import DenseNet201 from keras.applications.densenet import preprocess_input self.model = DenseNet201(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'NASNetLarge': from keras.applications.nasnet import NASNetLarge from keras.applications.nasnet import preprocess_input self.model = NASNetLarge(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == 'NASNetMobile': from keras.applications.nasnet import NASNetMobile from keras.applications.nasnet import preprocess_input self.model = NASNetMobile(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) else: print("FeatureExtractor: Net not found") self.preprocess_input = preprocess_input def extract(self, fp_im): #im_np = ensure_np(im) #im = cv.resize(im_np, self.input_size) # force resize #im = cv.cvtColor(im, cv.COLOR_RGBA2BGR) im = keras_image.load_img(fp_im, target_size=(224, 224)) # convert np.ndarray x = keras_image.img_to_array(im) # reshape to (3, 224, 224) x = x.copy(order="C") #im_rgb = Image.open(fp_im) #im_np_rgb = ensure_np(im_rgb) #im_np_bgr = cv.cvtColor(im_np_rgb, cv.COLOR_RGB2BGR) #x = keras_image.img_to_array(im_np_bgr) # reshape to (3, 224, 224) x = np.expand_dims(x, axis=0) # expand to (1, 3, 224, 224) #from keras.applications.vgg16 import preprocess_input as keras_preprocess x = self.preprocess_input(x) print(x.shape) feats = self.model.predict(x)[0] # extract features #feats_arr = np.char.mod('%f', features) # convert to list feats_norm = feats / np.linalg.norm(feats) return feats_norm
# Load our model # model = densenet169_model(img_rows=img_rows, img_cols=img_cols, color_type=channel, num_classes=num_classes) # load keras model model = NASNetMobile(weights=None, classes=10) sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) model.summary() # Start Fine-tuning model.fit( X_train, Y_train, batch_size=batch_size, epochs=nb_epoch, shuffle=True, verbose=1, validation_data=(X_valid, Y_valid), ) # Make predictions predictions_valid = model.predict(X_valid, batch_size=batch_size, verbose=1) # Cross-entropy loss score score = log_loss(Y_valid, predictions_valid)
data_ori = np.concatenate((data_cat, data_dog), axis=0) data_ori1 = np.concatenate((data_cat1, data_dog1), axis=0) # print(data_ori.shape) data_X = np.zeros(7 * 7 * 2048) for item in data_ori: data1 = model_Res.predict(item) # print(data1.shape) data1 = data1.reshape(1, 7 * 7 * 2048) data_X = np.vstack((data_X, data1)) data_X = data_X[1:, :] # print(data_X.shape) data_Y = np.hstack((np.zeros(200), np.ones(200))) data_X1 = np.zeros(7 * 7 * 1056) for item in data_ori1: data3 = model_NasMobile.predict(item) # print(data3.shape) data3 = data3.reshape(1, 7 * 7 * 1056) data_X1 = np.vstack((data_X1, data3)) data_X1 = data_X1[1:, :] # print(data_X.shape) data_Y1 = np.hstack((np.zeros(200), np.ones(200))) from keras.models import Sequential from keras.layers import Dense, Activation model_after_Res = Sequential([ Dense(10, input_dim=100352), Activation('relu'), Dense(1), Activation('sigmoid')
class FeatureExtractor: def __init__(self, weights='imagenet', net=KerasNet.VGG16, gpu_ram=0.3, size=None): """Initialize Keras feature extractor :param weights: (str) name of the weights network :param net: (KerasNet) network type """ from keras.preprocessing import image as keras_image self.keras_image = keras_image if net == KerasNet.XCEPTION: from keras.applications.xception import Xception from keras.applications.xception import preprocess_input self.model = Xception(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.VGG16: from keras.applications.vgg16 import VGG16 from keras.applications.vgg16 import preprocess_input self.model = VGG16(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.VGG19: from keras.applications.vgg19 import VGG19 from keras.applications.vgg19 import preprocess_input self.model = VGG19(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.RESNET50: from keras.applications.resnet50 import ResNet50 from keras.applications.resnet50 import preprocess_input self.model = ResNet50(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.INCEPTIONV2: from keras.applications.inception_resnet_v2 import InceptionResNetV2 from keras.applications.inception_resnet_v2 import preprocess_input self.model = InceptionResNetV2(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (299, 299) elif net == KerasNet.INCEPTIONV3: from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input self.model = InceptionV3(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (299, 299) elif net == KerasNet.DENSENET121: from keras.applications.densenet import DenseNet121 from keras.applications.densenet import preprocess_input self.model = DenseNet121(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.DENSENET160: from keras.applications.densenet import DenseNet169 from keras.applications.densenet import preprocess_input self.model = DenseNet169(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.DENSENET201: from keras.applications.densenet import DenseNet201 from keras.applications.densenet import preprocess_input self.model = DenseNet201(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.NASNETLARGE: from keras.applications.nasnet import NASNetLarge from keras.applications.nasnet import preprocess_input self.model = NASNetLarge(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) elif net == KerasNet.NASNETMOBILE: from keras.applications.nasnet import NASNetMobile from keras.applications.nasnet import preprocess_input self.model = NASNetMobile(weights=weights, include_top=False, pooling='avg') self.input_size = size if size is not None else (224, 224) self.preprocess_input = preprocess_input def extract_fp(self, fp_im, normalize=True): """Loads image and generates""" im = cv.imread(fp_im) return self.extract(im, normalize=normalize) def extract(self, im, normalize=True): """Get vector embedding from Numpy image array :param im: Numpy.ndarray Image :param normalize: If True, returns normalized feature vector :returns: Numpy ndarray """ # im = im_utils.ensure_np(im) im = cv.resize(im, self.input_size) # force resize #im = keras_image.load_img(fp_im, target_size=(224, 224)) # convert np.ndarray x = self.keras_image.img_to_array(im) # reshape to (3, 224, 224) x = np.expand_dims(x, axis=0) # expand to (1, 3, 224, 224) x = self.preprocess_input(x) feats = self.model.predict(x)[0] # extract features #feats_arr = np.char.mod('%f', features) # convert to list if normalize: feats = feats / np.linalg.norm(feats) return feats