Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?

Posted

技术标签:

【中文标题】Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?【英文标题】:Tensorflow: how can I detect handwriting numbers in an image if I have a trained MNIST model? 【发布时间】:2022-01-19 12:47:06 【问题描述】:

我已经通过示例代码使用 MNIST 数据集训练了一个模型 https://keras.io/examples/vision/mnist_convnet/

我有一张图片,其中包含多个手写数字和其他字符,大小不同,颜色也不同。

我想使用训练好的模型检测手写数字(0-9),并在每个数字周围绘制一个边界矩形。

有可能吗?任何建议表示赞赏。 我的环境:tensorflow 2.7 + python 3。使用的是Keras。

【问题讨论】:

您将需要构建一个对象检测器。这是关于此事的link to a good tutorial。 @tromgy 非常感谢 【参考方案1】:

因为您的输出层如下所示: (Dense) (None, 10) 16010 你定义了你的类: num_classes = 10

你使用 pred = model.predict(image) 其中 image 是您的图像。

请注意,您的图像需要形状 = (28, 28, 1) 所以它的x值为28,y值为28,颜色通道为1 =(灰度)。 您需要将图像转换为 numpy 数组。

它会给你一个数组,其中最大的数字是你的数字的结果。

喜欢:[0.2, 0.4, 0.9, 0.1, 0.3, 0.3, 0.5, 0.6, 0.6, 0.2]

所以在这种情况下,数字将是 2

如果你真的想在它周围画一个盒子,你需要一个更复杂和耗时的物体检测器。

【讨论】:

可以将我的图像传递给模型吗?我的图像包含许多数字和其他字符,而不是单个数字。 不,解决这个问题的唯一方法是扫描图像,使用 28 x 28 的矩阵,但是如果你这样做,结果是不可靠的,所有的问题,你会遇到已经被物体检测器解决了。您可以尝试的是,使用图像处理,例如opencv 对数字进行聚类,然后将帧传递给模型。

以上是关于Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 如何使用多个 GPU 进行单独训练?

在 Keras/Tensorflow 中实现可训练的广义 Bump 函数层

使用相同的图在 TensorFlow 中显示训练和验证的准确性

在 tensorflow 训练和测试中显示不同的结果

如何使用 TensorFlow 训练 70k 图像

tensorflow训练好的模型,怎么调用?