原文:Image Classification in 5 Methods
作者:Shiyu Mou
翻译:何冰心
图像分类,顾名思义,是一个输入图像,输出对该图像内容分类的描述的问题。它是计算机视觉的核心,实际应用广泛。
图像分类的传统方法是特征描述及检测,这类传统方法可能对于一些简单的图像分类是有效的,但由于实际情况非常复杂,传统的分类方法不堪重负。现在,我们不再试图用代码来描述每一个图像类别,决定转而使用机器学习的方法处理图像分类问题。
目前,许多研究者使用CNN等深度学习模型进行图像分类;另外,经典的KNN和SVM算法也取得不错的结果。然而,我们似乎无法断言,哪种方法对于图像分来问题效果最佳。
本项目中,我们做了一些有意思的事情:
- 将业内普遍用于图像分类的CNN和迁移学习算法与KNN,SVM,BP神经网络进行比较。
- 获取深度学习经验。
- 探索谷歌机器学习框架TensorFlow。
下面是具体实施细节。
系统设计
在本项目中,用于实验的5种算法为KNN、SVM、BP神经网络、CNN以及迁移学习。我们采用如下三种方式进行实验
- KNN、SVM、BP神经网络是我们在学校能够学到的。功能强大而且易部署。所以第一步,我们主要使用sklearn实现KNN,SVM,和BP神经网络。
- 由于传统的多层感知机模型在图像识别方面效果甚佳,但由于其节点间的全连接模式对于其延展性造成了阻碍,因此对于高分辨率的图像,识别率不是很理想。所以这一步,我们用Google TensorFlow框架构建CNN。
- 对于已经预训练过的深度神经网络Inception V3进行重训练。Inception V3由TensorFlow提供,使用ImageNet自2012年以来的数据进行训练。ImageNet是计算机视觉领域一个经典挑战,参赛者试图用模型将全部图像放至1000个分类中。为了要重新训练已经预训练好的模型,我们必须保证我们自己的数据集没有被预训练过。
实施
第一种方法:使用sklearn预处理数据以及实现KNN,SVM和BP神经网络。
- 步骤1,使用openCV包,定义2个预处理函数,分别是图像特征向量(用来调整图像大小并将图像扁平化成一系列行像素)和提取颜色直方图(使用cv2.normalize从HSV色域中提取一个3D颜色直方图并做平滑处理)。
- 步骤2,构造参数。由于我们试图在整个数据集以及具有不同类别数目的子数据集上进行性能测试,所以我们把各个数据集看作为参数,以便进行实验分析。另外,我们