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
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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
Exemplo n.º 4
0
    # 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')
Exemplo n.º 6
0
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