识别图像上的内容
Recognize what is on image
我正在用神经网络做一个小项目。我读过有关数字识别的内容,使用 MNIST 数据集,并考虑是否可以制作相同的数据集,但使用我们每天看到的常规对象。
所以这是算法(如果我们可以这样说的话):
python 的 opencv 库全部完成
1)从图像中获取轮廓。这不是字面上的轮廓,而是看起来如此的东西。
我用这段代码完成了这个:
def findContour(self):
gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
self.image = cv2.Canny(gray, 30, 200)
2) 接下来需要创建训练集。
我复制并编辑此消息。改变旋转并翻转它——现在我们有大约 40 张图像,它们由旋转的轮廓组成。
3) 现在我要把这些图像转储到一个 csv 文件中。
这些图像表示为 3D 数组,因此我使用 numpy 中的 .flatten 函数将它们展平。接下来这个展平向量被写在csv文件中,标签作为最后一个字符
这就是我所做的,想问一下:会成功吗?
接下来我想使用除最后一个元素之外的所有元素作为输入 x 向量,最后一个元素作为 y 向量。 (喜欢here)
识别将以相同的方式完成:我们获取图像的轮廓,并将其提供给神经网络,输出将是标签。
有没有可能,或者最好不要尝试?
有足够的实验空间。但是,除非作为学习练习,否则您不应该重新发明轮子。研究范例,了解已经存在的内容,然后进行自己的轮子改进。
我强烈建议您从 CNN(卷积神经网络)中的图像识别开始。 ILSVRC 2012 图像数据集(a.k.a.ImageNet 文件)已经完成了许多精彩的工作。事实上,今天的 NN 流行很大一部分来自 Alex Krizhevsky 的突破(产生了 AlexNet,第一个赢得 ILSVRC 的 NN)和随之而来的拓扑结构(ResNet、GoogleNet、VGG 等)。
简单的答案是让您的网络 "decide" 原始照片中的重要内容。当然,将图像展平并为其提供轮廓,但如果对原始图像进行训练 运行 产生更好的结果,请不要感到惊讶。
在 "Image Recognition introduction" 上搜索资源并选择一些符合您当前阅读和主题兴趣的匹配项。那里有很多好东西。
当您开始编写自己的模型时,我强烈建议您使用现有的框架,而不是从头开始构建所有附属品。转储 CSV 格式;有更好的预打包 I/O 例程和大量支持。这个想法是让你设计你的网络,而不是一直操纵数据。
流行的框架包括 Caffe、TensorFlow、Torch、Theano 和 CNTK 等。到目前为止,我发现 Caffe 和 Torch 具有最简单的整体学习曲线,尽管它们之间的差异并不大,以至于我通常 推荐 一个优于另一个。寻找在您感兴趣的领域中具有良好文档和示例的文档。
我正在用神经网络做一个小项目。我读过有关数字识别的内容,使用 MNIST 数据集,并考虑是否可以制作相同的数据集,但使用我们每天看到的常规对象。 所以这是算法(如果我们可以这样说的话): python 的 opencv 库全部完成 1)从图像中获取轮廓。这不是字面上的轮廓,而是看起来如此的东西。 我用这段代码完成了这个:
def findContour(self):
gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
self.image = cv2.Canny(gray, 30, 200)
2) 接下来需要创建训练集。 我复制并编辑此消息。改变旋转并翻转它——现在我们有大约 40 张图像,它们由旋转的轮廓组成。 3) 现在我要把这些图像转储到一个 csv 文件中。 这些图像表示为 3D 数组,因此我使用 numpy 中的 .flatten 函数将它们展平。接下来这个展平向量被写在csv文件中,标签作为最后一个字符
这就是我所做的,想问一下:会成功吗? 接下来我想使用除最后一个元素之外的所有元素作为输入 x 向量,最后一个元素作为 y 向量。 (喜欢here)
识别将以相同的方式完成:我们获取图像的轮廓,并将其提供给神经网络,输出将是标签。
有没有可能,或者最好不要尝试?
有足够的实验空间。但是,除非作为学习练习,否则您不应该重新发明轮子。研究范例,了解已经存在的内容,然后进行自己的轮子改进。
我强烈建议您从 CNN(卷积神经网络)中的图像识别开始。 ILSVRC 2012 图像数据集(a.k.a.ImageNet 文件)已经完成了许多精彩的工作。事实上,今天的 NN 流行很大一部分来自 Alex Krizhevsky 的突破(产生了 AlexNet,第一个赢得 ILSVRC 的 NN)和随之而来的拓扑结构(ResNet、GoogleNet、VGG 等)。
简单的答案是让您的网络 "decide" 原始照片中的重要内容。当然,将图像展平并为其提供轮廓,但如果对原始图像进行训练 运行 产生更好的结果,请不要感到惊讶。
在 "Image Recognition introduction" 上搜索资源并选择一些符合您当前阅读和主题兴趣的匹配项。那里有很多好东西。
当您开始编写自己的模型时,我强烈建议您使用现有的框架,而不是从头开始构建所有附属品。转储 CSV 格式;有更好的预打包 I/O 例程和大量支持。这个想法是让你设计你的网络,而不是一直操纵数据。
流行的框架包括 Caffe、TensorFlow、Torch、Theano 和 CNTK 等。到目前为止,我发现 Caffe 和 Torch 具有最简单的整体学习曲线,尽管它们之间的差异并不大,以至于我通常 推荐 一个优于另一个。寻找在您感兴趣的领域中具有良好文档和示例的文档。