基于深度学习的花卉智能分类识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        传统的花卉分类方法通常依赖于专家的知识和经验,这种方法不仅耗时耗力,而且容易受到主观因素的影响。本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络(CNN),利用花卉数据集进行模型训练与验证,预测准确率达到 84.3%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,能够从大量的图像数据中自动学习和提取特征,从而实现高效、准确的分类。

2. 花卉数据集读取与预处理

        利用 Tensorflow 框架从文件夹中读取花卉图像数据:

# 花卉类别
class_map = {'tulip': 0, 'sunflower': 1, 'rose': 2, 'dandelion': 3, 'daisy': 4}
class_name_dict = {0: 'tulip', 1: 'sunflower', 2: 'rose', 3: 'dandelion', 4: 'daisy'}def image_generator(height,width):datagen = ImageDataGenerator(rescale=1./255.,validation_split=0.2,rotation_range=10,width_shift_range=0.05,height_shift_range=0.05,# shear_range=0.05,brightness_range=[0.5, 1.5],)train_ds = datagen.flow_from_directory(data_dir,batch_size=batch_size,subset="training",#color_mode = 'grayscale',shuffle=True,class_mode='categorical',target_size=(height, width),classes=class_map)val_ds = datagen.flow_from_directory(data_dir,subset="validation",#seed=123,#color_mode = 'grayscale',class_mode='categorical',target_size=(height, width),batch_size=batch_size,classes=class_map)return train_ds, val_ds

3. 深度卷积神经网络模型构建

3.1 VGG16 Base Model

        VGG(Visual Geometry Group)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG19最为著名。

VGG16和VGG19网络架构非常相似,都由多个卷积层和池化层交替堆叠而成,最后使用全连接层进行分类。两者的区别在于网络的深度和参数量,VGG19相对于VGG16增加了3个卷积层和一个全连接层,参数量也更多。

VGG网络被广泛应用于图像分类、目标检测、语义分割等计算机视觉任务中,并且其网络结构的简单性和易实现性使得VGG成为了深度学习领域的经典模型之一。

input_shape = (height, width, 3)
base_model = tf.keras.applications.vgg16.VGG16(weights='./pretrained_models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', include_top=False,input_shape=input_shape
)
base_model.trainable = Falsemodel_vgg16 = tf.keras.Sequential()
model_vgg16.add(base_model)
model_vgg16.add(tf.keras.layers.Flatten())model_vgg16.add(tf.keras.layers.Dense(len(class_map), activation='softmax'))model_vgg16.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(0.001),metrics=['accuracy'])
model_vgg16.summary()

         模型训练:

vgg16_history = model_vgg16.fit(train_ds,validation_data=val_ds,epochs=epochs,callbacks=[checkpointer, earlystopper]
)
Epoch 1/100
69/69 [==============================] - ETA: 0s - loss: 0.9497 - accuracy: 0.6451
Epoch 1: val_accuracy improved from -inf to 0.78102, saving model to best_vgg16_model.h5
69/69 [==============================] - 308s 4s/step - loss: 0.9497 - accuracy: 0.6451 - val_loss: 0.6584 - val_accuracy: 0.7810......
Epoch 11/100
69/69 [==============================] - ETA: 0s - loss: 0.0755 - accuracy: 0.9854
Epoch 11: val_accuracy did not improve from 0.80839
69/69 [==============================] - 349s 5s/step - loss: 0.0755 - accuracy: 0.9854 - val_loss: 0.6177 - val_accuracy: 0.7938
Epoch 11: early stopping

 3.2 InceptionV3 Base Model

        深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。

tf.keras.backend.clear_session()base_model = tf.keras.applications.InceptionV3(weights='./pretrained_models/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5', include_top=False, input_shape=input_shape
)
base_model.trainable = Falsemodel_inceptionv3 = tf.keras.Sequential()
model_inceptionv3.add(base_model)
model_inceptionv3.add(tf.keras.layers.Flatten())model_inceptionv3.add(tf.keras.layers.Dense(len(class_map), activation='softmax'))model_inceptionv3.compile(loss='categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(0.001),metrics=['accuracy']
)
model_inceptionv3.summary()

        模型训练:

inceptionv3_history = model_inceptionv3.fit(train_ds,validation_data=val_ds,epochs=epochs,callbacks=[checkpointer, earlystopper]
)

3.3 模型性能对比

