#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. Вы получили рабочее решение? Пожалуйста, поделитесь, если это возможно!