Я могу воспроизвести проблему, используя вашу пользовательскую модель и исходный код. Спасибо за их предоставление.
Основная проблема заключается в том, что ваша нестандартная модель detect.tflite
имеет выходной spe c, который отличается от ожидаемого приложением примера обнаружения объектов.
Вы можно увидеть разницу с помощью визуализатора модели, такого как netron .
Исходная модель, используемая в примере приложения (mobilenet_ssd), выглядит следующим образом:
Как видите, имеется 4 скалярных выхода float32, которые по существу отделены от последнего узла TFLite_Detection_PostProcess
.
С другой стороны, ваша модель имеет единственный выходной тензор в форме [1,2535,7].
Итак, когда код Java приложения запускает tfLite.runForMultipleInputsOutputs(inputArray, outputMap)
, он пытается назначить несколько выходов на основе того, что вы поместили в outputMap
. Однако, поскольку в вашей модели есть только один тензор вывода, когда он пытается назначить вывод с индексом 1 в массив outputClasses
, он выдает сообщение об ошибке.
Я не знаю достаточно подробностей о модель yolov3, чтобы помочь вам с точной командой, используемой для преобразования модели, но это do c должно дать более подробную информацию о том, как была преобразована исходная модель.