作为初学者:图像处理的训练数据的形式是什么

人工智能 机器学习 图像识别 训练 知识表示
2021-10-24 10:36:32

我们在图像处理培训中所做的事情。我们正在存储某种形式的数据,这些数据将作为系统的知识或经验。

  • 系统可以以哪种形式存储它的训练数据?

例如,通过手写识别,我们可以将数字表示为曲线和直线的组合。对于每一轮训练,识别系统都会存储数据。数据通常存储在平面文件(如 txt)还是数据库中?

我在Tesseract OCR中看到有一个文本文件存储 x0,y0,x1,y1。它们是代表训练图像上具有图片的正方形的像素点。

我需要一种有效的机器学习知识形式,并希望得到建议、上下文或对不同方法优缺点的解释。

我需要一种存储在系统中的知识形式。人脑将“7”评估为“水平线和垂直左交叉线从水平线的右侧开始”。就像那台机器必须有一些概念数据来代表他们的知识。

2个回答

您的问题在很大程度上取决于您用于机器学习的方法。听起来您想从图像中提取某些特征,例如“曲线和直线”,并将它们用作训练数据。这个提取步骤通常不被认为是训练过程的一部分,而是预处理的一部分。在预处理过程中,您读取图像、提取某些特征或执行一些转换并将新数据存储为您的实际训练样本或立即将它们用于训练而无需中间存储。如果您想多次使用图像进行训练并且希望在未来的训练周期中跳过预处理步骤,通常存储此信息是一个好主意。

比较文件存储和数据库存储

您如何存储处理过的数据以进行训练相对独立于机器学习的应用,并且适用于数据存储的一般原则。将数据存储在平面文件中通常非常方便,因为磁盘存储很容易获得,并且用于存储和读取文件的 API 是您的编程语言和操作系统的一部分。数据库为您的架构增加了额外的复杂性,但它当然也有好处,特别是如果您想让训练数据可用于其他实例或不同的学习引擎。如果您正在处理大量数据,则结构良好的数据库可以帮助您更好地组织数据并提供有用的功能来有效地处理这些数据。

请记住,您的 AI 的实际训练最初是进行的,一旦完成,您就可以在没有所有训练数据的情况下推出您的 AI。因此,您只需要在应用程序生命周期的有限时间内处理训练数据。训练的速度通常不是很重要,因为它只发生一次,而不是在 AI 的日常使用过程中发生。因此训练过程中文件访问的速度可以忽略不计。

结论

总之,对于大多数应用程序,仅使用平面文件的简单实现就足够了。如果您想将每个样本存储在一个单独的文件中或将它们打包成更大的批次并使用一些元信息来识别文件中的各个样本,则更多的是品味问题,而不是真正的技术相关性。

训练后存储数据

从您的问题来看,您听起来好像总体上了解机器学习。只是为了澄清初学者的一个潜在误解 - 您不必在训练后将任何“学习”信息存储为数据,因为每个训练步骤只是适应神经网络中的权重和偏差。如果您在未来的训练周期中不需要它,则可以在成功训练后丢弃实际的训练数据。

更多信息/参考

为了完成我的回答,我想推荐斯坦福大学关于 CNN 和视觉识别的当前课程(日期为 2017 年春季)。它是实现用于图像识别的神经网络的重要信息来源。

我认为 Demento 已经很好地回答了它,但可能下面可以为您增加一些理解。

[1] 通常为图像处理存储的数据与图像像素密度有关(根据我在线访问的许多课程),可以使用像素密度值矩阵很好地维护它,对应于每个图像的分辨率。然后它取决于图像的色谱(是彩色还是灰度);根据手写文本识别的情况,您实际上并不需要彩色图像的像素值。

考虑一下,如果你有一个彩色图像,那么你必须存储每个像素的 RGB 值,从而使矩阵大小增加三倍,并且只用灰度值就可以很好地完成训练,因此最好将所有的在预处理步骤中将图像转换为灰度,并且在您实际使用经过训练的网络识别图像时还要注意将图像转换为灰度(只是新手错误!)。

根据像素密度值所需矩阵形式的存储,平面文件存储就足够了,但我会推荐库如果在 python 或其他替代方案中工作),如pandasnumpy为这些库提供了强大的数据管理和检索解决方案。

有关更多详细信息 - https://docs.scipy.org/doc/numpy-dev/user/quickstart.html https://github.com/pandas-dev/pandas

[2] 现在我要强调为什么不使用任何数据库(DB)来存储这些信息。首先,它的集成只会给您训练网络的工作带来不必要的开销,而且当您想要识别图像(它始终是它的图像像素密度的单个矩阵形式)时,您将需要连接到同一个数据库,还需要先插入它,以便脚本能够从那里提取并进行识别(不推荐)。

有一个我们并不真正关心的事实是训练图像数据集的质量,我们确实忽略了数据集中存在的噪声如果使用预处理的标准数据集,例如 MNIST http://yann. lecun.com/exdb/mnist/),但是如果创建自己的数据集,我们必须在预处理任务本身中考虑噪声并相应地进行纠正。

噪声是指像素密度信息的丢失或重叠,这通常会给图像增加模糊效果,并且会严重破坏训练指标。为了克服它,有一些方法可以使用先前的学习方法来纠正像素值,例如从混淆图像中提取数据,请参阅链接 - https://arxiv.org/pdf/1609.00408.pdf

在上述情况下,即使在开始训练网络之前,您也需要在预处理任务中为非常单一的记录在数据库中进行更新,因此它可能会以多倍增加对数据库的总请求,从而阻碍使用的整体好处它首先

我想上面应该给你一个公平的想法,关于要存储的数据类型和相应的数据存储。我使用 MNIST 数据集使用 NN Pipeline 计算出数字分类,以参考https://github.com/kchopra456/Digit-Classification-and-Image-Obfuscation-ANN