深度学习之图像的数据增强

2023-11-06

在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强。数据增强,常用的方式,就是旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变图像尺寸大小,增强图像噪音(一般使用高斯噪音,盐椒噪音)等。但是需要注意,不要加入其他图像轮廓的噪音.

  对于常用的图像的数据增强的实现,如下:

  1 # -*- coding:utf-8 -*-
  2 """数据增强
  3    1. 翻转变换 flip
  4    2. 随机修剪 random crop
  5    3. 色彩抖动 color jittering
  6    4. 平移变换 shift
  7    5. 尺度变换 scale
  8    6. 对比度变换 contrast
  9    7. 噪声扰动 noise
 10    8. 旋转变换/反射变换 Rotation/reflection
 11    author: XiJun.Gong
 12    date:2016-11-29
 13 """
 14 
 15 from PIL import Image, ImageEnhance, ImageOps, ImageFile
 16 import numpy as np
 17 import random
 18 import threading, os, time
 19 import logging
 20 
 21 logger = logging.getLogger(__name__)
 22 ImageFile.LOAD_TRUNCATED_IMAGES = True
 23 
 24 
 25 class DataAugmentation:
 26     """
 27     包含数据增强的八种方式
 28     """
 29 
 30 
 31     def __init__(self):
 32         pass
 33 
 34     @staticmethod
 35     def openImage(image):
 36         return Image.open(image, mode="r")
 37 
 38     @staticmethod
 39     def randomRotation(image, mode=Image.BICUBIC):
 40         """
 41          对图像进行随机任意角度(0~360度)旋转
 42         :param mode 邻近插值,双线性插值,双三次B样条插值(default)
 43         :param image PIL的图像image
 44         :return: 旋转转之后的图像
 45         """
 46         random_angle = np.random.randint(1, 360)
 47         return image.rotate(random_angle, mode)
 48 
 49     @staticmethod
 50     def randomCrop(image):
 51         """
 52         对图像随意剪切,考虑到图像大小范围(68,68),使用一个一个大于(36*36)的窗口进行截图
 53         :param image: PIL的图像image
 54         :return: 剪切之后的图像
 55 
 56         """
 57         image_width = image.size[0]
 58         image_height = image.size[1]
 59         crop_win_size = np.random.randint(40, 68)
 60         random_region = (
 61             (image_width - crop_win_size) >> 1, (image_height - crop_win_size) >> 1, (image_width + crop_win_size) >> 1,
 62             (image_height + crop_win_size) >> 1)
 63         return image.crop(random_region)
 64 
 65     @staticmethod
 66     def randomColor(image):
 67         """
 68         对图像进行颜色抖动
 69         :param image: PIL的图像image
 70         :return: 有颜色色差的图像image
 71         """
 72         random_factor = np.random.randint(0, 31) / 10.  # 随机因子
 73         color_image = ImageEnhance.Color(image).enhance(random_factor)  # 调整图像的饱和度
 74         random_factor = np.random.randint(10, 21) / 10.  # 随机因子
 75         brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)  # 调整图像的亮度
 76         random_factor = np.random.randint(10, 21) / 10.  # 随机因1子
 77         contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)  # 调整图像对比度
 78         random_factor = np.random.randint(0, 31) / 10.  # 随机因子
 79         return ImageEnhance.Sharpness(contrast_image).enhance(random_factor)  # 调整图像锐度
 80 
 81     @staticmethod
 82     def randomGaussian(image, mean=0.2, sigma=0.3):
 83         """
 84          对图像进行高斯噪声处理
 85         :param image:
 86         :return:
 87         """
 88 
 89         def gaussianNoisy(im, mean=0.2, sigma=0.3):
 90             """
 91             对图像做高斯噪音处理
 92             :param im: 单通道图像
 93             :param mean: 偏移量
 94             :param sigma: 标准差
 95             :return:
 96             """
 97             for _i in range(len(im)):
 98                 im[_i] += random.gauss(mean, sigma)
 99             return im
