Вы можете использовать трансферное обучение, используя модель 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, то необходимо создать детектор.