图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证.doc
《图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证.doc》由会员分享,可在线阅读,更多相关《图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证.doc(10页珍藏版)》请在三一文库上搜索。
1、图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证本文为你介绍图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证。图像分类问题就是从固定的一组分类中,给输入图像分配标签的任务。这是计算机视觉的核心问题之一,尽管它看似简单,却在实际生活中有着各种各样的应用。传统方式:功能描述和检测。也许这种方法对于一些样本任务来说是比较好用的,但实际情况却要复杂得多。因此,我们将使用机器学习来为每个类别提供许多示例,然后开发学习算法来查看这些示例,并了解每个类的视觉外观,而不是试图直接在代码中指定每一个大家感兴趣的类别是什么样的。然而,图像分类问题就是一个非常复杂的工作,它总是借用诸如卷积神
2、经网络(CNN)这样的深度学习模型来完成。但我们也知道,通常我们在课堂中学习到的,诸如KNN(邻近算法)和SVM(支持向量机)这样的许多算法,在数据挖掘问题上做得非常好,但似乎它们有时也不是图像分类问题的最佳选择。因此,我们想要比较一下我们在课堂中学到的算法与CNN和迁移学习算法的性能。目标我们的目标是:将KNN、SVM和BP神经网络,与通常用于工业中图像分类问题的算法进行比较,例如CNN和迁移学习。获得深度学习的经验。通过Google的TensorFlow来探索机器学习框架。算法和工具我们在这个项目中使用的5种方法分别是KNN、SVM、BP神经网络、CNN,以及迁移学习。整个项目主要分为3种
3、方法。第一种方法:使用KNN、SVM和BP神经网络,这是我们在课堂上学到的算法,功能强大而且易于实施。我们主要使用sklearn来实现这些算法。第二种方法:虽然传统的多层感知器(MLP)模型成功地应用于图像识别,但由于节点之间的完全连通性受到维度灾难的影响,因此不能很好地扩展到更高分辨率的图像。所以在这一部分我们使用Google的TensorFlow深度学习框架来构建一个CNN。第三种方法:重新训练预先训练的深层神经网络的最后一层(称为Inception V3),同样也是由TensorFlow来实现。Inception V3是为ImageNet大型视觉识别挑战而进行的训练,数据从2012年开始
4、采集。这是计算机视觉中的标准任务,其中模型尝试将整个图像分为1000个类别,如“斑马”、“斑点狗”和“洗碗机”。为了重新训练这个预先训练网络,我们需要确保我们自己的数据集尚未被预先训练。如何实现第一种方法:预处理数据集,并用sklearn来运行KNN、SVM和BP神经网络。首先,我们使用openCV包定义了两种不同的预处理函数:第一个称为图像特征向量,调整图像大小,然后将图像平坦化为行像素列表。第二个称为提取颜色直方图,使用cv2.normalize从HSV颜色间距中提取3D颜色直方图,然后平坦化结果。然后,我们构造需要解析的几个参数,因为我们要测试这个部分的准确性,不仅是针对整个数据集的,还
5、要测试具有不同数量标签的子数据集,我们将数据集构造为解析到我们程序中的参数。与此同时,我们还构造了用于k-NN方法的相邻数作为解析参数。做好这些之后,我们开始提取数据集中的每个图像特征并将其放入数组中。我们使用cv2.imread来读取每个图像,通过从图像名称中提取字符串来拆分标签。在我们的数据集中,我们使用相同的格式设置名称:“类标签”.“图像号”.jpg,因此我们可以轻松地提取每个图像的类标签。然后我们使用之前定义的2个函数来提取2种特征,并附加到数组rawImages和特征中,而我们之前提取的标签则附加到数组标签。下一步是使用从sklearn包导入的函数train_test_split拆
6、分数据集。具有后缀RI、RL的集合是rawImages和标签对的拆分结果,另一个是特征和标签对的拆分结果。我们使用数据集的85作为训练集,15作为测试集。最后,我们运用KNN、SVM和BP神经网络函数来评估数据。对于KNN,我们使用KNeighborsClassifier;对于SVM,我们使用SVC;对于BP神经网络,我们使用MLPClassifier。第二种方法:使用TensorFlow构建CNN。TensorFlow的目的是让你构建一个计算图(使用任何类似Python的语言),然后用C +来执行图形操作,这比直接用Python来执行相同的计算要高效得多。TensorFlow还可以自动计算优
7、化图形变量所需的梯度,以便使模型更好地运行。这是因为图形是简单数学表达式的组合,因此可以使用导数的链式规则来计算整个图形的梯度。TensorFlow图由以下部分组成:用于将数据输入图表的占位符变量。要进行优化的变量,以便使卷积网络更好地得以运行。卷积网络的数学公式。可用于指导变量优化的成本衡量标准。一种更新变量的优化方法。CNN架构由不同层的堆叠形成,其通过可微函数将输入量转换成输出量(例如类别分数)。所以在我们的实现操作中,第一层是保存图像,然后我们构建了3个具有22最大池和修正线性单元(ReLU)的卷积层。输入是一个具有以下尺寸的四维张量:图像编号。每个图像的Y轴。每个图像的X轴。每个图像
8、的通道。输出是另一个四维张量,具有以下尺寸:图像号,与输入相同。每个图像的Y轴。如果使用的是22池,则输入图像的高度和宽度除以2。每个图像的X轴。同上。由卷积滤波器产生的通道。然后我们在网络末端构建了2个完全连接的层。输入是形状为num_images,num_inputs的2维张量。输出是形状为num_images,num_outputs的2维张量。然而,为了连接卷积层和完全连接层,我们需要一个平坦层,将4维张量减小到2维,从而可以用作完全连接层的输入。CNN的最后端始终是一个softmax层,它将来自全连接层的输出归一化,使得每个元素被限制在0和1之间,而所有元素总和为1。为了优化训练结果,
9、我们需要一个成本衡量标准,并尽量减少每次迭代。我们在这里使用的成本函数是交叉熵(从tf.nn.oftmax_cross_entropy_with_logits()调用),并对所有图像分类采用交叉熵的平均值。优化方法是tf.train.AdamOptimizer(),它是Gradient Descent的高级形式。这是一个调整的参数学习率。第三种方法:Retrain Inception V3物体识别模型有数百万个参数,可能需要几周才能完全训练。迁移学习是一种技术,可以通过为一组类别(如ImageNet)采用训练有素的模型来快速完成此项工作,并从新类别的现有权重中进行训练。虽然它不如全训练运行得那
10、么好,但对于许多应用来说,这是非常有效的,并且可以在笔记本电脑上运行,只要运行三十分钟即可,无需GPU。对于这部分的实现,我们可以按照下边的说明进行操作:https:/tensorflow/tutorials/image_retraining首先,我们需要获得预先训练的模型,删除旧的顶层,并在我们拥有的数据集上训练一个新的模型。在一个没有猫品种的原始ImageNet类中,要对完整的网络进行训练。迁移学习的神奇之处在于,经过训练以区分某些对象的较低层可以重用于许多识别任务,而无需任何更改。然后我们分析磁盘上的所有图像,并计算其中每个图像的瓶颈值(bottleneck values)。点击这里查看
11、bottleneck的详细信息(https:/tensorflow/tutorials/image_retraining)。每个图像在训练过程中被重复使用多次,所以计算每个瓶颈值都需要花费大量的时间,因此可以加快缓存这些瓶颈值,从而不必重复计算。该脚本将运行4000个训练步骤。每个步骤从训练集中随机选择十个图像,从缓存中发现其瓶颈,并将它们馈送到最后一层以获得预测。然后将这些预测与实际标签进行比较,从而通过反向传播过程更新最终层的权重。开始实验数据集牛津IIIT宠物数据集(http:/robots.ox.ac.uk/vgg/data/pets/)有25个品种的狗和12个品种的猫。每个品种有20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 分类 技术 总结 归纳 算法 实现 方式 进行 实验 验证
链接地址:https://www.31doc.com/p-3407840.html