图像分类/识别开源库

Posted

技术标签:

【中文标题】图像分类/识别开源库【英文标题】:Image classification/recognition open source library 【发布时间】:2012-04-22 20:20:29 【问题描述】:

我有一组参考图像(200 张)和一组这些图像的照片(数万张)。我必须以半自动的方式对每张照片进行分类。你会建议我使用哪个算法和开源库来完成这项任务?对我来说最好的办法是在照片和参考图像之间进行相似度测量,这样我就可以向操作员展示从最相似到最不相似的图像,以使她的工作更轻松。

为了提供更多背景信息,参考图片是品牌包装,照片是相同的包装,但有各种噪音:闪光灯的反射、弱光、不完美的透视等。照片已经(手动)分段:只有包是可见的。

在我从事图像识别的时代(比如 15 年前),我可能会尝试使用参考图像训练神经网络,但我想知道现在是否有更好的方法来做到这一点。

【问题讨论】:

【参考方案1】:

我建议您使用 Python,并使用 NumPy/SciPy 库进行数值工作。 Mahotas 库和 scikits.image 库是一些有助于处理图像的库。

此外,您还需要使用 scikits.learn,它是 Libsvm 的 Python 包装器,一个非常标准的 SVM 实现。

困难的部分是选择你的描述符。描述符将是您从每个图像计算的特征,旨在计算与参考图像集的相似性距离。一组很好的尝试是定向梯度直方图、SIFT 特征和颜色直方图,并尝试各种方法来组合图像的不同部分并将这些描述符连接在一起。

接下来,留出一些数据用于训练。对于这些数据,您必须根据它们所属的真实参考图像手动标记它们。您可以将这些标签输入 scikits.learn 中的内置函数,它可以训练多类 SVM 来识别您的图像。

之后,您可能想看看 MPI4Py,它是 Python 中 MPI 的一个实现,以便在对数以万计的剩余图像进行大型描述符计算和分类时利用多处理器。

您描述的任务非常困难,以高精度解决它很容易导致计算机视觉领域的研究级出版物。我希望我已经为您提供了一些起点:在 Google 上搜索上述任何概念都会找到有用的研究论文以及有关如何使用各种库的更多详细信息。

【讨论】:

谢谢;我目前在我的项目中使用 Ruby,但 Python 看起来是此类工作的更好选择。【参考方案2】:

对我来说最好的办法是在照片和参考图像之间进行相似性度量,这样我就可以向操作员展示从最相似到最不相似的图像,以使她的工作更轻松。

人们这样做的一种方法是使用所谓的“地球移动距离”。简而言之,将图像中的每个像素想象成一​​堆岩石,其高度对应于像素值,并将两个图像之间的距离定义为将一种岩石排列转移到另一种排列所需的最小工作量。

这方面的算法是当前的研究课题。这是一些matlab:http://www.cs.huji.ac.il/~ofirpele/FastEMD/code/。看起来他们也有一个java版本。这是原始论文和C代码的链接:http://ai.stanford.edu/~rubner/emd/default.htm

【讨论】:

【参考方案3】:

试试 Radpiminer(使用最广泛的数据挖掘平台之一,http://rapid-i.com)和 IMMI(图像挖掘扩展,http://www.burgsys.com/mumi-image-mining-community.php),AGPL 许可证。

它目前实现了几种相似度测量方法(不仅仅是简单的逐像素比较)。可以为学习算法(例如神经网络、KNN、SVM 等)输入相似性度量,并且可以对其进行训练以提供更好的性能。本文提供了有关这些方法的一些信息: http://splab.cz/wp-content/uploads/2012/07/artery_detection.pdf

【讨论】:

【参考方案4】:

目前基于深度学习的框架,如 TorchTensorflowTheanoKeras 是用于对象分类/识别任务的最佳开源工具/库。

【讨论】:

以上是关于图像分类/识别开源库的主要内容,如果未能解决你的问题,请参考以下文章

终于!全球首个「开源图像识别系统」上线了!

图像分类实战——使用DenseNet实现识别秃头(pytorch)

使用 C# 进行图像分类

图像分类实战——使用GoogLeNet识别动漫

利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

文献阅读笔记图像识别与分类