Создание экземпляра json для AI Platform из изображения для пользовательской нейронной сети - PullRequest
0 голосов
/ 23 мая 2019

Недавно я создал пользовательскую нейронную сеть со следующим кодом для базовой архитектуры:

def gen_base_model(n_class):
    cnn_model = InceptionResNetV2(include_top=False, input_shape=(width, width, 3), weights='imagenet')
    inputs = Input((width, width, 3))

    x = inputs
    x = Lambda(preprocess_input, name='preprocessing')(x)
    x = cnn_model(x)
    x = GlobalAveragePooling2D()(x)
    x = Dropout(0.5)(x)
    x = Dense(n_class, activation='softmax', name='softmax')(x)

    model = Model(inputs, x)
    return model

Я обучил модель и теперь хочу развернуть модель на Cloud ML Engine / AI Platform.

Я использовал следующий код для преобразования и сохранения модели keras в качестве сохраненной модели:

def convert_and_save(model, path):    
    full_path = './savedmodels/' + path
    signature = tf.saved_model.signature_def_utils.predict_signature_def(                                                                        
        inputs={'image': model.input}, outputs={'scores': model.output})                                                                         

    builder = tf.saved_model.builder.SavedModelBuilder(full_path)                                                                    
    builder.add_meta_graph_and_variables(                                                                                                        
        sess=K.get_session(),                                                                                                                    
        tags=[tf.saved_model.tag_constants.SERVING],                                                                                             
        signature_def_map={                                                                                                                      
            tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:                                                                
                signature                                                                                                                        
        })                                                                                                                                       
    builder.save()

Однако сейчас у меня возникают проблемы при создании экземпляра для прогнозирования выходных данных.Веб-сайт Google Cloud указывает следующий формат:

{"instances": [<instance>, <instance>, ...]}

Я попытался использовать следующий код для преобразования изображения:

width = 299
image_pre = cv2.resize(cv2.imread('image.jpg'), (width, width))
img_pred = np.expand_dims(image_pre, axis=0)
print(img_pred.shape)
img_pred_1 = img_pred.tolist()
instances = {'image': img_pred_1}

Но произошла ошибка со следующей ошибкой:

RuntimeError: Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details="input must be 4-dimensional[1,1,299,299,3]
     [[{{node inception_resnet_v2/conv2d_1/convolution}}]]")

Кроме того, я использую следующий код (керас) для прогнозов при локальном использовании модели:

width = 299
image_pre = cv2.resize(cv2.imread('image.jpg'), (width, width))
img_pred = np.expand_dims(image_pre, axis=0)
prediction = model.predict(img_pred)
ind = np.argmax(prediction[0])
predicted_class = model_classes[ind]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...