labels = ['损失Loss','准确率Accuracy']
vgg16_evals = [vgg16_eval_result['损失Loss'], vgg16_eval_result['准确率Accuracy']]
inceptionv3_evals = [inceptionv3_eval_result['损失Loss'], inceptionv3_eval_result['准确率Accuracy']]x = np.arange(len(labels))  # the label locations
bar_width = 0.35  # the width of the barsfig, ax = plt.subplots(figsize=(8, 6), dpi=100)
rects1 = ax.bar(x - bar_width/2, vgg16_evals, bar_width, label='VGG16')
rects2 = ax.bar(x + bar_width/2, inceptionv3_evals, bar_width, label='Inception-V3')# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Loss/Acc')
ax.set_title('VGG16 与 Inception-V3 的花卉分类性能对比')
ax.set_xticks(x, labels)
ax.legend()ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)fig.tight_layout()plt.show()

        可以看出,基于 Inception-V3 为 base 模型的卷积神经网络,其预测准确率较高,为84.31%,以此花卉智能分类识别系统中,我们将集成该模型。

4. 花卉图片数据采集与样本扩充

        原始数据集的每类花卉包括 607 个样本,虽然样本均衡,但是针对深度学习类的神经网络模型来说,样本还是不足,从建模过程中也能看出,预测准确率为 84.3%。

{'tulip': 607, 'sunflower': 607, 'rose': 607, 'dandelion': 607, 'daisy': 607}

        本项目中,利用网络爬虫采集搜索引擎中搜索到的各类花卉的图片,来扩充样本数据集:

Coding 进行中,待更新......

5. 花卉智能分类识别系统

5.1 系统首页

        系统首页提供简洁明了的界面设计,包括系统名称、主要功能简介以及使用指南等内容。用户可以通过主页快速了解系统的基本操作流程及注意事项。首页上还会展示一些示例图片,让用户直观地感受到系统的实际效果。

5.2 卷积神经网络模型介绍

5.3 花卉品种实时分类预测

        用户上传花卉图像后,系统将自动调用预先训练好的深度学习模型进行分析处理。模型会根据图像中的特征判断花卉种类,并给出相应的分类结果。此外,系统还会提供模型对所有类别的预测概率分布,提升模型输出可解释性。

        (1)郁金香(Tulip)类别样本预测

        (2)太阳花(Sunflower)类别样本预测

        (3)玫瑰花(Rose)类别样本预测

        (4)蒲公英(Dandelion)类别样本预测

        (5)雏菊(Daisy)类别样本预测

6. 总结

        本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络(CNN),利用花卉数据集进行模型训练与验证,预测AUC达到 94.9%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,能够从大量的图像数据中自动学习和提取特征,从而实现高效、准确的分类。 
 

 欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python-数据挖掘实战案例

2. Python-深度学习实战案例

3. Python-管理系统实战案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146279.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

4、论文阅读:基于深度学习和成像模型的水下图像增强

基于深度学习和成像模型的水下图像增强 前言介绍物理成像模型光学成像原理数学公式深度学习方法Backscatter Estimation Module(反向散射估计模块)Direct-transmission Estimation Module(直接传输估计模块)训练方法前言 现在的主要挑战是水下机器人捕获的图像颜色失真。水…

nacos启动报错 load derby-schema.sql error

nacos 今天在使用nacos时,启动时一直报错,错误日志如下: 2024-09-16 08:27:57 Caused by: java.lang.RuntimeException: com.alibaba.nacos.api.exception.runtime.NacosRuntimeException: errCode: 500, errMsg: load derby-schema.sql err…

基于MindSpore实现Transformer机器翻译(下)

因本文内容较长,故分为上下两部分。上部分可点击以下链接查看 基于MindSpore实现Transformer机器翻译(上) 编码器(Encoder) Transformer的Encoder负责处理输入的源序列,并将输入信息整合为一系列的上下文…

分布式消息中间件kafka

文章目录 什么是kafka?整体架构 kafka核心概念1. 生产者 (Producer)2. 消费者 (Consumer)3. 主题 (Topic)4. 分区 (Partition)5. 经纪人 (Broker)6. 复制 (Replication)7. 消费者组 (Consumer Group)8. 日志段 (Log Segment) 主要功能1. 高吞吐量2. 可靠的消息传递3. 发布/订阅…

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念,用于描述两个数在除以某个数时所得的余数相同的情况。具体地,设m是一个正整数,a和b是两个整数,如果a和b除以m的余数相同,则称a和b模m同余,记作a≡b(mod m)。反…

电脑ip地址怎么换地区:操作步骤与利弊分析

在当今全球化的信息时代,人们经常需要访问不同地区的网络资源。然而,由于地理位置的限制,某些内容或服务可能只对特定地区的用户开放。这时,更换电脑IP地址的地区就成为了一个实用的解决方案。本文将详细介绍两种更换电脑IP地址地…