100 
101         # 将图像转化成数组
102         img = np.asarray(image)
103         img.flags.writeable = True  # 将数组改为读写模式
104         width, height = img.shape[:2]
105         img_r = gaussianNoisy(img[:, :, 0].flatten(), mean, sigma)
106         img_g = gaussianNoisy(img[:, :, 1].flatten(), mean, sigma)
107         img_b = gaussianNoisy(img[:, :, 2].flatten(), mean, sigma)
108         img[:, :, 0] = img_r.reshape([width, height])
109         img[:, :, 1] = img_g.reshape([width, height])
110         img[:, :, 2] = img_b.reshape([width, height])
111         return Image.fromarray(np.uint8(img))
112 
113     @staticmethod
114     def saveImage(image, path):
115         image.save(path)
116 
117 
118 def makeDir(path):
119     try:
120         if not os.path.exists(path):
121             if not os.path.isfile(path):
122                 # os.mkdir(path)
123                 os.makedirs(path)
124             return 0
125         else:
126             return 1
127     except Exception, e:
128         print str(e)
129         return -2
130 
131 
132 def imageOps(func_name, image, des_path, file_name, times=5):
133     funcMap = {"randomRotation": DataAugmentation.randomRotation,
134                "randomCrop": DataAugmentation.randomCrop,
135                "randomColor": DataAugmentation.randomColor,
136                "randomGaussian": DataAugmentation.randomGaussian
137                }
138     if funcMap.get(func_name) is None:
139         logger.error("%s is not exist", func_name)
140         return -1
141 
142     for _i in range(0, times, 1):
143         new_image = funcMap[func_name](image)
144         DataAugmentation.saveImage(new_image, os.path.join(des_path, func_name + str(_i) + file_name))
145 
146 
147 opsList = {"randomRotation", "randomCrop", "randomColor", "randomGaussian"}
148 
149 
150 def threadOPS(path, new_path):
151     """
152     多线程处理事务
153     :param src_path: 资源文件
154     :param des_path: 目的地文件
155     :return:
156     """
157     if os.path.isdir(path):
158         img_names = os.listdir(path)
159     else:
160         img_names = [path]
161     for img_name in img_names:
162         print img_name
163         tmp_img_name = os.path.join(path, img_name)
164         if os.path.isdir(tmp_img_name):
165             if makeDir(os.path.join(new_path, img_name)) != -1:
166                 threadOPS(tmp_img_name, os.path.join(new_path, img_name))
167             else:
168                 print 'create new dir failure'
169                 return -1
170                 # os.removedirs(tmp_img_name)
171         elif tmp_img_name.split('.')[1] != "DS_Store":
172             # 读取文件并进行操作
173             image = DataAugmentation.openImage(tmp_img_name)
174             threadImage = [0] * 5
175             _index = 0
176             for ops_name in opsList:
177                 threadImage[_index] = threading.Thread(target=imageOps,
178                                                        args=(ops_name, image, new_path, img_name,))
179                 threadImage[_index].start()
180                 _index += 1
181                 time.sleep(0.2)
182 
183 
184 if __name__ == '__main__':
185     threadOPS("/home/pic-image/train/12306train",
186               "/home/pic-image/train/12306train3")
链接:  http://www.cnblogs.com/gongxijun/p/6117588.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习之图像的数据增强 的相关文章

  • 深度学习之图像的数据增强

    在图像的深度学习中 为了丰富图像训练集 更好的提取图像特征 泛化模型 防止模型过拟合 一般都会对数据图像进行数据增强 数据增强 常用的方式 就是旋转图像 剪切图像 改变图像色差 扭曲图像特征 改变图像尺寸大小 增强图像噪音 一般使用高斯噪音
  • 深度学习中的随机梯度下降(SGD)简介

    随机梯度下降 Stochastic Gradient Descent SGD 是梯度下降算法的一个扩展 机器学习中反复出现的一个问题是好的泛化需要大的训练集 但大的训练集的计算代价也更大 机器学习算法中的代价函数通常可以分解成每个样本的代价
  • 基于Pytorch的模型推理

    训练部分说明 假设我们现在有两个文件 first file train py 用于训练模型 second file inference py 用于推理检测 在train py文件中我们使用了定义了一个类 里面声明了我的网络模型 例如 cla
  • windows下运行pointnet(全)

    放假闲着在家没事 本人突然想跑一下3d深度学习的开山之作 pointnet玩一玩 可是目前网上大部分pointnet的运行教程都是在Ubuntu系统下的 其实本人也曾装过双系统 但是因为我太菜了 在Ubuntu下装完显卡驱动和cuda后切换
  • [NLP] transformers 使用指南

    严格意义上讲 transformers 并不是 PyTorch 的一部分 然而 transformers 与 PyTorch 或 TensorFlow 结合的太紧密了 而且可以把 transformers 看成是 PyTorch 或 Ten
  • 视觉注意力的循环神经网络模型

    我们观察PPT的时候 面对整个场景 不会一下子处理全部场景信息 而会有选择地分配注意力 每次关注不同的区域 然后将信息整合来得到整个的视觉印象 进而指导后面的眼球运动 将感兴趣的东西放在视野中心 每次只处理视野中的部分 忽略视野外区域 这样
  • 目标检测基础

    什么是目标检测 简单来说就是 检测图片中物体所在的位置 本文只介绍用深度学习的方法进行目标检测 同过举出几个特性来帮助各位理解目标检测任务 同时建议学习目标检测应先具备物体人工智能算法基础和物体分类现实基础 特性1 Bounding Box
  • 深度神经网络中的Inception模块介绍

    深度神经网络 Deep Neural Networks DNN 或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出 包括Inception v1 Inception v2 Inception
  • 【pytorch】迁移学习

    在很多场合中 没有必要从头开始训练整个卷积网络 随机初始化参数 因为没有足够丰富的数据集 而且训练也是非常耗时 耗资源的过程 通常 采用pretrain a ConvNet的方式 然后用ConvNet作为初始化或特征提取器 有两种迁移学习
  • libsvm库简介及使用

    libsvm是基于支持向量机 support vector machine SVM 实现的开源库 由台湾大学林智仁 Chih Jen Lin 教授等开发 它主要用于分类 支持二分类和多分类 和回归 它的License是BSD 3 Claus
  • Mac电脑配置李沐深度学习环境[pytorch版本]使用vscode

    文章目录 第一步 M1芯片安装Pytorch环境 安装Miniforge 创建虚拟环境 安装Pytorch 第二步 下载李沐Jupyter文件 第三步 配置vscode 参考 第一步 M1芯片安装Pytorch环境 安装Miniforge
  • LoFTR配置运行: Detector-Free Local Feature Matching with Transformers ubuntu18.04 预训练模型分享

    刚装好系统的空白系统ubuntu18 04安装 首先进入 软件与更新 换到国内源 论文下载 代码下载 1 anaconda 3 5 3 安装 Index of anaconda archive 清华大学开源软件镜像站 Tsinghua Op
  • 2D和3D人体姿态数据集

    转自链接 https www jianshu com p c046db584a21 2D数据集 LSP 地址 http sam johnson io research lsp html 样本数 2k 关节点数 14 全身 单人 FLIC 地
  • deeplearning.ai课程作业:Course 1 Week 2

    deeplearning ai课程作业 Course 1 Week 2 原始作业在GitHub上下载 本文仅作为本人学习过程的记录 含答案 不喜勿看 全部自己跑过 保证可行 Part 1 Python Basics with Numpy o
  • 决策树(Decision Tree)简介

    决策树 Decision Tree 及其变种是另一类将输入空间分成不同的区域 每个区域有独立参数的算法 决策树分类算法是一种基于实例的归纳学习方法 它能从给定的无序的训练样本中 提炼出树型的分类模型 树中的每个非叶子节点记录了使用哪个特征来
  • 可视化工具Netron介绍

    Netron是一种用于神经网络 深度学习和机器学习模型的可视化工具 它可以为模型的架构生成具有描述性的可视化 descriptive visualization 源码在 https github com lutzroeder netron
  • SqueezeNet运用到Faster RCNN进行目标检测+OHEM

    目录 目录 一SqueezeNet介绍 MOTIVATION FIRE MODULE ARCHITECTURE EVALUATION 二SqueezeNet与Faster RCNN结合 三SqueezeNetFaster RCNNOHEM
  • Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

    九 Deep Learning的常用模型或者方法 9 1 AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点 人工神经网络 ANN 本身就是具有层次结构的系统 如果给定一个神经网络 我们假设
  • - UnitBox An Advanced Object Detection Network,arxiv 16.08

    UnitBox An Advanced Object Detection Network arxiv 16 08 download 该论文提出了一种新的loss function IoU loss 这点比较有意思 也容易复现 论文分析了fa
  • 全网最最最轻量级检测网络 yolo-fastest 快速上手

    文章目录 0x01 Yolo Fastest 0x02 Prepare step1 clone step2 make step3 run darknet 0x03 Train step1 获取权重文件 step2 准备数据集 step3 修

