使用javascript,我尝试使用ml5.jsVersion0.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));
}`从视频中添加图像。正在归还一些东西。想要提到的是,如果我不把视频传递给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岁以下的人一起训练,但仍然没有joy。
`this["regressor"].train(function (loss) {
console.log("training", loss);
});`这就是我看到堆叠痕迹的地方。我对ml、tensorflow.js和ml5js都很陌生。我一直在看类似的例子(https://www.openprocessing.org/sketch/565628)来完成这种类型的任务,但我发现文档缺乏。看上去是ml5js.org上的WIP。
任何帮助都将不胜感激!
忘了提了。上了火车,看到了那堆东西,我就能救出模型了。不知道这会不会对某人有任何帮助,但只是说说而已。似乎奇怪的是,火车会失败,但仍然会创造一个模型。
发布于 2020-05-15 18:24:56
好吧,我搞清楚了这里发生了什么。我在UI中加载了最新的ml5.js和tensorflow.js。结果显示,最近出现的tensorflow.js与ml5.js中的一些函数调用发生冲突。修复方法是将tensorflow.js降到1.0.0版。希望有一天这对其他人有帮助:)
https://stackoverflow.com/questions/61740410
复制相似问题