网上有很多图像分类的代码,有很多是必须要在GPU上面才能跑的,因为我想在自己的电脑跑,所以很多都是不能用的,而且说实话很多对我这个小白来说,都很难看懂。所以我找了一个就是之间用CNN写的神经卷积模型用来进行花卉识别。其中主要参考了以下的博主
江湖人称星爷按访问量排序,可以看到星爷写了五篇图像分类的博客。本文的代码主要参考了github上的一个项目,添加链接描述。链接是,其中我对一些代码进行了改变。
其中数据集包含了五类常见的花卉:雏菊、郁金香、蒲公英、向日葵、玫瑰花等。数据集可以从这里下载
解压完可以看到五个文件夹如下图所示。

其中每个类别的图片大小不一,个数也不一。然后我从每个类别都选了500张作为训练集,100张作为验证集。训练集文件夹命名为train,验证集是val,两个文件夹里面的结构都跟上图一样,就不截图了。然后测试集叫test,结构也跟训练集一样,然后我从网上每个类别分别下了150张图片做测试用。

因为那个数据集数据太少了,我在训练的时候模型很快就过拟合了,所以想到了数据增强。数据增强就是对图片进行翻转、旋转和改变色度饱和度等后,会得到更多的图片来进行训练。数据增强只会用于训练集。数据增强代码如下,要记得改路径,对每一个类都进行数据增强。我是本来每个类有500张的,数据增强后每个类1500张,随机删减了一些,因为全部数据增强也会过拟合。代码如下:

from PIL import Image
from PIL import ImageEnhance
import os
import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from PIL import Image
from keras.preprocessing import image as imageGenerator
import glob# imageDir="D:/fphotos/flower_photos/train/roses" #要改变的图片的路径文件夹
# E:/flower_world-master/flphotos/train/daisy
imageDir="D:/flower_photos/train/daisy" #要改变的图片的路径文件夹
# { 'roses','tulips','dandelion','sunflowers','daisy'}
saveDir="D:/flower/daisy"   #数据增强生成图片的路径文件夹def brightnessEnhancement(root_path,img_name):#亮度增强image = Image.open(os.path.join(root_path, img_name))enh_bri = ImageEnhance.Brightness(image)# brightness = 1.1+0.4*np.random.random()#取值范围1.1-1.5brightness = 1.5image_brightened = enh_bri.enhance(brightness)return image_brighteneddef contrastEnhancement(root_path, img_name):  # 对比度增强image = Image.open(os.path.join(root_path, img_name))enh_con = ImageEnhance.Contrast(image)# contrast = 1.1+0.4*np.random.random()#取值范围1.1-1.5contrast = 1.5image_contrasted = enh_con.enhance(contrast)return image_contrasteddef rotation(root_path, img_name):img = Image.open(os.path.join(root_path, img_name))random_angle = np.random.randint(-2, 2)*90if random_angle==0:rotation_img = img.rotate(-90) #旋转角度else:rotation_img = img.rotate( random_angle)  # 旋转角度# rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))return rotation_imgdef flip(root_path,img_name):   #翻转图像img = Image.open(os.path.join(root_path, img_name))filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)# filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg'))return filp_imgi=0
for name in os.listdir(imageDir):i=i+1saveName="cesun"+str(i)+".jpg"saveImage=contrastEnhancement(imageDir,name)saveImage.save(os.path.join(saveDir,saveName))saveName1 = "flip" + str(i) + ".jpg"saveImage1 = flip(imageDir,name)saveImage1.save(os.path.join(saveDir, saveName1))saveName2 = "brightnessE" + str(i) + ".jpg"saveImage2 = brightnessEnhancement(imageDir, name)saveImage2.save(os.path.join(saveDir, saveName2))

而且数据增强建议在图片被统一裁剪前进行。

