首页 > 解决方案 > Tensorflow.js 中的 Keras 模型:对图像的预测很好但对视频的预测很糟糕?

问题描述

我已将自定义 Keras 模型转换为适用于 Tensorflow.js 的 layersModel。我通过上传图像并在上传完成后调用预测来测试模型。预测片段:

let img = document.getElementById('image')
let offset = tf.scalar(255)
let tensorImg = tf.browser.fromPixels(img).resizeNearestNeighbor([224,224]).toFloat().expandDims();
let tensorImg_scaled = tensorImg.div(offset)
prediction = await model.predict(tensorImg_scaled).data();

使用此代码,我的预测遵循原始模型,置信度值不断变化,就像它们应该的那样。但是,我的意图是每秒分析网络摄像头提要。每秒调用一个包含此代码的函数:

const video = document.querySelector("video");
let offset = tf.scalar(255)
let tensorImg = tf.browser.fromPixels(video).resizeNearestNeighbor([224,224]).toFloat().expandDims();
let tensorImg_scaled = tensorImg.div(offset)
prediction = await model.predict(tensorImg_scaled).data();

对于视频,我得到了糟糕的结果,其中预测总是类似于 Float32Array(3) [6.18722574920633e-16, 1, 3.5979095258653615e-8] - 中间置信度值始终为 1 或 0,9999。

这里可能是什么问题?很少调用视频预测片段 - 比如每 5 秒 - 没有帮助。

非常感谢任何有关视频预测的帮助 - 这是 uni 的最后一个项目,恐慌开始蔓延......非常感谢!

标签: tensorflowkerastensorflow.js

解决方案


尽管视频在技术上是由单个帧组成的,但它有一个重要的事情是这些帧以帧序列的形式存在。您的模型表现不佳,因为您训练它一次在单个帧上表现良好。在处理视频数据时,您应该使用 CONV(用于空间特征)和 LSTM(用于时间特征)。

在您的情况下,您可以做的是对 K 个预测实施滚动预测,即,一帧的预测是对一定数量的预测的平均预测。


推荐阅读