深度学习中的数据增强技术(二)

上篇文章介绍了深度学习中数据增强技术的应用,及部分TensorFlow实现代码。废话不说了,这篇接着介绍:

TensorFlow实现图片数据增强

注:类似的方法放在了代码中注释的部分,实际调试时可以分别打开运行

③图像色彩调整

import  matplotlib.pyplot as plt
import tensorflow as tf

# 读取图片
image_data = tf.gfile.FastGFile("data/dog3.jpg", ‘br‘).read()
# 4中调整图片大小的方法,实际应用中可以根据需求组合调整
with tf.Session() as sess:
   img_data = tf.image.decode_jpeg(image_data)
   plt.imshow(img_data.eval())
   plt.show()

   # 将图片数据转换成实数类型
   img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32)
   # 亮度
   # adjusted = tf.image.adjust_brightness(img_data,0.5)
   # adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)

   # adjusted = tf.image.adjust_brightness(img_data, -0.5)
   # adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)

   # adjusted = tf.image.random_brightness(img_data,0.5)

   # 对比度
   # adjusted = tf.image.adjust_contrast(img_data,0.5)
   # adjusted = tf.image.adjust_contrast(img_data, 5)
   # adjusted = tf.image.random_contrast(img_data,0.1,5)
   # 色相
   # adjusted = tf.image.adjust_hue(img_data,0.3)
   # adjusted = tf.image.adjust_hue(img_data, 0.1)
   # adjusted = tf.image.adjust_hue(img_data, 0.9)
   # adjusted = tf.image.adjust_hue(img_data, 0.6)
   # adjusted = tf.image.random_hue(img_data,0.5)
   # 饱和度
   adjusted = tf.image.adjust_saturation(img_data,-5)
   # adjusted = tf.image.adjust_saturation(img_data, 5)
   # adjusted = tf.image.random_saturation(img_data,2,5)
   # 图像标准化 均值为0 方差变为1
   # adjusted = tf.image.per_image_standardization(img_data)
   plt.imshow(adjusted.eval())
   plt.show()
 

图片效果

原图:

处理后:

④标注、裁剪

import  matplotlib.pyplot as plt
import tensorflow as tf

# 读取图片
image_data = tf.gfile.FastGFile("data/dog3.jpg", ‘br‘).read()
#
with tf.Session() as sess:
   img_data = tf.image.decode_jpeg(image_data)
   plt.imshow(img_data.eval())
   plt.show()

   # 将图片数据转换成实数类型
   img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32)
   # 将图片缩小一些,这样可视化能让标注框更加清楚
   img_data = tf.image.resize_images(img_data,[180,267],method=1)
   batched = tf.expand_dims(tf.image.convert_image_dtype(img_data,tf.float32),0)
   boxes = tf.constant([[[0.05,0.05,0.9,0.7],[0.28,0.36,0.62,0.56]]])
   result = tf.image.draw_bounding_boxes(batched,boxes=boxes)
   plt.imshow(result[0].eval())
   plt.show()
   # print(result)
   # 随机截取图片
   begin,size,bbox_for_draw =tf.image.sample_distorted_bounding_box(tf.shape(img_data),bounding_boxes=boxes,min_object_covered=0.4)
   batched = tf.expand_dims(tf.image.convert_image_dtype(img_data,tf.float32),0)
   image_with_box = tf.image.draw_bounding_boxes(batched,bbox_for_draw)
   distored_image = tf.slice(img_data,begin,size=size)
   plt.imshow(distored_image.eval())
   plt.show()
 

图片效果

关注公众号“从机器学习到深度学习那些事”获取更多最新资料

代码整合总结

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

‘‘‘
给定一张图片,随机调整图像的色彩。因为调整亮度、对比度、饱和度和色相的顺序会影响最后得到的结果,所以可以定义多种不同的顺序。
具体使用哪一种顺序可以在训练数据预处理时随机的选择一种。这样可以进一步降低无关因素对模型的影响
‘‘‘
def distort_color(image, color_ordering=0):
   if color_ordering == 0:
       image = tf.image.random_brightness(image, max_delta=32. / 255)
       image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
       image = tf.image.random_hue(image, max_delta=0.2)
       image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
   elif color_ordering == 1:
       image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
       image = tf.image.random_brightness(image, max_delta=32. / 255)
       image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
       image = tf.image.random_hue(image, max_delta=0.2)
   elif color_ordering == 2:
       image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
       image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
       image = tf.image.random_hue(image, max_delta=0.2)
       image = tf.image.random_brightness(image, max_delta=32. / 255)
       # 还可以添加其他的排列
   else:
       image = tf.image.random_contrast(image, lower=0.5, upper=1.5)
       image = tf.image.random_brightness(image, max_delta=32. / 255)
       image = tf.image.random_hue(image, max_delta=0.2)
       image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
   return tf.clip_by_value(image, 0.0, 1.0)

def preprocess_for_train(image, height, width, bbox):
   # 如果没有提供标准框,则认为整个图像就是需要关注的部分
   if bbox is None:
       bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4])
   # 转换图像张量的类型:
   if image.dtype != tf.float32:
       image = tf.image.convert_image_dtype(image, dtype=tf.float32)
   # 随机截取图像,减少需要关注的物体大小对图像识别算法的影响
   # 为图像生成一个随机distorted的边框,Generate a single randomly distorted bounding box for an image
   bbox_begin, bbox_size, _ = tf.image.sample_distorted_bounding_box(tf.shape(image), bounding_boxes=bbox,min_object_covered=0.4)
   distorted_image = tf.slice(image, bbox_begin, bbox_size)

   # 将随机截取的图像调整为神经网络输入层的大小。大小调整的算法是随机选择的。
   distorted_image = tf.image.resize_images(distorted_image, [height, width], method=np.random.randint(4))
   # 随机左右翻转图像
   distorted_image = tf.image.random_flip_left_right(distorted_image)
   # 使用一种随机的顺序处理图像的色彩
   distorted_image = distort_color(distorted_image, np.random.randint(2))
   return distorted_image

