Как загрузить модель обратно из файлов cpkt, .meta, .index и .pb для Mobil enet v3? - PullRequest
0 голосов
/ 18 февраля 2020

Я скачал контрольные точки вместе с моделью для Mobil enet v3. После распаковки RAR-файла я получаю две папки и два других файла. Каталог выглядит следующим образом

Main Folder
     ema (folder)
        checkpoint
        model-x.data-00000-of-00001
        model-x.index
        model-x.meta
     pristine (folder)
        model.ckpt-y.data-00000-of-00001
        model.ckpt-y.index
        model.ckpt-y.meta
     .pb 
     .tflite

Я пробовал много кодов, среди которых несколько ниже.

import tensorflow as tf
from tensorflow.python.platform import gfile
model_path = "./weights/v3-large-minimalistic_224_1.0_uint8/model.ckpt-3868848"
detection_graph = tf.Graph()
with tf.Session(graph=detection_graph) as sess:
    # Load the graph with the trained states
    loader = tf.train.import_meta_graph(model_path+'.meta')
    loader.restore(sess, model_path)

Приведенный выше код приводит к следующей ошибке

Node {{node batch_processing/distort_image/switch_case/indexed_case}} of type Case has '_lower_using_switch_merge' attr set but it does not support lowering.

I пробовал следующий код:

import tensorflow as tf
import sys
sys.path.insert(0, 'models/research/slim')
from nets.mobilenet import mobilenet_v3

tf.reset_default_graph() 

file_input = tf.placeholder(tf.string, ()) 

image = tf.image.decode_jpeg(tf.read_file('test.jpg')) 

images = tf.expand_dims(image, 0) 
images = tf.cast(images, tf.float32) / 128.  - 1 
images.set_shape((None, None, None, 3)) 
images = tf.image.resize_images(images, (224, 224)) 

model = mobilenet_v3.wrapped_partial(mobilenet_v3.mobilenet,
                           new_defaults={'scope': 'MobilenetEdgeTPU'},
                           conv_defs=mobilenet_v3.V3_LARGE_MINIMALISTIC,
                           depth_multiplier=1.0)
with tf.contrib.slim.arg_scope(mobilenet_v3.training_scope(is_training=False)): 
    logits, endpoints = model(images)

ema = tf.train.ExponentialMovingAverage(0.999)
vars = ema.variables_to_restore()
print(vars)

with tf.Session() as sess:
    tf.train.Saver(vars).restore(sess,  './weights/v3-large-minimalistic_224_1.0_uint8/saved_model.pb') 
    tf.train.Saver().save(sess, './weights/v3-large-minimalistic_224_1.0_uint8/pristine/model.ckpt')

Приведенный выше код генерирует следующую ошибку:

Unable to open table file ./weights/v3-large-minimalistic_224_1.0_uint8/saved_model.pb: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
     [[node save/RestoreV2 (defined at <ipython-input-11-1531bbfd84bb>:29) ]]

Как я могу загрузить модель Mobil enet v3 вместе с контрольными точками и использовать ее для моих данных?

1 Ответ

0 голосов
/ 09 марта 2020

попробуйте

with tf.contrib.slim.arg_scope(mobilenet_v3.training_scope(is_training=False)): 
    logits, endpoints = mobilenet_v3.large_minimalistic(images)

вместо

model = mobilenet_v3.wrapped_partial(mobilenet_v3.mobilenet,
                       new_defaults={'scope': 'MobilenetEdgeTPU'},
                       conv_defs=mobilenet_v3.V3_LARGE_MINIMALISTIC,
                       depth_multiplier=1.0)
with tf.contrib.slim.arg_scope(mobilenet_v3.training_scope(is_training=False)): 
    logits, endpoints = model(images)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...