Excel--DATEDIF函数的用法及参数含义

DATEDIF函数的用法为: DATEDIF(start_date,end_date,unit),start_date表示的是起始时间,end_date表示的是结束时间。unit表示的是返回的时间代码,是天、月、年等。如下: Datedif函数的参数含义unit参数返回值的意义"y"两个时间段之间的整年数…

QEMU:模拟 ARM 大端字节序运行环境

文章目录 1. 前言2. ARM 大小端模拟测试2.1 裸机模拟测试2.1.1 大端模拟测试2.1.2 小端模拟测试 2.2 用户空间模拟测试2.2.1 大端模拟测试2.2.2 小端模拟测试 2.3 结论 3. 参考链接 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失&…

PLC通信协议的转化

在自动化程序设计中,常常需要对通信协议进行相互转化。例如,某个控制器需要通过PLC控制设备的某个部件的运动,但PLC只支持ModbusTCP协议,而控制器只支持CanOpen通讯协议。这时,就需要一个网关进行通信协议的转化。网关…

双击就可以打开vue项目,而不用npm run dev

右键点击桌面或其他位置,选择“新建” -> “快捷方式”,在“对象的位置”处直接输入“npm run dev”,然后下一步 自定义一个快捷方式名称 完成后,桌面会创建一个快捷方式,右键快捷方式选择属性,可以看…

MiniCPM3-4B | 笔记本电脑运行端侧大模型OpenBMB/MiniCPM3-4B-GPTQ-Int4量化版 | PyCharm环境

MiniCPM3-4B,轻松在笔记本电脑上运行大模型? 背景一、选择模型二、模型下载三、模型运行四、总结 背景 2024年9月5日,面壁智能发布了MiniCPM3-4B,面壁的测试结果声称MiniCPM3-4B表现超越 Phi-3.5-mini-instruct 和 GPT-3.5-Turbo-…

proxy认识一下

免责声明:本文仅做分享。 遵守规则,自行跳过。 Proxy 代理技术介绍 1. 代理简介 代理(Proxy) 是指在客户端和目标服务器之间充当中介的设备或应用程序。代理服务器的主要功能是接收客户端的请求,并将这些请求转发给目标服务器&a…

解决Mac下Vscode编译运行C语言程序会自动生成DSYM文件夹的问题

🎉 前言 好久没写C语言了,今天打开Vscode打算写点程序练练手,结果发现一个让我非常苦恼的事情,那就是每次我运行程序的时候,左侧的资源管理器就会生成一大堆的文件,如图: 强迫症犯了&#xff…

模方单体化建模,建模的时候画线突然无法显示垂直线,如何解决?

垂直线对应线都可以在联动软件中设定。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能,支持一键自动提取房屋结构,平均1栋复杂建筑物只…

机器翻译之数据处理

目录 1.导包 2.读取本地数据 3.定义函数:数据预处理 4.定义函数:词元化 5.统计每句话的长度的分布情况 6. 获取词汇表 7. 截断或者填充文本序列 8.将机器翻译的文本序列转换成小批量tensor 9.加载数据 10.知识点个人理解 1.导包 #导包 import o…

2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序

2016年国赛高教杯数学建模 A题 系泊系统的设计 近浅海观测网的传输节点由浮标系统、系泊系统和水声通讯系统组成(如图1所示)。某型传输节点的浮标系统可简化为底面直径2m、高2m的圆柱体,浮标的质量为1000kg。系泊系统由钢管、钢桶、重物球、…

生信初学者教程(四):软件

文章目录 RRstudioLinux系统其他软件本书是使用R语言编写的教程,用户需要下载R和RStudio软件用于进行分析。 版权归生信学习者所有,禁止商业和盗版使用,侵权必究 R R语言是一种免费的统计计算和图形化编程语言,是一种用于数据分析和统计建模的强大工具。它具有丰富的统计…

solidwork找不到曲面

如果找不到曲面 则右键找到选项卡,选择曲面

Pybullet 安装过程

Pybullet 安装过程 1. 安装C编译工具2. 安装Pybullet 1. 安装C编译工具 pybullet 需要C编译套件,直接装之前检查下,要不会报缺少某版本MVSC的error,最好的方式是直接下载visual studio,直接按默认的来装。 2. 安装Pybullet 这里…

Mycat中间件

一、案例目标 (1)了解Mycat提供的读写分离功能。 (2)了解MySQL数据库的主从架构。 (3)构建以Mycat为中间件的读写分离数据库集群。 二、案例分析 1.规划节点 使用Mycat作为数据库中间件服务构建读写分…