介绍

  本部分是花卉分类器,后续会有更为详细的更新。

  花卉分类器使用语言:Python,使用深度学习框架:PyTorch,方法:训练卷积神经网络

  关于PyTorch的基本用法可以参考博客:PyTorch笔记

  Gitee仓库:花卉识别

  Github仓库:花卉识别

  Git相关用法可以参考博客:Git使用笔记

数据集

  目前选用了20种花卉数据用于分类

  data文件夹内存放了我使用的20种花卉数据集。日后会继续扩增。

  数据来源主要取决于3个方面:

  • 5种花卉数据集,每类花卉包含600张到900张不等的图片
  • 来源于Oxford 102 Flowers数据集,该数据集包含102类英国花卉数据,每个类别包含 40 到 258 张图像
  • 最后一部分来源于百度图片,使用python程序批量采集花卉图像数据

  有些花卉的name是我自己写的,采用的是花卉的学名,通常是拉丁文。

  我选用的20种花卉数据如下所示:

编号 name 名称 数量
1 daisy 雏菊 633
2 dandelion 蒲公英 898
3 roses 玫瑰花 641
4 sunflowers 向日葵 699
5 tulips 郁金香 799
6 Nymphaea 睡莲 226
7 Tropaeolum_majus 旱金莲 196
8 Digitalis_purpurea 毛地黄 190
9 peach_blossom 桃花 55
10 Jasminum 茉莉花 60
11 Matthiola 紫罗兰 54
12 Rosa 月季 54
13 Rhododendron 杜鹃花 57
14 Dianthus 康乃馨 48
15 Cerasus 樱花 50
16 Narcissus 水仙花 52
17 Pharbitis 牵牛花 46
18 Gazania 勋章菊 108
19 Eschscholtzia 花菱草 82
20 Tithonia 肿柄菊 47

  花卉样式:

数据扩展

  收集到的每种花卉数量不是很多,而像樱花、水仙花等都是每类50张左右,数据量过少,若直接拿去训练模型的话,正确率不会太高,且会发生严重的过拟合。

  目前使用的数据扩展方法分为三种:镜像翻转、上下翻转和椒盐噪声。

  镜像翻转:将图片左右翻转,生成新的数据

  上下翻转:将图片上下翻转,生成新的数据

  椒盐噪声:为图片增加噪声,生成新的数据

  扩展后的花卉数量如下所示:

编号 name 名称 数量 增量后数量
1 daisy 雏菊 633 2496
2 dandelion 蒲公英 898 3588
3 roses 玫瑰花 641 2400
4 sunflowers 向日葵 699 2796
5 tulips 郁金香 799 3196
6 Nymphaea 睡莲 226 1808
7 Tropaeolum_majus 旱金莲 196 1568
8 Digitalis_purpurea 毛地黄 190 1360
9 peach_blossom 桃花 55 440
10 Jasminum 茉莉花 60 480
11 Matthiola 紫罗兰 54 432
12 Rosa 月季 54 432
13 Rhododendron 杜鹃花 57 456
14 Dianthus 康乃馨 48 384
15 Cerasus 樱花 50 400
16 Narcissus 水仙花 52 416
17 Pharbitis 牵牛花 46 368
18 Gazania 勋章菊 108 464
19 Eschscholtzia 花菱草 82 656
20 Tithonia 肿柄菊 47 376

数据切分

  数据集准备好了,要切分为训练集、验证集和测试集。

  在PyTorch的torchvision包内有一个关于计算机视觉的数据读取类ImageFolder,它的调用方式是torchvision.datasets.ImageFolder,主要功能是读取图片数据,且要求图片是下图这种存放方式。

  然后这样来调用类:

train_dataset = ImageFolder(root='./data/train/',transform=data_transform)

  root表示根目录,transform表示数据预处理方式。

  这种方式将train目录下的cat和dog文件夹内的所有图片作为训练集,而文件夹名cat和dog作为标签数据进行训练。

  因此我们就要像ImageFolder要求的那样切分数据集。

  我切分的比例是3:1:1。实际上,如果不想切分出验证集的话,可以将验证集的代码部分注掉,直接使用训练集和测试集也是可以的。

#比例
scale = [0.6, 0.2, 0.2]

  至此,数据部分准备完成了。

模型训练

  目前采用的是AlexNet和VGG16两种网络,其实两种网络比较相似,不同的是VGG16较于AlexNet更“深”

  AlexNet网络结构如下:

  VGG16网络结构如下:

  二者相比较,VGG16准确率更高一些,可见更深的网络对于提高准确率有一定的帮助。

  AlexNet训练过程中的准确率变化如下:

  VGG16经历200个epoch训练的准确率变化如下:

  AlexNet经历了500个epoch训练后最终能达到83%的准确率

  VGG16经历了200个epoch训练后最终能达到90%的正确率

  以上两种训练的模型参数我都保存到了仓库内

