TensorFlow.js - Использование предварительно обученной сети ResNet50 - PullRequest
0 голосов
/ 23 января 2019

Я создал нейронную сеть, используя TensorFlow через Keras API в Python, которая использует предварительно обученную сеть ResNet50, чтобы иметь возможность классифицировать 133 различных породы собак.

Теперь я хочу иметь возможность развернуть эту модельтак что его можно использовать через TensorFlow.js, однако у меня возникают трудности с получением ResNet50 для работы.Я могу без проблем перенести созданный мной с нуля NN в TensorFlow.js, но перенести его с помощью предварительно обученной сети не так просто.

Вот код Python, который япытаюсь приспособиться:

from keras.applications.resnet50 import ResNet50
ResNet50_model = ResNet50(weights="imagenet") # download ImageNet challenge weights

def extractResNet50(tensor): # tensor shape is (1, 224, 224, 3)
    return ResNet50(weights='imagenet', include_top=False, pooling="avg").predict(preprocess_input(tensor))

def dogBreed(img_path):
    tensor = convertToTensor(img_path) # I can do this in TF.js already with no issue

    resnetTensor = extractResNet50(tensor) # tensor returned in shape (1, 2048)
    resnetTensor = np.expand_dims(resnetTensor, axis=0) # repeat this line 2 more times to get shape (1, 1, 1, 1, 2048)

    # code below I can convert to TF.js without issue
    prediction = model.predict(resnetTensor[0])

Как бы я преобразовал все выше, кроме строк кода 1 и 4 из dogBreed(), для использования в TensorFlow.js?

1 Ответ

0 голосов
/ 23 января 2019

Resnet - такая большая сеть, что она еще не была импортирована в браузер, и я сомневаюсь, что это когда-нибудь произойдет.По крайней мере, это не так для последней версии tenorflowJs ( версия 0.14 )

С другой стороны, вы можете сохранить модель Python keras, а затем импортировать замороженную модель.на Js для прогноза.

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

1 - Вместо двух отдельных архитектур в Python создайте только одну сеть, используя тензор потока напрямую, а не керасы.Тогда замороженная модель будет содержать Resnet.Это может не работать должным образом в браузере, так как размер Resnet довольно большой (я сам не проверял)

2 - Вместо использования Resnet в браузере, рассмотрите возможность использования coco-ssd или mobilenet, которыеможно использовать в браузере в качестве функции извлечения.Вы можете увидеть, как их использовать на официальном репо 1014 *

...