Обнаружение изображения с помощью MobileNet - PullRequest
5 голосов
/ 25 апреля 2019

Несколько способов переобучения MobileNet для использования с Tensorflow.js провалились для меня. Есть ли способ использовать переобученную модель с Tensorflow.js?

Как использование современного учебника на основе хаба, так и использование retrain.py, похоже, дают сбой.

а также некоторые другие открытые вопросы

Два верхних вопроса показывают код, который не удался в обоих случаях, оба не решены.

Целью является загрузка мобильной сети, переподготовка с использованием пользовательских данных и использование ее в Tensorflow.js. Следование обоим учебным пособиям кажется неудачным. Может ли это быть сделано внутри node.js? Есть ли другой способ? Где я допустил ошибки (или программное обеспечение не может использовать переобученные модели)? Как это может работать?

РЕДАКТИРОВАТЬ: последний выпуск github и еще один вопрос

Ответы [ 3 ]

2 голосов
/ 10 мая 2019

Python-скрипт retrain.py не генерирует сохраненную модель, он фактически генерирует замороженную модель графа. Вот почему вы не можете конвертировать его с помощью конвертера tfjs 1.x. Вам необходимо использовать tfjs 0.8.5 pip для конвертации. Кроме того, имя выходного узла отличается от графа модели мобильной сети, это «final_result» для переобученного графа.

Чтобы конвертировать его, вам нужно использовать tenorflowjs 0.8.5 pip:

  • используйте virtualenv для создания пустого окружения.
  • pip install tenorflowjs == 0.8.5
  • запустить конвертер
tensorflowjs_converter \
  --input_format=tf_frozen_model \
  --output_node_names='final_result' \
  --output_json=true /tmp/output_graph.pb \ /tmp/web_model

Это должно дать вам что-то вроде следующего:

ls /tmp/web_model/
group1-shard10of21  group1-shard14of21  group1-shard18of21  group1-shard21of21  group1-shard5of21  group1-shard9of21
group1-shard11of21  group1-shard15of21  group1-shard19of21  group1-shard2of21   group1-shard6of21  model.json
group1-shard12of21  group1-shard16of21  group1-shard1of21   group1-shard3of21   group1-shard7of21
group1-shard13of21  group1-shard17of21  group1-shard20of21  group1-shard4of21   group1-shard8of21
1 голос
/ 16 июля 2019

Я столкнулся с той же проблемой, и кажется, что мы используем неправильный метод. Существуют loadGraphModel для моделей, преобразованных в TF, и loadLayersModel для моделей Keras. мой комментарий о проблеме

1 голос
/ 28 мая 2019

Чтобы использовать последние TFjs:

python retrain.py --tfhub_module https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/feature_vector/2 \
    --image_dir /tmp/flower_photos --saved_model_dir /tmp/saved_retrained_model
tensorflowjs_converter --input_format=tf_saved_model \
    --output_format=tfjs_graph_model \
    --saved_model_tags=serve \
    /tmp/saved_retrained_model/ /tmp/converted_model/

создает файл model.json. Команда описана в https://github.com/tensorflow/tfjs-converter#step-1-converting-a-savedmodel-keras-h5-tfkeras-savedmodel-or-tensorflow-hub-module-to-a-web-friendly-format.

Тем не менее, загрузка модели с tf.loadLayersModel("file:///tmp/web_model/model.json") не удалась с

'className' и 'config' должны быть установлены.

...