image_raw_data = tf.gfile.FastGFile("./data/dog1.jpg", ‘br‘).read()

with tf.Session() as sess:
   image_data = tf.image.decode_jpeg(image_raw_data)
   bboxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

   # 运行6次获得6中不同的图片,展示出来
   for i in range(6):
       result = preprocess_for_train(image_data, 299, 299, bboxes)
       plt.imshow(result.eval())
       plt.show()

参考资料

21个项目玩转深度学习

TensorFlow实战Google深度学习框架

原文地址:https://www.cnblogs.com/ziyan09/p/10412722.html

时间: 2024-07-31 11:22:38

深度学习中的数据增强技术(二)的相关文章

资深程序员带你玩转深度学习中的正则化技术(附Python代码)!

目录 1. 什么是正则化? 2. 正则化如何减少过拟合? 3. 深度学习中的各种正则化技术: L2和L1正则化 Dropout 数据增强(Data augmentation) 提前停止(Early stopping) 4. 案例:在MNIST数据集上使用Keras的案例研究 1. 什么是正则化? 在深入该主题之前,先来看看这几幅图: 之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好. 换句话说,从左向右,模型的复杂度在增加以至于训练

StartDT AI Lab | 数据增强技术如何实现场景落地与业务增值?

有人说,「深度学习“等于”深度卷积神经网络算法模型+大规模数据+云端分布式算力」.也有人说,「能够在业内叱咤风云的AI都曾“身经百战”,经历过无数次的训练与试错」.以上都需要海量数据做依托,对于那些数据量匮乏的领域,就衍生出了数据增强技术.即,根据一个原始数据,稍作改动,变成一个对于AI来说的全新的数据. 01 为什么做数据增强? 数据规模的重要性到底怎样呢?可以说,深度学习的火热和蓬勃发展,直接源于普林斯顿大学教授李飞飞及她所带领的团队创作的一个包含百万级图片的数据集ImageNet.工业级人

卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮助您彻底理解卷积. 已经有一些关于深度学习卷积的博客文章,但我发现他们都对不必要的数学细节高度混淆,这些细节没有以任何有意义的方式进一步理解.这篇博客文章也会有很多数学细节,但我会从概念的角度来看待他们,在这里我用每个人都应该能够理解的图像表示底层数学.这篇博文的第一部分是针对任何想要了解深度学习中

浅谈深度学习中潜藏的稀疏表达

浅谈深度学习中潜藏的稀疏表达 “王杨卢骆当时体,轻薄为文哂未休. 尔曹身与名俱灭,不废江河万古流.” — 唐 杜甫<戏为六绝句>(其二) [不要为我为啥放这首在开头,千人千面千理解吧] 深度学习:概述和一孔之见 深度学习(DL),或说深度神经网络(DNN), 作为传统机器学习中神经网络(NN).感知机(perceptron)模型的扩展延伸,正掀起铺天盖地的热潮.DNN火箭般的研究速度,在短短数年内带来了能“读懂”照片内容的图像识别系统,能和人对话到毫无PS痕迹的语音助手,能击败围棋世界冠军.引

深度学习中得数学,高效计算基础与线性分类器

深度学习说到底就是要调节网络中得权重,使网络的分类结果更接近于训练值.这个重复迭代的过程又是一个线性回归的问题.在这种可能会用到高数,线性代数,概率论中的知识. 一.数学基础提一提. 1.高数中得知识. 高数中最重要的就是微积分了,那在深度学习中出现最多的一个概念就是梯度.什么是梯度呢?要说导数,学过高数的肯定都知道.其实梯度就是当把标量x变成向量X时,对X求导就是梯度.那为什么要用梯度呢?因为梯度等于0在凸函数中往往代表着一个极小值点.我们要求得就是损失函数的极小值,这正是我们需要的.梯度是指

深度学习中的Data Augmentation方法(转)基于keras

在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation 2. Regularization. 数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大. 通过在Loss Function 后面加上正则项可以抑制过拟合的产生. 缺点是引入了一个需要手动调整的hyper-parameter. 详见 https://www.wikiwand.c

干货 | 深入理解深度学习中的激活函数

理解深度学习中的激活函数 在这个文章中,我们将会了解几种不同的激活函数,同时也会了解到哪个激活函数优于其他的激活函数,以及各个激活函数的优缺点. 1. 什么是激活函数? 生物神经网络是人工神经网络的起源.然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似.不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的. 一个典型神经元的物理结构由细胞体.向其他神经元发送信息的轴突以及从其他神经元接受信号或信息的树突组成. ? 图

zz深度学习中的注意力模型

中间表示: C -> C1.C2.C3 i:target -> IT j: source -> JS sim(Query, Key) -> Value Key:h_j,类似某种“basis”: 从图9可以引出另外一种理解,也可以将Attention机制看作一种软寻址(SoftAddressing):Source可以看作存储器内存储的内容,元素由地址Key和值Value组成,当前有个Key=Query的查询,目的是取出存储器中对应的Value值,即Attention数值.通过Quer

[转] 深度学习中的注意力机制

from: https://zhuanlan.zhihu.com/p/37601161 注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理.语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影.所以,了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要. 人类的视觉注意力 从注意力模型的命名方式看,很明显其借鉴了人类的注意力机制,因此,我们首先简单介绍人类视觉的选择性注意力机制. 图1 人类的视觉注意力 视觉注意力机制是人类视觉所特有的大