本部分是花卉分类器,后续会有更为详细的更新。
花卉分类器使用语言: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花卉样式:
收集到的每种花卉数量不是很多,而像樱花、水仙花等都是每类50张左右,数据量过少,若直接拿去训练模型的话,正确率不会太高,且会发生严重的过拟合。
目前使用的数据扩展方法分为三种:镜像翻转、上下翻转和椒盐噪声。
镜像翻转:将图片左右翻转,生成新的数据
上下翻转:将图片上下翻转,生成新的数据
椒盐噪声:为图片增加噪声,生成新的数据
扩展后的花卉数量如下所示:
编号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,主要功能是读取图片数据,且要求图片是下图这种存放方式。
然后这样来调用类:
train_dataset = ImageFolder(root='./data/train/',transform=data_transform) 1
root表示根目录,transform表示数据预处理方式。
这种方式将train目录下的cat和dog文件夹内的所有图片作为训练集,而文件夹名cat和dog作为标签数据进行训练。
因此我们就要像ImageFolder要求的那样切分数据集。
我切分的比例是3:1:1。实际上,如果不想切分出验证集的话,可以将验证集的代码部分注掉,直接使用训练集和测试集也是可以的。
#比例 scale = [0.6, 0.2, 0.2] 12'
至此,数据部分准备完成了。
模型训练目前采用的是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相关知识
应用卷积神经网络识别花卉及其病症
深度学习机器学习卷积神经网络的花卉识别花种类识别
“花朵分类“ 手把手搭建【卷积神经网络】
卷积神经网络的算法范文
深度学习之基于Tensorflow卷积神经网络花卉识别系统
基于深度卷积神经网络的移动端花卉识别系统
花卉识别(tensorflow)
毕业设计 深度学习花卉识别
毕设分享 深度学习花卉识别
深度学习花的分类识别
网址: 卷积神经网络训练花卉识别分类器 https://m.huajiangbk.com/newsview105060.html
上一篇: 花指令总结 |
下一篇: 6 字符型数据及其处理 |