tensorflow - 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 的最后一个项目,恐慌开始蔓延......非常感谢!
解决方案
尽管视频在技术上是由单个帧组成的,但它有一个重要的事情是这些帧以帧序列的形式存在。您的模型表现不佳,因为您训练它一次在单个帧上表现良好。在处理视频数据时,您应该使用 CONV(用于空间特征)和 LSTM(用于时间特征)。
在您的情况下,您可以做的是对 K 个预测实施滚动预测,即,一帧的预测是对一定数量的预测的平均预测。
推荐阅读
- python - 在烧瓶中使用 matplotlib.figure 重叠标题和标签
- postgresql - ErrorException pg_query():查询失败:错误:关系“5432posts”不存在第 2 行:来自“5432posts”
- rxjs - 单个和多个 .pipe 之间的区别
- numpy - 修改numpy数组的形状
- rust - 如何在 Rust 中使用前导零将十进制转换为 16 位二进制
- python - Concurrent.futures + requests_html's render() = "线程 'ThreadPoolExecutor-0_0' 中没有当前事件循环。"
- c - 将结构传递给方法并使用 scanf_S 进行评估
- azure-logic-apps - APIM 和 Logic App 通过 REST API 读取文件
- html - 如何通过@media 更改 div 内组件的高度?
- c++ - 使用指针取值出错,但是直接返回是正确的,为什么?