图像分类之花卉图像分类(一)数据增强相关推荐

  1. 图像分类之花卉图像分类(五)测试数据

    这个时候测试集就要用到了,为了便于观察,我们这里先给测试集重命名,这样子,哪张图片分类错了,我们也比较好找. 重命名代码: #!/usr/bin/python # -*- coding:utf-8 - ...

  2. 图像分类之花卉图像分类(四)训练模型

    本来我想用tensorbaord来观察LOSS曲线变化的,但是我代码改得不对,如果有小伙伴改出来了,如果可以的话可以告诉我,我懒得改了.下面代码也是注意改成自己的路径 # 导入文件 import os ...

  3. 图像数据增强方法一览(附python代码)

    在图像分类任务中,图像数据增强一般是大多数人会采用的方法之一,这是由于深度学习对数据集的大小有一定的要求,若原始的数据集比较小,无法很好地满足网络模型的训练,从而影响模型的性能,而图像增强是对原始图像 ...

  4. 【项目实战课】人人免费可学!基于Pytorch的图像分类简单任务数据增强实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的图像分类简单任务数据增强实战>.所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的 ...

  5. 图像分类中数据增强的有效性

    1.研究思想 探索并比较了图像分类中数据扩充问题的多种解决方案.先前的工作已经通过简单的技术,如裁剪.旋转和翻转输入图像,证明了数据增强的有效性. 更成功的数据扩充策略之一是上面提到的传统转换. 提出 ...

  6. 深入浅出 | 图像分类之数据增强全梳理

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 知乎作者:小小将 整理:计算机视觉life 原文链接:https://zhuanlan.zhihu. ...

  7. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的InceptionNet花卉图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行 ...

  8. 基于SIFT和颜色特征的花卉图像分类

    基于SIFT特征和颜色直方图的花卉图像分类 摘 要 课程实验提取图片的SIFT特征,通过k均值聚类的方法将所有训练图片的特征聚类为800类,以每个类出现的频率构建特征向量(又称为词袋模型),同时,通过 ...

  9. 【实验课程】花卉图像分类实验

    转载地址:https://bbs.huaweicloud.com/forum/thread-80033-1-1.html 作者:yangyaqin 实验介绍 随着电子技术的迅速发展,人们使用便携数码设 ...

最新文章

  1. 实验5,利用三层交换机实现VLAN间路由
  2. zblogphp 广告联盟_停止折腾联盟广告样式,重新回归内容写作
  3. Java中 volatile 关键字的最全总结,快给自己查缺补漏吧!
  4. abap--关于sap地址,传真,邮箱的地址读取
  5. 网易云信全面技术支持,让“子弹短信”飞得更快
  6. tp3.2php开启事务,Thinkphp 3.2.3 开启调试模式
  7. QML基础类型之size
  8. OpenCV中反向投影
  9. vue全局变量的 定义与任意调用
  10. 在JS方法中返回多个值的三种方法
  11. 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is
  12. BZOJ1876 SDOI2009 SuperGCD 其他
  13. leetcode题库1--两数之和
  14. CSS选择器的优先级计算
  15. 进阶07 Set接口、HashSet、LinkedHashSet
  16. python 柱状图和折线图放在一起_Excel怎样把柱状图和折线图放在一起(超详细)...
  17. TreeMap根据value排序遇到的问题及分析
  18. 完美解决Windows 7更新失败(Windows Update 错误 80070003)
  19. 基于博客系统的访客日志记录----代码合集
  20. Lingo 语言程序设计基础

热门文章

  1. Spring基础概念
  2. java jama包_java矩阵包jama的简单操作
  3. Android连接不上第三方模拟器(夜神模拟器、海马模拟器、逍遥模拟器、Mumu模拟器)
  4. 针对图像的一阶导数和二阶导数
  5. python输出一年有多少天多少时分秒_python:计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上...
  6. Java 根据开始日期和结束日期,获取日期之间的工作日,去除了周末和法定节假日
  7. 深度研究微软的资产负债表和财务状况以及未来投资价值
  8. 程序员那些事之卸磨杀驴
  9. 台积电投注美国,结果美国却在放弃台积电,外媒:卸磨杀驴
  10. 阿里小号平台淘宝钻号=www.alibaizhan.com