最近在自学深度学习图像识别,在进行深度学习数据训练的时候,发现自己的数据量太少,就参考网上代码进行数据集扩充,这里把代码放出来,并给出遇到的错误和解决方案,供大家交流学习。

import cv2
import os
import numpy as np
from imgaug import augmenters as iaasometimes = lambda aug: iaa.Sometimes(0.5, aug) #建立lambda表达式,#这里定义sometimes意味有时候做的操作# 实际上在深度学习的模型训练中,数据增强不能喧宾夺主,# 如果对每一张图片都加入高斯模糊的话实际上是毁坏了原来数据的特征,# 因此,我们需要“有时候”做,给这个操作加一个概率。# 定义一组变换方法.
seq = iaa.Sequential([# 选择0到5种方法做变换iaa.SomeOf((0, 5),[iaa.Fliplr(0.5),  # 对50%的图片进行水平镜像翻转iaa.Flipud(0.5),  # 对50%的图片进行垂直镜像翻转#将一些图像转换为它们的超像素表示,每幅图像采样20到200个超像素,# 但是不要用它们的平均值替换所有的超像素,# 只替换其中的一些(p_replace)。sometimes(iaa.Superpixels(p_replace=(0, 1.0),n_segments=(20, 200))),#用高斯模糊,均值模糊,中值模糊中的一种增强。注意OneOf的用法iaa.OneOf([iaa.GaussianBlur((0, 3.0)),iaa.AverageBlur(k=(2, 7)), # 核大小2~7之间,k=((5, 7), (1, 3))时,核高度5~7,宽度1~3iaa.MedianBlur(k=(3, 11)),]),sometimes(iaa.Affine(                          #对一部分图像做仿射变换scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},#图像缩放为80%到120%之间translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)}, #平移±20%之间rotate=(-45, 45),   #旋转±45度之间shear=(-16, 16),    #剪切变换±16度,(矩形变平行四边形))),]  ,  random_order=True)]  ,  random_order=True)
# 图片文件相关路径
path = 'D:\\火狐\\火狐下载\\test_pic\\'
y = os.path.exists('D:\\火狐\\火狐下载\\exp_pic\\')
if y == 1:savedpath = 'D:\\火狐\\火狐下载\\exp_pic\\'
else:os.mkdir('D:\\火狐\\火狐下载\\exp_pic\\')savedpath = 'D:\\火狐\\火狐下载\\exp_pic\\'
imglist=[]
filelist = os.listdir(path)  #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。
# 遍历要增强的文件夹,把所有的图片保存在imglist中
for item in filelist:img = cv2.imdecode(np.fromfile(path+item,dtype=np.uint8),-1)# print('item is ', item)# print('img is ',img.shape)imglist.append(img)# print('imglist is ' ,imglist)
print('all the picture have been appent to imglist')#对文件夹中的图片进行增强操作,循环5次
for count in range(5):images_aug = seq.augment_images(imglist)for index in range(len(images_aug)):filename = str(count) + str(index) + '.jpg'# 保存图片# cv2.imwrite(savedpath + filename, images_aug[index])cv2.imencode(".jpg", images_aug[index])[1].tofile(savedpath+filename)# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样print('image of count%s index%s has been writen' % (count, index))
  1. 遇到的问题
    在读取图片和保存图片的时候,会有这样几个错误

1.1 路径的问题:

windows系统下路径使用双斜线“\”分割,Linux系统使用但斜线“\”。

1.2 cv2不支持中文路径

如果是中文路径的话,OpenCV 函数cv2.imread()、cv2.imwrite()在读取含有中文路径及以中文命名的文件时,会报错,主要原因是因为cv2.imread()、cv2.imwrite()不支持中文。.
此时不会报错但是只返回None
解决方法就是先用先用np.fromfile()读取为np.uint8格式,再使用cv2.imdecode()解码
保存的时候也要修改

第一次修改

后面在操作的过程出现了这样的错误:
Corrupt JPEG data: 131072 extraneous bytes before marker 0xe2
AttributeError: ‘NoneType’ object has no attribute ‘ndim’
这两个其实属于共同的原因,都是因为这里

img = cv2.imdecode(np.fromfile(path+item,dtype=np.uint8),-1)

返回值为None,因为图片格式出错或者图片有损失导致。 因此在下面加上判断语句,将这样的图片给删除了就好了。其他的不用变

if img is None:os.remove(path+item)continue

深度学习图片数量较少扩充数据集的方法相关推荐

  1. 在深度学习中处理不均衡数据集

    在深度学习中处理不均衡数据集 hard negative mining online hard sample mining https://blog.csdn.net/jacke121/article ...

  2. 转载 | 深度学习中的遥感影像数据集

    本文转载自博主GISer_Lin原创文章<深度学习中的遥感影像数据集> 点击此处转跳原文 以下数据集均为网上开源数据集,若有遗误或不慎涉及侵权,烦请评论或留言联系 目前本项目共整理 场景分 ...

  3. 深度学习中的遥感影像数据集

    [转载]深度学习中的遥感影像数据集 收集网络上公开的遥感数据集,欢迎补充 Ref: https://blog.csdn.net/weixin_36670529/article/details/8458 ...

  4. DeepRMethylSite:一种基于深度学习的蛋白质精氨酸甲基化位点预测方法

    DeepRMethylSite:一种基于深度学习的蛋白质精氨酸甲基化位点预测方法 https://www.researchgate.net/publication/341890599_DeepRMet ...

  5. 基于深度学习模型的电力变压器故障声音诊断方法研究-论文阅读笔记

    基于深度学习模型的电力变压器故障声音诊断方法研究 论文来源 DOI:10.16311/j.audioe.2020.01.020 论文目的 在变压器不停止工作的情况下,基于变压器的三种状态:正常.老化和 ...

  6. 深度学习推荐系统中各类流行的Embedding方法

    Embedding技术概览: 对其它Embedding技术不熟悉,可以看我的上一篇文章:深度学习推荐系统中各类流行的Embedding方法(上) Graph Embedding简介 Word2Vec和 ...

  7. 深度学习中不得不学的Graph Embedding方法

    原文链接:https://zhuanlan.zhihu.com/p/64200072 深度学习中不得不学的Graph Embedding方法 王喆 ​ 数据挖掘等 3 个话题下的优秀答主 ​ 关注他 ...

  8. DeepEye:一个基于深度学习的程序化交易识别与分类方法

    DeepEye:一个基于深度学习的程序化交易识别与分类方法 徐广斌,张伟 上海证券交易所资本市场研究所,上海 200120  上海证券交易所产品创新中心,上海 200120    摘要:基于沪市A股交 ...

  9. 深度学习推荐系统中各类流行的Embedding方法(下)

    我的个人微信公众号: Microstrong 微信公众号ID: MicrostrongAI 微信公众号介绍: Microstrong(小强)同学主要研究机器学习.深度学习.推荐系统.自然语言处理.计算 ...

  10. python 分类变量编码_深度学习编码分类变量的3种方法——AIU人工智能学院

    :数据科学.人工智能从业者的在线大学. 数据科学(Python/R/Julia) 作者 | CDA数据分析师 像Keras中的机器学习和深度学习模型一样,要求所有输入和输出变量均为数字. 这意味着,如 ...

最新文章

  1. Mysql学习总结(14)——Mysql主从复制配置
  2. 服务器系统加速,系统加速技巧:让Linux启动更加快速
  3. linux搭建mq环境,Linux搭建servicemix、activemq环境
  4. Python 日志模块Loguru的使用
  5. 微信开发 网页授权获取用户基本信息
  6. python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例
  7. 什么从什么写短句_2020抖音文案短句:爱情、励志、伤感合集,值得收藏!
  8. 如何制定自动化测试战略?10年经验让我考虑这些关键要素!
  9. 统计一句话中每个字母出现的次数
  10. vs2008+sqlserver2008 同一台服务器webconfig 数据连接串的配置要点
  11. mysql 随机取数组_sql语句实现随机取n条数据(转)
  12. 高德地图经纬度距离数据库排序,Spring Data JPA,Kotlin 实现版本
  13. 安卓短信转发qq邮箱
  14. 2019QS世界大学学科排名重磅发布!
  15. OpenGL ES 实现瘦脸大眼效果
  16. 【安卓】——Autofill Framework(自动填写)用法详解
  17. Python or html爱心代码(听说最近很火)
  18. RocketMQ保姆级教程
  19. 面试题:圣杯布局,双飞翼布局了解吗
  20. 口袋妖怪 java_java – 口袋妖怪黄色包裹过渡

热门文章

  1. 互联网周刊:O2O商业模式剖析
  2. cad批量交点打断 lisp_【悬赏5明经币求程序】求交点打断的lisp
  3. Graph Neural Network-Based Anomaly Detection in Multivariate Time Series 代码配置及解析
  4. 直接拿来用!最火的前端开源项目
  5. Focal Loss讲解
  6. 道场与世间修行的区别
  7. [组原]初识-地址总线,地址寄存器,存储单元,存储字长
  8. 巴西游戏出海攻略,优质游戏出海市场
  9. coredump 瘦身风云
  10. 瑞尔森大学计算机网络专业怎么样,瑞尔森大学怎么样?