模型验证

  除了验证测试集以外,还可以用图片去验证模型的训练效果。

  选用的是验证效果比较好的VGG16网络,读取的参数是200个epoch训练后的参数

  可以看到,测试的效果还是非常好的,模型可以非常准确的判断花卉的种类。

一个补充

  如果你恰好有个云服务器,又想做一个web服务器的话,可以尝试flask框架(当然在本地也可以使用flask,不过这个就没有多大意义了)

  按照flask文件夹中的程序,在服务器上运行之后,然后打开一个新网页,输入IP:端口?图片地址就可以做识别了。

  其中sjcup.cn是我的一个域名,这里可以替换为自己服务器的公网IP

  另外还有一个坑就是图片名称不可为中文名称,否则会检测不到

  公网IP无法访问的问题可以根据这个链接做一些修改

觉得文章还不错的话就请留下一个大大的赞吧,十分感谢!!

下一步计划

  • 扩增数据集,可以识别更多类别的花卉
  • 采用新的网络训练,如Inception V3

卷积神经网络训练花卉识别分类器相关推荐

  1. 毕设 深度学习卷积神经网络的花卉识别

    文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...

  2. 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

    文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...

  3. cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...

    上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...

  4. 卷积神经网络 训练的结果是什么_射击训练:卷积神经网络识别解剖结构标志位点...

    本文2100字,阅读大约需要7分钟 在医学图像分析中,我们需要识别解剖结构的标志位点,识别出的位点可用于临床分析以及解剖结构分割等用途.深度学习的发展,给这样的方法带来了一些新的可能,已有不少的研究. ...

  5. PyTorch实现基于卷积神经网络的面部表情识别

    基于卷积神经网络的面部表情识别(Pytorch实现)----台大李宏毅机器学习作业3(HW3) 一.项目说明 给定数据集train.csv,要求使用卷积神经网络CNN,根据每个样本的面部图片判断出其表 ...

  6. 【转】干货|孙启超:卷积神经网络在人脸识别技术中的应用

    2018-08-27 21:45:01 随着 iPhone X 的发布,Face ID 人脸识别技术开始进入人们的日常生活中,当我们拿起手机并看着它的时候就可以实现手机解锁的功能.而人脸识别中的关键技 ...

  7. 卷积云神经网络_用于卷积神经网络训练的地基云图数据库构建方法与流程

    本发明涉及人工智能模式识别领域,具体涉及一种用于卷积神经网络训练的地基云图数据库构建方法. 背景技术: 云是地球上水文循环的一个重要环节,它与地面辐射相互作用共同影响着局地和全球尺度的能量平衡.云分类 ...

  8. 基于深度卷积神经网络进行人脸识别的原理是什么?

    原文:https://www.zhihu.com/question/60759296 基于深度卷积神经网络进行人脸识别的原理是什么? 这里的人脸识别包括但不限于:人脸检测,人脸对齐,身份验证识别,和表 ...

  9. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别

    [深度学习]Tensorflow搭建卷积神经网络实现情绪识别 文章目录 1 Tensorflow的基本使用方法1.1 计算图1.2 Feed1.3 Fetch1.4 其他解释 2 训练一个Tensor ...

最新文章

  1. 吃鸡服务器炸了会显示什么,绝地求生服务器再爆炸,还能不能好好吃鸡了?
  2. cxgrid列高度行宽度定义
  3. The disk contains an unclean file system\
  4. java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...
  5. Animation Framework
  6. antd下拉框联动说明
  7. 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
  8. 知识变现 常用课程制作实用工具大全(建议保存)
  9. 如何巧用Microsoft edge浏览器合并pdf文件
  10. QQ群文件下载速度慢解决办法
  11. CNCC 2022| 隐私计算:理论、技术、应用与未来
  12. NCCL下载及安装教程
  13. SpringBoot html转pdf 支持中文、图片水印+文字水印、页眉页脚 flying-saucer-pdf-itext5 + freemarker
  14. 时之歌 服务器维护,时之歌抽卡卡住了怎么办 时之歌手游招募吞卡解决方法
  15. 《网络攻防》Web基础
  16. HBase数据库使用TTL清理过期数据
  17. Webcam with JavaFX
  18. 无法识别 移动固态硬盘_M.2固态硬盘不能识别怎么办 Bios开启CSM识别M.2固态硬盘方法...
  19. Microsoft Visual Basic for Applications 编译错误:更新 Declare 语句
  20. 美化窗体——VB窗体的背景图充满整个窗体

热门文章

  1. 生活不会平淡,大家都在奋斗。
  2. 会计电算化什么是计算机硬件,2008年初级会计职称:会计电算化计算机的硬件...
  3. 使用液压机压缩气体的空分装置
  4. 好用的调色软件 ColorSchemer Studio
  5. vue中百度地图标注
  6. windows系统热键占用工具、强制卸载工具
  7. 列表.元组.range
  8. 小学教师个人述职报告
  9. 基于5G/4G边缘网关的建筑机器人应用
  10. JAVA并发编程 之 LMAX Disruptor使用实例(高效解决生产者与消费者问题)