卷积神经网络训练花卉识别分类器
介绍
本部分是花卉分类器,后续会有更为详细的更新。
花卉分类器使用语言: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
卷积神经网络训练花卉识别分类器相关推荐
- 毕设 深度学习卷积神经网络的花卉识别
文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...
- 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...
- cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...
上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...
- 卷积神经网络 训练的结果是什么_射击训练:卷积神经网络识别解剖结构标志位点...
本文2100字,阅读大约需要7分钟 在医学图像分析中,我们需要识别解剖结构的标志位点,识别出的位点可用于临床分析以及解剖结构分割等用途.深度学习的发展,给这样的方法带来了一些新的可能,已有不少的研究. ...
- PyTorch实现基于卷积神经网络的面部表情识别
基于卷积神经网络的面部表情识别(Pytorch实现)----台大李宏毅机器学习作业3(HW3) 一.项目说明 给定数据集train.csv,要求使用卷积神经网络CNN,根据每个样本的面部图片判断出其表 ...
- 【转】干货|孙启超:卷积神经网络在人脸识别技术中的应用
2018-08-27 21:45:01 随着 iPhone X 的发布,Face ID 人脸识别技术开始进入人们的日常生活中,当我们拿起手机并看着它的时候就可以实现手机解锁的功能.而人脸识别中的关键技 ...
- 卷积云神经网络_用于卷积神经网络训练的地基云图数据库构建方法与流程
本发明涉及人工智能模式识别领域,具体涉及一种用于卷积神经网络训练的地基云图数据库构建方法. 背景技术: 云是地球上水文循环的一个重要环节,它与地面辐射相互作用共同影响着局地和全球尺度的能量平衡.云分类 ...
- 基于深度卷积神经网络进行人脸识别的原理是什么?
原文:https://www.zhihu.com/question/60759296 基于深度卷积神经网络进行人脸识别的原理是什么? 这里的人脸识别包括但不限于:人脸检测,人脸对齐,身份验证识别,和表 ...
- 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别
[深度学习]Tensorflow搭建卷积神经网络实现情绪识别 文章目录 1 Tensorflow的基本使用方法1.1 计算图1.2 Feed1.3 Fetch1.4 其他解释 2 训练一个Tensor ...
最新文章
- 吃鸡服务器炸了会显示什么,绝地求生服务器再爆炸,还能不能好好吃鸡了?
- cxgrid列高度行宽度定义
- The disk contains an unclean file system\
- java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...
- Animation Framework
- antd下拉框联动说明
- 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
- 知识变现 常用课程制作实用工具大全(建议保存)
- 如何巧用Microsoft edge浏览器合并pdf文件
- QQ群文件下载速度慢解决办法
- CNCC 2022| 隐私计算:理论、技术、应用与未来
- NCCL下载及安装教程
- SpringBoot html转pdf 支持中文、图片水印+文字水印、页眉页脚 flying-saucer-pdf-itext5 + freemarker
- 时之歌 服务器维护,时之歌抽卡卡住了怎么办 时之歌手游招募吞卡解决方法
- 《网络攻防》Web基础
- HBase数据库使用TTL清理过期数据
- Webcam with JavaFX
- 无法识别 移动固态硬盘_M.2固态硬盘不能识别怎么办 Bios开启CSM识别M.2固态硬盘方法...
- Microsoft Visual Basic for Applications 编译错误:更新 Declare 语句
- 美化窗体——VB窗体的背景图充满整个窗体