首页 > 分享 > 卷积神经网络训练花卉识别分类器

卷积神经网络训练花卉识别分类器

介绍

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

  花卉分类器使用语言: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名称数量1daisy雏菊6332dandelion蒲公英8983roses玫瑰花6414sunflowers向日葵6995tulips郁金香7996Nymphaea睡莲2267Tropaeolum_majus旱金莲1968Digitalis_purpurea毛地黄1909peach_blossom桃花5510Jasminum茉莉花6011Matthiola紫罗兰5412Rosa月季5413Rhododendron杜鹃花5714Dianthus康乃馨4815Cerasus樱花5016Narcissus水仙花5217Pharbitis牵牛花4618Gazania勋章菊10819Eschscholtzia花菱草8220Tithonia肿柄菊47

  花卉样式:

image-20200323134803440

数据扩展

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

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

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

image-20200323161939465

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

image-20200323162157922

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

image-20200323162309627

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

编号name名称数量增量后数量1daisy雏菊63324962dandelion蒲公英89835883roses玫瑰花64124004sunflowers向日葵69927965tulips郁金香79931966Nymphaea睡莲22618087Tropaeolum_majus旱金莲19615688Digitalis_purpurea毛地黄19013609peach_blossom桃花5544010Jasminum茉莉花6048011Matthiola紫罗兰5443212Rosa月季5443213Rhododendron杜鹃花5745614Dianthus康乃馨4838415Cerasus樱花5040016Narcissus水仙花5241617Pharbitis牵牛花4636818Gazania勋章菊10846419Eschscholtzia花菱草8265620Tithonia肿柄菊47376 数据切分

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

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

image-20200321104936098

  然后这样来调用类:

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

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

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

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

image-20200323184552442

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

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

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

模型训练

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

  AlexNet网络结构如下:

img

  VGG16网络结构如下:

在这里插入图片描述

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

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

image-20200323225509766

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

image-20200323230153110

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

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

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

在这里插入图片描述

模型验证

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

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

image-20200323231914637

image-20200323231935143

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

一个补充

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

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

image-20200423135159846

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

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

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

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

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

相关知识

应用卷积神经网络识别花卉及其病症
深度学习机器学习卷积神经网络的花卉识别花种类识别
“花朵分类“ 手把手搭建【卷积神经网络】
卷积神经网络的算法范文
深度学习之基于Tensorflow卷积神经网络花卉识别系统
基于深度卷积神经网络的移动端花卉识别系统
花卉识别(tensorflow)
毕业设计 深度学习花卉识别
毕设分享 深度学习花卉识别
深度学习花的分类识别

网址: 卷积神经网络训练花卉识别分类器 https://m.huajiangbk.com/newsview105060.html

所属分类:花卉
上一篇: 花指令总结
下一篇: 6 字符型数据及其处理