Как я могу загрузить / переобучить / сохранить ssd_inception_v2_coco на tenorflow.js? - PullRequest
0 голосов
/ 27 февраля 2019

ML / Tensorflow новичок.

Может ли какая-либо из этих уже обученных моделей быть загружена в tfjs и переподготовлена ​​там, затем экспортирована в Загрузки, или Tensorflow Python - единственный путь?

Я вижу, что этот процесс хорошо описан и задокументирован в этом учебном пособии для Tensorflow Python, но, к сожалению, я не могу найти какую-либо документацию / учебное пособие для переобучения модели обнаружения объектов в браузере с помощью tfjs (классификация изображенийда, обнаружение объекта нет).

Я вижу, как я могу загрузить модель coco-ssd с помощью npm, а затем даже запустить ее сохранение в загрузках, но как насчет:

  • configфайл (нужно изменить его, потому что я хочу, чтобы у меня был только один класс, а не 90)
  • аннотированные изображения (как .jpg, .xml и .csv)
  • tags.pbtxt
  • .record files

Есть ли способ пройти процесс переподготовки модели ssd, такой как ssd_inception_v2_coco, и я не нажимаю правильные ключевые слова Google или это просто не pвозможно в текущем состоянии рамки?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать трансферное обучение, используя модель coco-ssd в качестве экстрактора возможностей.Пример трансферного обучения можно увидеть здесь .

Вот модель, которая извлекает объекты, используя экстрактор функций в качестве входных данных для новой последовательной модели.

const loadModel = async () => {
  const loadedModel = await tf.loadModel(MODEL_URL)
  console.log(loadedModel)
  // take whatever layer except last output
  loadedModel.layers.forEach(layer => console.log(layer.name))
  const layer = loadedModel.getLayer(LAYER_NAME)
  return tf.model({ inputs: loadedModel.inputs, outputs: layer.output });
}
loadModel().then(featureExtractor => {
  model = tf.sequential({
    layers: [
      // Flattens the input to a vector so we can use it in a dense layer. While
      // technically a layer, this only performs a reshape (and has no training
      // parameters).
      // slice so as not to take the batch size
      tf.layers.flatten(
        { inputShape: featureExtractor.outputs[0].shape.slice(1) }),
      // add all the layers of the model to train
      tf.layers.dense({
        units: UNITS,
        activation: 'relu',
        kernelInitializer: 'varianceScaling',
        useBias: true
      }),
      // Last Layer. The number of units of the last layer should correspond
      // to the number of classes to predict.
      tf.layers.dense({
        units: NUM_CLASSES,
        kernelInitializer: 'varianceScaling',
        useBias: false,
        activation: 'softmax'
      })
    ]
  });
})

Чтобы обнаружить один объект из 90 классов coco-ssd,можно просто использовать условный тест для предсказания coco-ssd.

const image = document.getElementById(id)

cocoSsd.load()
  .then(model => model.detect(image))
  .then(prediction => {
if (prediction.class === OBJECT_DETECTED) {
  // display it the bbox to the user}
})

Если класс не существует в coco-ssd, то необходимо создать детектор.

...