Получение ошибки несоответствия количества входных данных при получении прогнозов из предварительно обученной модели обнаружения объектов в Tensorflow-js

#tensorflow #tensorflow.js #tensorflowjs-converter

#tensorflow #tensorflow.js #tensorflowjs-конвертер

Вопрос:

Я пытаюсь использовать tensorflow.js чтобы предсказать результат из предварительно обученной модели обнаружения объекта, но я получаю ошибку, в model.predict(inputImage) которой

Не перехваченный (в обещании) Ошибка: несоответствие количества входных тензоров, графовая модель имеет 425 заполнителей, в то время как есть 1 входной тензор.

Я использую
— tensorflowjs версии — 1.0.1
— tensorflow — 2.0.0-dev20190404

Html «https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.4 «

Я использую модель SSD_Mobilenet_V2 и скачал ее с ‘http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

Я использовал эту команду для преобразования модели tf в веб-формат

 tensorflowjs_converter --input_format tf_saved_model ./saved_model ./tfjs_saved_modelSSDMobilenetV2
  

Получение ошибки в этой строке кода javascript:

 const boxes = await model.predict(processedImage);
  

Обрабатываемое изображение имеет форму tf.tensor3d (300,300,3).

Комментарии:

1. Не могли бы вы добавить больше ошибок?

2. Перекрестная ссылка на проблему GitHub , которая выглядит так же.

3. Вы получили решение? Я сталкиваюсь с той же проблемой.

Ответ №1:

Похоже, это связано с проблемой GitHub здесь — смотрите Также Проблему GitHub здесь для получения справочной информации.

К счастью, решение простое: вам просто нужно вручную указать входные и выходные узлы при выполнении вызова. Я протестировал это с помощью приведенной здесь модели, tensorflowjs 1.2.10.1 и tfjs 1.2.10.

     let outputs = await model.executeAsync(
        { 'image_tensor' : tf.zeros([1, 300, 300, 3]) },
        [ 'detection_boxes','detection_scores','detection_classes','num_detections']);
    tf.print(outputs);
  

Это дает следующее без ошибок:

 Tensor
    [[[0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      ...,
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0]]],Tensor
     [[0, 0, 0, ..., 0, 0, 0],],Tensor
     [[1, 1, 1, ..., 1, 1, 1],],Tensor
    [0]
  

Удачи!

Комментарии:

1. Вы получили рабочее решение? Пожалуйста, поделитесь, если это возможно!

2. Да, шаги в моем ответе должны сработать — вы столкнулись с той же проблемой? Если да, сработали ли эти шаги для вас?

3. Это сработало, но как я могу преобразовать изображение веб-камеры reshape в (300,300,3), которого я не знаю. Итак, на данный момент я борюсь, и нет четкого документа о tensorflow.js . Пожалуйста, не стесняйтесь меня поправлять.

4. @Не могли бы вы указать мне, как изменить размер тензора в Tensorflow.js ? SSD принимает (300,300,3) в качестве входных данных, в то время как изображение с помощью веб-камеры имеет разные размеры.

5. Наконец, получил решение. Спасибо!

Ответ №2:

У нас та же ошибка. На данный момент мы предполагаем:

  • это связано с тем фактом, что модель изначально была обучена с помощью tensorflow 1.x, а tensorflowjs теперь загружается с его преобразователем tensorflow 2.0-alpha.
  • Анализируя model.json, мы находим много «неиспользуемых значений_контроля_flow_input_», которые могут относиться к входному тензору, используемому только для целей обучения.

Однако мы только предполагаем, и документации нет. Взаимозаменяемость платформы tensorflow очень важна для любых реальных производственных развертываний, но здесь нам не хватает действительно недостающей информации.

Комментарии:

1. Вы когда-нибудь это понимали?

2. Я бы проверил новейшую версию TFJS, в которой исправлены некоторые из наших проблем.

3. Я столкнулся с аналогичной проблемой. Кто-нибудь еще придумал какое-либо решение?

4. Возможно. Я проверяю, является ли это той же проблемой, которую я рассматривал в вопросе GitHub

5. @msek: Вы получили рабочее решение? Пожалуйста, поделитесь, если это возможно!

Ответ №3:

coco-ssd использует (1, 300, 300, 3) для формы: https://github.com/tensorflow/tfjs-models/blob/master/coco-ssd/src/index.ts

Может быть, в этом проблема?

Комментарии:

1. Вы получили рабочее решение? Пожалуйста, поделитесь, если это возможно!