0

使用 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`

配置 ml5 时我没有做任何令人印象深刻的事情:

加载模型并创建回归:

`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));
    }`

从视频中添加图像。Res 正在返回一些东西。想提一下,如果我不将视频传递给 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)执行此类任务,但我发现缺少文档。看起来是 ml5js.org 上的 WIP。

任何帮助表示赞赏!

忘了提。在点击火车并看到堆栈跟踪后,我能够保存模型。不确定它是否对某人有任何帮助,但只是把它放在那里。火车会失败但仍然创建模型似乎很奇怪。

4

1 回答 1

0

好的,所以我知道这里发生了什么。我将最新的 ml5.js 和 tensorflow.js 都加载到我的 UI 中。事实证明,最新的 tensorflow.js 与 ml5.js 中的一些函数调用发生冲突。解决此问题的方法是将 tensorflow.js 降级到版本 1.0.0。希望有一天这对其他人有所帮助:)

于 2020-05-15T18:24:56.273 回答