ml5.js дает: Не удается прочитать форму свойства undefined на featureExtractor.regression.train для видео (ML5.JS)

Используя javascript, я пытаюсь использовать ml5.js версии 0.5.0, чтобы определить, начинаю ли я, середина или конец видео. Да, я знаю, что могу сделать это другими способами, но я хотел бы сделать это с помощью ML. Так, например, я добавляю начальное изображение на 0, среднее изображение на длительность/2 и конечное изображение на длительность. Кажется, что добавление этих изображений работает, т.е. обратный вызов для добавления изображения не возвращает ошибку. Проблема, с которой я продолжаю сталкиваться, заключается в том, что когда я пытаюсь обучить () эти добавленные изображения, используя модель MobileNet в качестве моей базы, я получаю следующую трассировку стека:

`backend_webgl.ts:918 Uncaught (in promise) TypeError: Cannot read property 'shape' of undefined
    at t.fusedBatchMatMul (backend_webgl.ts:918)
    at tf-core.esm.js:17
    at engine.ts:462
    at t.scopedRun (engine.ts:404)
    at t.runKernel (engine.ts:459)
    at matMul_ (tf-core.esm.js:17)
    at Object.matMul (tf-core.esm.js:17)
    at bt (tf-layers.esm.js:17)
    at tf-layers.esm.js:17
    at engine.ts:393`

Я не делаю ничего впечатляющего при настройке мл5:

загрузка модели и создание регрессии:

`this["mlsExtractor"] = ml5["featureExtractor"]('MobileNet', this.extractorLoaded.bind(this));`
`extractorLoaded() {
        var video = getVideo();
        console.log("extractor loaded...");
          this["regressor"] = this["mlsExtractor"].regression(video, function () {
            console.log("ml5 regressor loaded...");
            this["mlsloaded"] = true;
        }.bind(this));
    }`

Добавьте изображения из видео. Рес что-то возвращает. Хотел отметить, что если я не передаю видео в addImage, я получаю сообщение об ошибке о неправильном размере изображения. Не уверен, связано это или нет.

`var video = this.getVideo();

        if (this["mlsloaded"] && this["regressor"]) {
            this["regressor"].addImage(video, 'finish', function (err, res) {
                if(err){
                    console.log("error", err);
                    return;
                }
                console.log("res", res)
            });
        }else{
            console.log("ml5 not loaded yet...")
        }`

После того, как я добавил как минимум 3 или более изображений, я нажимаю кнопку поезда. Я заметил, что меньше 2 также дает ошибки, поэтому я пробовал тренироваться до 30, и все равно не получалось.

`this["regressor"].train(function (loss) {
                console.log("training", loss);
            });`

Вот где я вижу эту трассировку стека. Я новичок в ml, tensorflow.js и ml5js. Я просматривал похожие примеры (https://www.openprocessing.org/sketch/565628) выполняю задачу такого типа, но мне не хватает документации. Похоже, WIP на ml5js.org.

Любая помощь приветствуется!

Забыл упомянуть. После нажатия на поезд и просмотра трассировки стека я могу сохранить модель. Не уверен, что это поможет кому-то, но просто выложу это там. Как то странно, что поезд провалится, но все равно создаст модель.


person TanCtIo    schedule 11.05.2020    source источник
comment
Также, если у кого-то есть сила, можно ли создать тег ml5js? В настоящее время этот тег не существует, и у меня нет представителя для создания. Спасибо!   -  person TanCtIo    schedule 12.05.2020


Ответы (1)


Итак, я понял, что здесь происходит. У меня были загружены последние версии ml5.js и tensorflow.js в мой пользовательский интерфейс. Оказывается, последний из tensorflow.js вызывает конфликты с некоторыми вызовами функций в ml5.js. Исправление для этого состояло в том, чтобы понизить класс tensorflow.js до версии 1.0.0. Надеюсь, это поможет кому-то еще когда-нибудь :)

person TanCtIo    schedule 15.05.2020