使用 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。
任何帮助表示赞赏!
忘了提。在点击火车并看到堆栈跟踪后,我能够保存模型。不确定它是否对某人有任何帮助,但只是把它放在那里。火车会失败但仍然创建模型似乎很奇怪。