使用卷积神经网络进行花朵识别2025年1月11日 | 阅读 8 分钟 引言鲜花一直是人类着迷和灵感的源泉。自然世界的美丽和多样性几个世纪以来一直在艺术、文学和科学中得到赞颂。随着机器学习和计算机视觉的进步,我们现在能够自动识别和分类不同种类的花卉。在这篇文章中,我们将讨论卷积神经网络 (CNN) 在花卉识别中的应用。 什么是卷积神经网络 (CNN)?卷积神经网络 (CNN) 是一种专门用于图像识别应用的特定类型的神经网络。它们由多个层组成,这些层协同工作以从图像中提取和学习特征。CNN 特别擅长识别图像中的模式,这使得它们非常适合对象识别、面部检测以及当然还有花卉识别等任务。 近年来,在计算机视觉领域,卷积神经网络 (CNN) 越来越受欢迎。它们是一种专门为图像识别任务设计的神经网络,但它们也可以用于其他类型的数据,例如音频和文本。 CNN 的基本设计由多个层组成,每个层都有特定的用途。通常,卷积层作为初始层。它将多个滤波器应用于输入图像以提取特征。滤波器是小的权重矩阵,它们在输入图像上滑动,每个滤波器生成一个输出,表示输入图像中特定特征的存在。 在卷积层之后,网络通常包括一个或多个池化层,这些层通过聚合相邻像素中的信息来减小输出的大小。因此,需要学习的参数更少,从而提高了网络的效率。 网络的最后一层,通常是全连接层,接收前一层的输出,并生成一个概率向量,显示输入所属的许多类别中每个类别的可能性。反向传播是一种使用损失函数相对于网络参数的梯度来更新权重的方法,以最小化损失。在训练过程中,反向传播用于调整卷积层中滤波器的权重和全连接层的权重。CNN 的优点之一是它们能够学习输入数据的分层表示,每一层学习比前一层更抽象的特征。这是因为网络早期层中的滤波器对边缘和角点等低级特征敏感,而后期层中的滤波器则 CNN 如何工作?要使 CNN 正常工作,输入图像必须通过几个卷积层。每个卷积层应用一组滤波器到输入图像,以识别各种特征,如边缘、角点和纹理。然后,将非线性激活函数(例如修正线性单元 (Relu))应用于每个卷积层的输出,以帮助将非线性引入网络并增强其学习复杂特征的能力。 在卷积层之后,网络通常包含一个或多个全连接层,用于将输入图像分类到几个类别之一。在训练期间,使用反向传播和梯度下降来更新卷积层中滤波器的权重以及完全连接层的权重,以训练网络识别输入图像的各种特征并对其进行适当分类。 使用 CNN 进行花卉识别花卉识别是一项具有挑战性的任务,原因在于花卉种类繁多,以及同一种类的不同个体之间外观上存在细微差异。然而,CNN 已被证明在此任务中非常有效,在多个基准数据集上取得了最先进的结果。 其中一个数据集是牛津花卉 102 数据集,其中包含 102 种不同花卉的图像。要在此数据集上训练用于花卉识别的 CNN,我们首先需要对图像进行预处理,以确保它们都具有相同的大小和格式。这很重要,因为 CNN 要求输入图像具有固定大小和通道数。图像预处理完成后,我们可以使用一种称为迁移学习的技术来训练 CNN。迁移学习涉及使用在大型数据集(例如 ImageNet)上预训练的 CNN,并针对我们的特定任务对其进行微调。其思想是,预训练的网络已经学会了识别许多对图像识别任务有用的不同特征,因此我们可以将其用作我们自己网络的起点。 为了微调用于花卉识别的预训练网络,我们需要将最终的全连接层替换为一个新的层,该新层具有与我们数据集中花卉种类数量相同的输出节点数。然后,我们可以使用一种称为随机梯度下降 (SGD) 的技术,在牛津花卉 102 数据集上训练网络。 数据集开发花卉识别系统的第一步是收集花卉图像数据集。有许多可用于花卉识别的数据集,包括牛津花卉数据集、花卉-102 数据集和 TACoS 多标签花卉数据集。在本文中,我们将使用花卉-102 数据集,该数据集包含 102 个花卉类别,每个类别有 20 到 258 张图像,总计 8,189 张图像。 花卉-102 数据集分为三个部分:训练集、验证集和测试集。训练集包含 6,149 张图像,验证集包含 1,020 张图像,测试集包含 2,020 张图像。该数据集可从 http://www.robots.ox.ac.uk/~vgg/data/flowers/102/index.html 下载。 CNN 架构用于花卉识别的 CNN 架构由多个层组成,包括卷积层、池化层和全连接层。卷积层的目的是提取输入图像的特征。池化层减少了卷积层输出的维度,从而降低了网络的计算复杂度。全连接层将输入图像分类到其中一个花卉类别中。 用于花卉识别的架构基于 VGG16 架构,这是一种用于图像识别任务的流行 CNN 架构。VGG16 架构由 13 个卷积层、5 个池化层和 3 个全连接层组成。 网络的输入是尺寸为 224x224x3 的 RGB 图像。前两个卷积层各有 64 个滤波器,核大小为 3x3,步长为 1。接下来的两个卷积层各有 128 个滤波器,核大小为 3x3,步长为 1。接下来的三个卷积层各有 256 个滤波器,核大小为 3x3,步长为 1。接下来的三个卷积层各有 512 个滤波器,核大小为 3x3,步长为 1。最后三个卷积层各有 512 个滤波器,核大小为 3x3,步长为 1。池化层出现在前两个卷积层之后,然后是每对后续的两个卷积层。池化大小为 2x2,步长为 2,池化级别为最大池化层。三个全连接层分别有 4096、4096 和 1024 个单元。最后一个全连接层的输出通过 softmax 激活函数,给出每个花卉类别的概率。 训练过程训练过程涉及将训练数据输入 CNN,并调整网络权重以最小化损失函数。用于花卉识别的损失函数是分类交叉熵损失函数,这在多类分类问题中常用。 训练过程包括以下步骤
结果在对 Flower-102 数据集进行 50 个 epoch 的 CNN 训练后,评估了测试集上的性能。模型的准确率为 86.1%,这比基于人类专家知识的传统花卉识别方法有了显著改进。 结果和结论通过这种方法,我们可以在牛津花卉 102 数据集上实现非常高的准确性。例如,最近一项研究使用带有 ResNet-50 架构和迁移学习的 CNN,其精度为 98.23%。 总之,CNN 是花卉识别的强大工具,已在多个基准数据集上取得了最先进的结果。通过使用迁移学习,我们可以利用已经学会识别许多有用特征的预训练网络,并针对我们的特定任务进行微调。我们使用 Flower-102 数据集和 VGG16 架构来训练 CNN 以识别花卉图像。结果表明,CNN 能够比基于人类专家知识的传统花卉识别方法获得显著更高的准确率。CNN 学习了与花卉识别相关的特征,并且这些特征可以转移到其他图像识别任务。 下一主题Python 中的频率调制 |
在本教程中,我们将学习使用普通哈希函数进行排序。我们熟悉各种排序算法,如堆排序、冒泡排序、合并排序等。这里我们将使用哈希数组对给定元素数组进行排序。然而,...
7 分钟阅读
介绍:在本教程中,我们讨论如何使用 Python 中的 Asyncio 创建 telnet 客户端。Telnet 是一种使用 TCP/IP 进行连接的客户端/服务器软件协议。Telnet 协议允许用户登录并使用远程计算机,即使他们是直接连接到它的...
阅读 4 分钟
在处理许多数据集时,完全理解客户在表格样式中看到的内容可能具有挑战性。为了使我们的数据更有条理,理解其含义并选择合适的模型,我们必须对其进行可视化或视觉表示。因此,我们可以...
阅读 4 分钟
在本文中,我们将讨论 Python 中的 Wikipedia 模块,并讨论如何使用 Python 脚本利用 Wikipedia 模块。我们将从 Wikipedia 获取大量信息。引言 互联网是信息最重要的来源。所有知识都只是...
阅读 6 分钟
网站连接检查器是一种帮助您监控互联网连接状态的工具。它检查您尝试访问的网站是否可用和可访问。如果网站关闭,检查器将提供一条消息,表明该网站……
阅读 19 分钟
在本教程中,我们将讨论提供一种简单直观的方法来转换图像并理解其背后数据的 Python 库。今天的世界充斥着数据,而图像是这些数据的主要部分。但是为了被利用……
5 分钟阅读
? 在 Python 中,您可以使用空格来定义代码块,并使用空格(也称为缩进)来组织代码。缩进在 Python 中至关重要,因为它建立了循环、条件语句和函数定义等控制结构中语句的层次结构和范围。正确的缩进...
阅读 4 分钟
在这个问题中,我们将得到两个链表。这两个链表将在它们各自的一个节点上合并,形成一个 Y 形列表。我们必须找到链表合并的节点。让我们看一些例子来理解...
阅读 16 分钟
二进制语言是计算机的语言。计算机的所有内部机制都与位有关。位运算符是允许程序员对整数执行位操作的一组运算符。这些运算符允许程序员操作较低级别的数据,在...
阅读 3 分钟
当我们处理 Python 字典时,我们可能会遇到需要从字典中获取选择性键值总和的问题。这个问题可能发生在 Web 开发领域,让我们看看以下解决问题的方法。方法……
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India