Почему моя модель логического вывода для изображений размером 240 x 800 пикселей не работает после обучения переносу с тензорным расходом? - PullRequest
0 голосов
/ 05 июля 2019

Я не могу реализовать следующий код модели логического вывода, если размер моего входного изображения не равен 299 x 299 пикселей. Когда я тестирую изображение размером 240 x 800 пикселей (1, 240, 800, 3), я получаю ошибку, связанную с tf.squeeze для dim [2] для переменной «aux_logits», которая имеет форму (1, 1 , 11, 24), где 24 = количество классов. Когда я тестирую изображение размером 299 x 299 пикселей (1, 299, 299, 3) из другого набора данных с 5 классами, то форма переменной "aux_logits" имеет вид (1, 1, 1, 5). В этом случае tf.squeeze успешен, потому что dim [2] = 1. Пожалуйста, объясните, почему я не могу запустить приведенный ниже код для нестандартных размеров изображений ImageNet.

import tensorflow as tf
from nets import inception_v3
from preprocessing import inception_preprocessing
import scipy.misc
from scipy.misc import imshow, imread, imresize
import numpy as np

slim = tf.contrib.slim


batch_size = 1
image_size1 = 240
image_size2 = 800

with tf.Graph().as_default():
    with slim.arg_scope(inception_v3.inception_v3_arg_scope()):

        imgPath = r'C:\Users\atunick\Tensorflow\models\research\slim\tmp\imagenet\20130412_043218_54895.jpg'
        testImage_string = tf.gfile.FastGFile(imgPath, 'rb').read()
        testImage = tf.image.decode_jpeg(testImage_string, channels=3)
        processed_image = inception_preprocessing.preprocess_image(testImage, image_size1, image_size2, is_training=False)
        processed_images = tf.expand_dims(processed_image, 0)
        print(processed_images.get_shape())    #(1, 240, 800, 3)
        logits, _ = inception_v3.inception_v3(processed_images, num_classes=24, is_training=False)
        probabilities = tf.nn.softmax(logits)
        checkpoint_path = tf.train.latest_checkpoint(r'C:\tmp\mardct-models\inception_v3\all')
        init_fn = slim.assign_from_checkpoint_fn(
        checkpoint_path, slim.get_model_variables('InceptionV3'))

        with tf.Session() as sess:
            init_fn(sess)

            np_image, probabilities = sess.run([processed_images, probabilities])
            probabilities = probabilities[0, 0:]
            sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x: x[1])]

            names = ['Alilaguna', 'Ambulanza', 'Barchino', 'Cacciapesca', 'Caorlina', 'Gondola', 'Lanciafino10m',
                     'Lanciafino10mBianca', 'Lanciafino10mMarrone', 'Lanciamaggioredi10mBianca', 'Lanciamaggioredi10mMarrone',
                     'Motobarca', 'Motopontonerettangolare', 'MotoscafoACTV', 'Mototopo', 'Patanella', 'Polizia', 'Raccoltarifiuti',
                     'Sandoloaremi', 'Sanpierota', 'Topa', 'VaporettoACTV', 'VigilidelFuoco', 'Water']
            for i in range(24):
                index = sorted_inds[i]
                print((probabilities[index], names[index]))
        #imshow(imread(imgPath))

Вот сообщения об ошибках:

(tensorflow) C:\Users\atunick\Tensorflow\models\research\slim>python test_image_v3_mardct.py
(1, 240, 800, 3) #image shape
(1, 1, 11, 24)   #aux_logits shape
Traceback (most recent call last):
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\framework\ops.py", line 1626, in _create_c_op
    c_op = c_api.TF_FinishOperation(op_desc)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Can not squeeze dim[2], expected a dimension of 1, got 11 for 'InceptionV3/AuxLogits/SpatialSqueeze' (op: 'Squeeze') with input shapes: [1,1,11,24].

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test_image_v3_mardct.py", line 24, in <module>
    logits, _ = inception_v3.inception_v3(processed_images, num_classes=24, is_training=False)
  File "C:\Users\atunick\Tensorflow\models\research\slim\nets\inception_v3.py", line 518, in inception_v3
    aux_logits = tf.squeeze(aux_logits, [1,2], name='SpatialSqueeze')
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\ops\array_ops.py", line 2567, in squeeze
    return gen_array_ops.squeeze(input, axis, name)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 9895, in squeeze
    "Squeeze", input=input, squeeze_dims=axis, name=name)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\framework\ops.py", line 3272, in create_op
    op_def=op_def)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\framework\ops.py", line 1790, in __init__
    control_input_ops)
  File "C:\ProgramData\Miniconda3\envs\tensorflow\Lib\site-packages\tensorflow\python\framework\ops.py", line 1629, in _create_c_op
    raise ValueError(str(e))
ValueError: Can not squeeze dim[2], expected a dimension of 1, got 11 for 'InceptionV3/AuxLogits/SpatialSqueeze' (op: 'Squeeze') with input shapes: [1,1,11,24].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...