随机推荐

  • C# object介绍

    C object介绍 Object类是C 语言仲最原始 最重要得类 是所有类得 祖先 每个C 类都是它得子类 它实现了每个类都必须具有得基本方法 在 Object 类中提供了 4 个常用的方法 即 Equals GetHashCode Ge
  • $(MAKE) -C $(KERNELDIR) M= $(PWD) modules

    转载于 http blog chinaunix net xmlrpc php r blog article uid 29523795 id 4209690 在mini2440资料的LED驱动编程的编译makefile里面看到这样一句话 C是
  • 【华为OD机试 2023】士兵过河(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • 【S-排序】python实现八大排序算法之10-基数排序(RadixSort)

    基数排序 基本思想 基数排序 Radix Sort 是桶排序的扩展 将整数按位数切割成不同的数字 然后按每个位数分别进行了多轮的桶排序 具体实现 从低位开始将待排序的数按照这一位的值放到相应的编号为0 9的桶中 等到低位排完得到一个子序列
  • type-aliases-package不生效问题记录

    项目场景 在mapper xml文件里 我们可能需要用到别名 需要在yml进行配置 mybatis mapperLocations classpath mapper xml type aliases package com example
  • 脚本安装docker 错误解决

    一 脚本安装 CentOS系统上可以使用此脚本进行安装 如下 root localhost curl sSL get docker com o get docker sh root localhost sh get docker sh mi
  • 黑苹果更新后无法开机的拯救思路

    实例 我的黑苹果osx 10 8 5 前段时间app store提示更新smc 我一看发现是黑苹果敏感部件就没更新 谁知重启后依然悲剧 提示fakeSMC出现某个错误 不能开机了 在走了几个弯路后 我总结了下面的方法 首先进win 用mac
  • 堆排序——c语言实现

    文章目录 堆的概念 堆的定义 堆的判断 堆的特性 堆的构造 自底向上构造 自顶向下构造 关于最大堆 最小堆 堆排序 堆排序的一般过程 堆排序样例过程图解 c语言代码 堆的概念 堆的定义 堆可以定义为一颗二叉树 树的节点包含键 每个节点一个键
  • DataX同步数据到StarRocks问题记录

    目录 需求 问题 1 连接失败 2 Too Many Versions 3 特殊字符问题 4 类型转换为问题 5 时区问题 6 权限问题 其他 需求 最近一段时间在做数据治理的数据中台项目 前两天项目上线 整个数据治理的流程是先从数据归集到
  • 【Git】远程仓库的 URL 选择

    Git 远程仓库的 URL 选择 1 远程仓库 URL 1 1 HTTPS URL 2 2 SSH URL 1 远程仓库 URL 远程 URL 是 Git 一种指示 代码存储位置 的绝佳方式 用户只能推送到两类 URL 地址 HTTPS U
  • 两种最基本的MOS管——N沟道与P沟道

    原文地址 http blog sina com cn s blog 4a3946360100ox71 html 在实际项目中 我们基本都用增强型mos管 分为N沟道和P沟道两种 我们常用的是NMOS 因为其导通电阻小 且容易制造 在MOS管
  • For input String "" 类型转换错误

    这是一个非常小的错误 当它发生的时候 发现自己在修改代码的时候就已经给自己埋下了坑 发生这个错误一般是因为 前台界面表单中没有数据 提交到后台之后进行了数据类型转换 所以会出错 因为前台表单中没有数据的时候 传到后台之后是 而不是NULL
  • web前端入门到实战:css3实现半圆和圆效果

    在css2中 如果需要失效一些圆角或者半圆等等效果 一般是要通过ps等软件来处理的 在CSS3中 则不需要了 只需要通过border radius就可以实现 大大方便了开发的效率 无论圆角 圆弧 实心圆 半圆 css3的实现代码都是 bor
  • 200个经典面试题(算法思想+数据结构)_2

    BST 二叉查找树 BST 根节点大于等于左子树所有节点 小于等于右子树所有节点 二叉查找树中序遍历有序 1 修剪二叉查找树 669 Trim a Binary Search Tree Easy Leetcode 力扣 Input 3 0
  • Zotero自定义模板

    Zotero可以很方便给word插上参考文献 这样妈妈也在不用担心引用顺序了 那么问题来了 你引用一个参考文献 其显示的格式最终该是怎样的 比如杂志要加 J 后缀 等等 所以我们需要自定义Zotero的引用模板 模版库 https www
  • Golang 实现一个简单的 http 代理

    本文详细介绍了Golang 实现 http 代理的实现 在实际业务中有需求的同学可以学起来了 代理是网络中的一项重要的功能 其功能就是代理网络用户去取得网络信息 形象的说 它是网络信息的中转站 对于客户端来说 代理扮演的是服务器的角色 接收
  • 02_End-to-End Machine Learning Project_02_stats.sem_Cross_Validation_Grid_Randomized_Ensemble_ Pipel

    02 End to End Machine Learning Project https blog csdn net Linli522362242 article details 103387527 Here are the main st
  • div p、div>p、div+p、div~p、div.a 、p,span的用法和区别

    div p div gt p div p div p div a 的用法和区别 div p 将所有 div 标签里面的 p 标签选中 子标签和孙子辈标签 p div p span Hello World span p span Study
  • 【Apache Spark 】第 4 章Spark SQL 和 DataFrames:内置数据源简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 深度学习之图像的数据增强

    在图像的深度学习中 为了丰富图像训练集 更好的提取图像特征 泛化模型 防止模型过拟合 一般都会对数据图像进行数据增强 数据增强 常用的方式 就是旋转图像 剪切图像 改变图像色差 扭曲图像特征 改变图像尺寸大小 增强图像噪音 一般使用高斯噪音