失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图像分类之花卉图像分类(一)数据增强

图像分类之花卉图像分类(一)数据增强

时间:2022-01-09 16:21:49

相关推荐

图像分类之花卉图像分类(一)数据增强

网上有很多图像分类的代码,有很多是必须要在GPU上面才能跑的,因为我想在自己的电脑跑,所以很多都是不能用的,而且说实话很多对我这个小白来说,都很难看懂。所以我找了一个就是之间用CNN写的神经卷积模型用来进行花卉识别。其中主要参考了以下的博主

江湖人称星爷按访问量排序,可以看到星爷写了五篇图像分类的博客。本文的代码主要参考了github上的一个项目,添加链接描述。链接是,其中我对一些代码进行了改变。

其中数据集包含了五类常见的花卉:雏菊、郁金香、蒲公英、向日葵、玫瑰花等。数据集可以从这里下载

解压完可以看到五个文件夹如下图所示。

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

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

from PIL import Imagefrom PIL import ImageEnhanceimport osimport cv2import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltfrom PIL import Imagefrom keras.preprocessing import image as imageGeneratorimport glob# imageDir="D:/fphotos/flower_photos/train/roses" #要改变的图片的路径文件夹# E:/flower_world-master/flphotos/train/daisyimageDir="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=0for 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))

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

如果觉得《图像分类之花卉图像分类(一)数据增强》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。