Я столкнулся с такой же проблемой в tfjs-node
, и для этой ошибки может потребоваться, чтобы вы следовали https://github.com/tensorflow/tfjs-models/tree/master/coco-ssd#technical-details-for-advanced-users
Примечание: все примеры написаны на TypeScript, но их легко перевести на JavaScript.
Я подробно опишу 3 шага ниже
1.Удалите шаги постобработки
, которые вам понадобятся для удаления шагов постобработки из экспортированной модели
tensorflowjs_converter --input_format=tf_saved_model \
--output_node_names='Postprocessor/ExpandDims_1,Postprocessor/Slice' \
--saved_model_tags=serve \
./saved_model \
./web_model
Это должно устранить вашу ошибку rank of tensors[23] must be the same as the rank of the rest (1)
.
Но теперь вы этого не делаетеУ вас есть постобработка в вашей модели, поэтому вам нужно сделать это прямо в вашем коде JavaScript.
2.Используется один класс NonMaxSuppression
Идея состоит в том, чтобы оставить только «лучшие» ящики и выполнить эту фильтрацию в js
Во-первых, вам нужно найти maxScores, см. Пример кода здесь
Тогда вам нужно будет использовать NonMaxSuppression , чтобы удалить все не макс. Оценки.
См. пример кода и документация
3.Выполняет операции NonMaxSuppression на бэкэнде ЦП
Примеры вы найдете в здесь и здесь с использованием setBackend function
Примечание: вЧтобы освободить память, вам нужно будет tf.dispose и tf.Tensor.dispose тензоров перед сменой бэкэнда