ValueError: Невозможно передать значение формы (1, 26, 38, 3) для Tensor 'ResizeBilinear: 0', который имеет форму '(1, 299, 299, 3)' - PullRequest
0 голосов
/ 26 апреля 2018

Я попробовал учебник "object_detection", используя pb файл поезда inceptionv3, но я получаю следующую ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-41-1cfc370a11f2> in <module>()
  8   image_np_expanded = np.expand_dims(image_np, axis=0)
  9   # Actual detection.
---> 10   output_dict = run_inference_for_single_image(image_np, detection_graph)
 11   # Visualization of the results of a detection.
 12   vis_util.visualize_boxes_and_labels_on_image_array(

<ipython-input-38-7704143af1b0> in run_inference_for_single_image(image, graph)
 33       # Run inference
 34       output_dict = sess.run(tensor_dict,
---> 35                              feed_dict={ResizeBilinear: np.expand_dims(image, 0)})
 36 
 37       # all outputs are float32 numpy arrays, so convert types as appropriate

~/anaconda3/lib/python3.6/site-
packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
893     try:
894       result = self._run(None, fetches, feed_dict, options_ptr,
--> 895                          run_metadata_ptr)
896       if run_metadata:
897         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~/anaconda3/lib/python3.6/site-
packages/tensorflow/python/client/session.py in _run(self, handle, 
fetches, feed_dict, options, run_metadata)
1102                 'Cannot feed value of shape %r for Tensor %r, '
1103                 'which has shape %r'
-> 1104                 % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
1105           if not self.graph.is_feedable(subfeed_t):
1106             raise ValueError('Tensor %s may not be fed.' % subfeed_t)

ValueError: Cannot feed value of shape (1, 26, 38, 3) for Tensor 'ResizeBilinear:0', which has shape '(1, 299, 299, 3)'

Поэтому я попытался использовать приведенный ниже код для изменения размера изображения:

 image = array(img).reshape(1, 299,299,3)

Но изображение все еще не может быть передано в тензор resizeBilinear.

Я только что изменил этот код:

#MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
#MODEL_FILE = MODEL_NAME + '.tar.gz'
#DOWNLOAD_BASE ='http://download.tensorflow.org/models/object_detection/'
#upper code is origin model preparation 
PATH_TO_CKPT = /tmp/output_graph.pb
PATH_TO_LABELS = /tmp/output_labels.txt
NUM_CLASSES = 2

Как я могу исправить эту ошибку?Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 апреля 2018

Проблема в том, что Inception V3 ожидает ввода изображения размером 299 x 299 пикселей и 3 каналов (цветное изображение). Поэтому требуется входной массив формы (1, 299, 299, 3).

Вы пытаетесь передать ему намного меньшее изображение размером 26 x 38 пикселей. Изменение формы - это операция с массивом, которая переставляет элементы массива по размерам, без изменения количества элементов .

Вам необходимо изменить размер изображение, когда-то загруженное до требуемых 299 x 299 пикселей, с чем-то вроде PIL.Image.resize(), вот так (не проверено):

image = array( img.resize( (299, 299) ) ).reshape(1, 299,299,3)

Примечание: вам все равно нужносохраните форму, чтобы добавить дополнительное измерение заранее (вы также можете использовать expand_dims.)

...