首页 分享 深度学习玩转花卉识别

深度学习玩转花卉识别

来源:花匠小妙招 时间:2026-03-29 14:05

目录

二、技术选型与实现

三、 数据集处理

四、模型训练过程

五、界面开发

六、小结

一、项目背景

  最近一直在研究如何用AI识别不同种类的花,主要是因为自己对植物有点兴趣,但又总是分不清楚各种花的名称(尤其是那些长得差不多的花)。正好最近在学习深度学习,就想着做个项目,既能学习新技术又能解决实际问题。

  我选择了YOLOv11分类模型来实现这个功能,并用PyQt5做了个简单的界面,这样就算不懂技术的人也能轻松使用。目前系统可以识别5种常见花卉:雏菊、蒲公英、玫瑰、向日葵和郁金香,准确率还挺高的!

二、技术选型与实现

   为什么选择YOLOv11?

  说实话,一开始我想用ResNet或者EfficientNet这些常见的分类模型,但后来发现YOLOv11在速度和准确率上有很好的平衡。它不仅推理速度快(这对于实时应用很重要),而且分类准确率也很高。最关键的是,YOLOv11的使用门槛相对较低,API设计得很友好,对新手比较友善。

三、 数据集处理

我使用了网上公开的花卉数据集,包含大约3600张图像,涵盖5类花卉。数据处理上做了这些工作:

  1. 图像缩放(统一到224×224像素)

  2. 数据增强(旋转、翻转、调整亮度等)

  3. 归一化处理

数据增强代码(做了一些混淆处理,):

```python

def d@ta_pr0cess(img):

if r@nd.ch0ice([True, False], p=[0.6, 0.4]):

        ang1e = r@nd.uniform(-25, 25)

        img = r0tate(img, ang1e)

if r@nd.ch0ice([True, False]):

        img = fl1p_h0rizontal(img)

    br1ghtness = r@nd.uniform(0.85, 1.15)

    img = adj@st_br1ghtness(img, br1ghtness)

return img

```

python

运行

四、模型训练过程

训练过程中遇到了不少坑,分享一下经验:

1. 学习率很关键:一开始用0.01的学习率,结果模型完全不收敛。后来改成0.001,再配合学习率衰减,效果好多了。

2. 数据增强要适度:太激进的数据增强反而会降低模型性能。比如我一开始用了很强的色彩抖动,结果模型表现变差了,后来只保留了适度的旋转和翻转。

3. 批量大小影响训练稳定性:在我的电脑上(12GB显存),batch size设为32是个比较好的选择。

4. 早停策略很有用:设置了patience=10,避免了过拟合问题。

训练代码片段(同样做了混淆处理):

```python

def tr@in_m0del():

    m0del = Y0LO('yolo11s-cls.pt')

    r3sults = m0del.tr@in(

        d@ta='flower_dataset.yaml',

        ep0chs=50,

        b@tch=32,

        lr0=0.001,

        lrf=0.0001,

        p@tience=10,

        @ugment=True

    )

print(f"训练完成! 最佳精度: {r3sults.t0p1:.2f}%")

```

python

运行

五、界面开发

既然是做给普通用户用的,那界面肯定要做得简单直观。我用PyQt5设计了一个简洁的界面,主要功能包括:

1. 选择/拖放图像

2. 显示识别结果和置信度

3. 以进度条形式展示各类别的概率分布

功能界面截图

 

界面代码:

```python

class Fl0werApp(QM@inWindow):

def __init__(self):

super().__init__()

        self.setW1ndowTitle("花卉识别神器")

        m@in_layout = QVBoxL@yout()

        self.img_l@bel = QL@bel()

        self.img_l@bel.setMinimumS1ze(400, 400)

        self.r3sult_frame = QFr@me()

        self.pr0b_bars = {}

        self.sel3ct_btn = QPushButt0n("选择图像")

        self.det3ct_btn = QPushButt0n("开始识别")

        self.setAcceptDr0ps(True)

```

python

运行

经过一段时间的测试,系统表现相当不错!在我的测试集上,整体准确率达到了95.8%。不过也发现了一些有趣的现象:

1. 向日葵和蒲公英识别率最高:这两种花的特征非常明显,几乎100%能正确识别。

2. 玫瑰有时会被误认为郁金香:尤其是红色的玫瑰花苞,有时会被误认为是郁金香。

3. 背景复杂时准确率下降:如果花周围有很多叶子或其他干扰物,准确率会有所下降。

4. 光线对结果影响很大:强光下拍摄的照片识别率明显高于弱光环境。

各花卉的识别准确率:

花卉准确率常见误识别向日葵98.1%几乎不会错蒲公英97.9%偶尔与雏菊混淆雏菊96.6%有时与蒲公英混淆玫瑰93.1%常与郁金香混淆郁金香93.1%常与玫瑰混淆

六、小结

这个花卉识别项目虽然不是什么高深的技术,但确实解决了实际问题,而且整个开发过程很有趣。深度学习的魅力就在于,你可以用相对简单的代码,实现以前需要复杂算法才能完成的任务。

如果你也对计算机视觉或者植物学感兴趣,不妨尝试做一个类似的项目。即使你是新手,现在的工具和框架已经足够友好,让入门变得更加容易。

希望这篇文章对你有所启发!如有问题,欢迎交流讨论~

相关知识

深度学习玩转花卉识别
深度学习 花卉识别
基于深度学习的花卉识别APP设计
基于深度学习的花卉识别研究
基于深度学习的花卉识别系统开发
深度学习花卉识别:Python数据集解析
深度学习花的分类识别
深度学习下的相似花卉识别与三维重建
基于深度学习的花卉图像种类识别
基于深度迁移学习模型的花卉种类识别

网址: 深度学习玩转花卉识别 https://www.huajiangbk.com/newsview2585909.html

所属分类:花卉
上一篇: 90%的父母都忽视了幼儿认识图形
下一篇: 19-24个月宝宝认知发展指南

推荐分享