预处理图像数据以根据形状对对象进行分类

数据挖掘 神经网络 分类 喀拉斯 图像分类 预处理
2022-02-08 21:34:07

目前,我正在尝试构建一个神经网络,该网络能够仅根据形状对图像上不同类型的瓶子进行分类。瓶子没有标签,起初我只用啤酒和葡萄酒瓶。我的目标是将使用特征提取的神经网络与使用原始图像的神经网络进行比较。

示例输入图像:

https://i.gyazo.com/c22151a4bee6146cc689fcb8358483dd.jpg

使用openCV处理图像,我尝试只获取瓶子的边缘并根据形状对类型进行分类。目前,我收到以下图像结果:

https://i.gyazo.com/8554b06ebf6e8bd520d11222f70c77c5.png

在下一步中,我裁剪了图像中的每个瓶子并将它们拆分为二维数组(通常我尝试使用 30x50,但在此图像中我使用 10x20 显示它)

https://i.gyazo.com/28fb1bc0fa8d61b185ed2245db222cc8.png

对于每个图块,我执行 PCA 以提取特征向量。最后,我收到一个 10x20 瓷砖的矩阵,其中每个瓷砖都包含线条的方向。如您所见, (0.0, 1.0) 元组是垂直线, (1.0, 0.0) 元组是水平线。

https://i.gyazo.com/bcd291535ea01b6392ab6aef6747de9d.png

对不起,很长的帖子,这是我的问题:

是否可以使用这些数据在葡萄酒和啤酒瓶之间进行分类?瓶颈的形状不同,但是否代表构建神经网络?我试图通过计算梯度(来自元组的 arctan)来训练模型,但我没有设法获得一些成功的结果。有谁知道如何预处理神经网络的数据?

使用裁剪后的瓶子图像作为神经网络的图像数据会更好吗?

我很感谢任何帮助,因为这是我的第一个机器学习项目,我真的很想让它工作。

1个回答

好吧,您正在尝试通过主要的线方向来描述图像,这听起来确实很公平,但是工作量太大了。如果你愿意,你可以尝试一些数据增强来增加你的样本数量(主要是仿射变换)

其他可能有用的功能将是描述符,例如:

  • 冲浪
  • 快速地
  • 简短的

您可以尝试使用其他几何函数来描述这些形状,例如偏度(填充形状的内部,考虑特征值来定义 PCA 上的主轴方向)

最后,示例图像中的瓶子看起来形状相似,主要在大小上有所不同,如果您的模型使用调整大小,它可能会变得比例不变,然后您的方法会减少太多形状信息并给出不好的结果。

-------------------------------------------------- ----------------------------------

回复下面的评论:

这就是为什么我尝试用裁剪出每个瓶子并将它们分成二维瓷砖阵列(例如50x20)的方法来做到这一点

这会为您的模型插入比例不变性,这对于图像大小因距离或相机分辨率而变化的过程很有用.