• 我学习深度学习写代码的时候，数据集...这里是我找到的扩充数据集的方法，对图像进行亮度增强、对比度增强、水平翻转和随机方向旋转，我的1406张图扩充到了7030张。 变换程序 from PIL import ImageEnhance import...

我学习深度学习写代码的时候，数据集图像太少只有1406张还分4个类别，一个类别只有300来张，再分为train、valid和test，图像就更少了，训练的图像少，深度学习的准确度就会不高。
这里是我找到的扩充数据集的方法，对图像进行亮度增强、对比度增强、水平翻转和随机方向旋转，我的1406张图扩充到了7030张。

• 变换程序
from PIL import ImageEnhance
import os
import numpy as np
from PIL import Image

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.5
brightness = 1.5
image_brightened = enh_bri.enhance(brightness)
return image_brightened

def 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.5
contrast = 1.5
image_contrasted = enh_con.enhance(contrast)
return image_contrasted

def rotation(root_path, img_name):
img = Image.open(os.path.join(root_path, img_name))
random_angle = np.random.randint(-2, 2)*90
if 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_img

def 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_img

def createImage(imageDir,saveDir):
i=0
for name in os.listdir(imageDir):
i=i+1
saveName="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))
saveName3 = "rotate" + str(i) + ".jpg"
saveImage = rotation(imageDir, name)
saveImage.save(os.path.join(saveDir, saveName3))

• 调用程序
from test3 import createImage

imageDir="C:/Users/lenovo/Desktop/maize/3" #要改变的图片的路径文件夹
saveDir="C:/Users/lenovo/Desktop/maize/3"   #数据增强生成图片的路径文件夹
createImage(imageDir,saveDir)

这里的test3就是上一段程序（变换程序）的文件名，你的变换程序取什么名字就用什么名。createImage就是变换程序中的最后一个函数，只需要调用这个就行了，这里生成的图你可以和原图放在一起，也可以放到别的文件夹里。

希望对你有帮助！

参考博客

展开全文
• ## 图片数据集扩充

千次阅读 2018-10-30 15:44:35
#-*- coding: UTF-8 -*- from PIL import Image import random import os #读取文件内的所有,迭代 ...def read_file_all(data_dir_path,save_dir): for f in os.listdir(data_dir_path): ...
#-*- coding: UTF-8 -*-

from PIL import Image
import random
import os

#读取文件内的所有,迭代

for f in os.listdir(data_dir_path):
data_file_path = os.path.join(data_dir_path, f)
if os.path.isfile(data_file_path):
image_rotate(data_file_path,save_dir)
#print(collected)
else:

def image_rotate(image_path,save_dir):
#读取图像
im = Image.open(image_path)
# 指定逆时针旋转的角度
save_path = save_dir + random_name() + '.jpg'
im.save(save_path)

im_rotate1 = im.rotate(90)
save_path = save_dir + random_name() + '.jpg'
im_rotate1.save(save_path)

im_rotate2 = im.rotate(180)
save_path = save_dir + random_name() + '.jpg'
im_rotate2.save(save_path)

im_rotate3 = im.rotate(270)
save_path = save_dir + random_name() + '.jpg'
im_rotate3.save(save_path)

def random_name():
#随机数
a_list = ['0','1','2','3','4','5','6','7','8','9']
name = random.sample(a_list,5)
file_name = "".join(name)
return file_name

if __name__ == '__main__':
data_dir_path = 'E:/image_class/data2/train/cat/' #读取的文件路径
save_dir = 'E:/image_class/data2/train/cats/'#保存的文件路径

展开全文
• ​因为在处理现实问题是，图片或者数据往往有很多的格式和属性，这时就引入我们此时的TFRecord的输入数据格式，以方便我们对数据更好的管理和处理。总之将我们已有的数据转换为TFRecord格式有很多的好处，所以我们要...

本人以下程序经过亲自测试都可使用！！！

## TFRecord输入数据格式

为什么要把数据转化为TFRecord格式

​因为在处理现实问题是，图片或者数据往往有很多的格式和属性，这时就引入我们此时的TFRecord的输入数据格式，以方便我们对数据更好的管理和处理。总之将我们已有的数据转换为TFRecord格式有很多的好处，所以我们要去使用这种方法对数据进行处理。

TFRecord样例程序

​ 以下的程序将告诉我们如何讲MNIST输入数据转化为TFRecord的格式，以及如何读取TFRecord格式文件。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np

#1.将输入转化成TFRecord格式并保存

# 定义函数转化变量类型。
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

# 将数据转化为tf.train.Example格式。
def _make_example(pixels, label, image):
image_raw = image.tostring()
example = tf.train.Example(features=tf.train.Features(feature={
'pixels': _int64_feature(pixels),
'label': _int64_feature(np.argmax(label)),
'image_raw': _bytes_feature(image_raw)
}))
return example

# 读取mnist训练数据。
images = mnist.train.images
labels = mnist.train.labels
pixels = images.shape[1]
num_examples = mnist.train.num_examples

# 输出包含训练数据的TFRecord文件。
with tf.python_io.TFRecordWriter("output.tfrecords") as writer:
for index in range(num_examples):
example = _make_example(pixels, labels[index], images[index])
writer.write(example.SerializeToString())
print("TFRecord训练文件已保存。")

# 读取mnist测试数据。
images_test = mnist.test.images
labels_test = mnist.test.labels
pixels_test = images_test.shape[1]
num_examples_test = mnist.test.num_examples

# 输出包含测试数据的TFRecord文件。
with tf.python_io.TFRecordWriter("output_test.tfrecords") as writer:
for index in range(num_examples_test):
example = _make_example(
pixels_test, labels_test[index], images_test[index])
writer.write(example.SerializeToString())
print("TFRecord测试文件已保存。")

#2.读取TFRecord文件

# 读取文件。
filename_queue = tf.train.string_input_producer(["output.tfrecords"])

# 解析读取的样例。
features = tf.parse_single_example(
serialized_example,
features={
'image_raw':tf.FixedLenFeature([],tf.string),
'pixels':tf.FixedLenFeature([],tf.int64),
'label':tf.FixedLenFeature([],tf.int64)
})

images = tf.decode_raw(features['image_raw'],tf.uint8)
labels = tf.cast(features['label'],tf.int32)
pixels = tf.cast(features['pixels'],tf.int32)

sess = tf.Session()

# 启动多线程处理输入数据。
coord = tf.train.Coordinator()

for i in range(10):
image, label, pixel = sess.run([images, labels, pixels])

以上的程序可以将MNIST数据集所有的训练数据储存到一个TFRecord文件中。同样，在数据集较大的情况下，我们也可以将数据写入到多个TFRecord文件中。

## 图像数据处理

​在之前的学习中，我们一直使用的是图像的矩阵。现在我们来引入数据的图像，对图像进行预处理。通过对图像的预处理，可以尽量避免模型受到无关因素的影响。

TensorFlow图像处理函数

输出原始矩阵和原始图像

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

# 输出图像的原始矩阵
with tf.Session() as sess:
img_data = tf.image.decode_jpeg(image_raw_data)

print(img_data.eval())
img_data.set_shape([1797, 2673, 3])
print(img_data.get_shape())
# 输出原始图像
# 此处的plt是matplotlib.pyplot的绘图功能
with tf.Session() as sess:
plt.imshow(img_data.eval())
plt.show()

对图像进行调整大小

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

# 如果直接以0-255范围的整数数据输入resize_images，那么输出将是0-255之间的实数，
# 不利于后续处理。本书建议在调整图片大小前，先将图片转为0-1范围的实数。
with tf.Session() as sess:
img_data = tf.image.convert_image_dtype(img_data, dtype = tf.float32)
resized = tf.image.resize_images(img_data, [100, 100], method = 0)
plt.imshow(resized.eval())
plt.show()

对图像按照百分百进行裁剪

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

# 按照50%进行剪裁
with tf.Session() as sess:
central_cropped = tf.image.central_crop(img_data, 0.5)
plt.imshow(central_cropped.eval())
plt.show()

对图片亮度进行处理

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

with tf.Session() as sess:
image_float = tf.image.convert_image_dtype(img_data, tf.float32)
# 在[-max_delta, max_delta)的范围随机调整图片的亮度。
plt.show()

对图像添加标记框

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

with tf.Session() as sess:
boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

# sample_distorted_bounding_box要求输入图片必须是实数类型。
image_float = tf.image.convert_image_dtype(img_data, tf.float32)

begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
tf.shape(image_float), bounding_boxes=boxes, min_object_covered=0.4)

# 截取后的图片
distorted_image = tf.slice(image_float, begin, size)
plt.imshow(distorted_image.eval())
plt.show()

# 在原图上用标注框画出截取的范围。由于原图的分辨率较大（2673x1797)，生成的标注框
# 在Jupyter Notebook上通常因边框过细而无法分辨，这里为了演示方便先缩小分辨率。
image_small = tf.image.resize_images(image_float, [180, 267], method=0)
batchced_img = tf.expand_dims(image_small, 0)
image_with_box = tf.image.draw_bounding_boxes(batchced_img, bbox_for_draw)
print(bbox_for_draw.eval())
plt.imshow(image_with_box[0].eval())
plt.show()

## 总结

​通过以上的方法能够实现一张训练图像衍生出很多训练样本。通过将训练图像进行预处理，训练得到的神经网络模型可以识别不同大小、方位、色彩等方面的实体。通过这种方法可以弱化图像的颜色、亮度等这些因素对最终分析结果的影响。

展开全文
• 1、为何要增广数据集呢？ 因为我们平时自己用来训练的数据集需要自己制作。公共数据集无法满足自己的针对性需求。 2、增广的方法有哪些？ 水平翻转增强，垂直翻转增强，镜像对称增强，仿射变化，旋转，高斯加噪...

1、为何要增广数据集呢？ VOC 格式

因为我们平时自己用来训练的数据集需要自己制作。公共数据集无法满足自己的针对性需求。

2、增广的方法有哪些？

水平翻转增强，垂直翻转增强，镜像对称增强，仿射变化，旋转，高斯加噪，对比度变化，尺度变换，平移等增强方法，
3、数据集格式？

第一种 文件或者文件夹代表标签，不需要对图像中的目标进行打标签。

第二种 通过打框来进行标注：缺点是 麻烦 工作量大。

办法一： 通过代码：

常用的几种   反转：

I = fliplr(bmp);

平移：

se= translate(strel(1), [y, x]);
Img = imdilate(bmp, se);

旋转：

I = imrotate(bmp, 10, 'bilinear', 'crop');

加噪声：

I1 = imnoise(bmp, 'salt & pepper'); %椒盐噪声
w = [1 2 1; 2 4 2; 1 2 1];
I2 = imfilter(bmp, w, 'corr', 'replicate'); %高斯噪声
w = [1 1 1; 1 1 1; 1 1 1] / 9;
I3 = imfilter(bmp, w, 'corr', 'replicate'); %平均平滑
I4 = medfilt2(bmp, [3, 3]);  %中值滤波

等等，，，，，这里不一一举例。

还有一种就是通过软件：直接扩充数据集，标签自动生成对齐。

### 2、数据集增强软件。  软件集成了水平翻转增强，垂直翻转增强，镜像对称增强，仿射变化，旋转，高斯加噪，对比度变化，尺度变换，平移一共8中增强方法， 图片变化的方式，自动生成并写入xml文件，十分方便） 软件作用：  扩大训练样本集来提高网络识别精度，减少人工标注工作量（因为已经可以自动产生label文件也就是xml文件了）

效果图如下：

需要软件的加我QQ:410834611（伸手党勿加）

展开全文
• ## keras小数据集扩充

万次阅读 2017-09-13 13:31:05
在本文中，将使用VGG-16模型提供一种面向小数据集（几百张到几千张图片）构造高效、实用的图像分类器的方法并给出试验结果。 本文将探讨如下几种方法： 从图片中直接训练一个小网络（作为基准方法） ...
• 借鉴：... ... 注：由于我的数据集是用来做人脸识别的，所以图像集的扩充应该在左右颠倒，随机调整亮度与对比度。 可以加椒盐噪声：注释部分解除即可。 理论上加高斯模糊也可以，不过这些数据已经...
• 解决图像数据集不足 将数据集每个图像分割成几部分（下面例子是把一张图像分为9部分，根据自己需要修改参数） from PIL import Image import sys import os def cut_image(image): width, height = image.size ...
• 数据增强相关实现总结如下： import cv2 import numpy as np import tensorflow as tf import imutils import skimage import pillow path = '/home/zhangwei/workfiles/deeplearning/dogVScat/data/cat_1.jpg' img...
• 1.HSV颜色空间 ... HSV模型，是针对用户观感的一种颜色模型，侧重于色彩表示，什么颜色、深浅如何、明暗如何 HSV在用于指定颜色分割时，有比较大的作用 ...2.HSV颜色空间中，相比如RGB的优缺点 ...优点：相对于RGB空间，...
• 原地址：https://blog.csdn.net/weixin_41803874/article/details/81201699
• 最近在自学深度学习图像识别，在进行深度学习数据训练的时候，发现自己的数据量太少，就参考网上代码进行数据集扩充，这里把代码放出来，并给出遇到的错误和解决方案，供大家交流学习。 import cv2 import os ...
• keras在使用时候扩充数据集图片，但是图片出现了一定的问题，四周出现了长条状东西，更换了填充模式还是存在 import os from keras.preprocessing.image import ImageDataGenerator,img_to_array,load_img ...
• @[TOC]深度学习中以原始数据为基础扩充数据集时，如何方便快捷的为扩充数据打label 在我们为深度学习做数据集的过程中，如果原始图片比较少，往往需要通过我们模仿外界条件为原始图像添加噪声、调整亮度等操作扩充...
• 它可以对train数据进行变形处理，起到数据增广的作用，在数据集比较小，数据量远远不够的情况下，可以对图片进行翻转、随机剪裁等操作以增加数据，制造出更加多的样本，提高度图片的利用率。核心功能代码在cifar10_...
• opencv扩充图像训练数据集，图像合成。
• 在本文中，将使用VGG-16模型提供一种面向小数据集（几百张到几千张图片）构造高效、实用的图像分类器的方法并给出试验结果。 本文将探讨如下几种方法： 从图片中直接训练一个小网络（作为基准方法） 利用...
• 但旋转在某些特定任务中尤为重要，笔者最近的遥感图像检测和血细胞检测项目采用的都是俯瞰视角，这种情况下，训练数据集的旋转操作可以使得网络具有方向的鲁棒性。  初步发现，api中常规的预处理操作是...
• 为了尽量利用我们有限的训练数据， 我们将通过一系列随机变换对数据进行提升， 这样我们的模型将看不到任何两张完全相同的图片， 这有利于我们抑制过拟合， 使得模型的泛化能力更好。 在Keras中， 这个步骤可以通过...
• 摘要：本文对机器学习中的UCI数据集进行介绍，带你从UCI数据集官网出发一步步深入认识数据集，并就下载的原始数据详细讲解了不同类型的数据集整理如何通过程序进行整理。为了方便使用，博文中附上了包括数据集整理及...
• 数据集概述 对于多类别图片数据集采集，在采集完成之后，采集设备可能是不同的手机或者摄像头，因此获取的最后图片数据集尺寸大小，分辨率可能差异性很大，对之后的模型训练有很大的影响；因此我们需要将数据集中的...
• imgaug是一个python库，可帮助您为机器学习项目扩充图像。它将一组输入图像转换为一组稍有变化的新的，更大的图像。 This python library helps you with augmenting images for your machine learning projects....
• 俺上个程序说的是在深度学习的趋势下扩充数据集的问题，并附了代码和demo，这次的博客就是上个代码的升级版，提取目标的数据扩充 话不多说，直接上代码和demo 代码如下： #include &lt;cv.h&gt; ...
• 有时候图像过大，或者是图像的数量不够，可以把原始图像切割成四份扩充数据集。 import cv2 import os if __name__ == "__main__": #图像文件原始路径 path = r"C:\study_he\exp_result\high\train\high_image" ...
• 4用于cifar10的卷积神经网络-4.4/4.5cifar10数据集读取和数据增强扩充(上/下) 参考： https://github.com/tensorflow http://www.cs.toronto.edu/~kriz/cifar.html http://tensorflow.org/tutorials/deep_cnn/ ...
• 问题描述：使用labelme标注的picture和json 总数量太少（即样本太少，无法满足训练的要求），因此预先对已经标注的图片进行随机裁剪和创建对应的json串，以增加数据量； # -*- coding: utf-8 -*- import os import...
•   在机器学习任务中，存在数据集类别失衡的情况，那么解决类别失衡的方法是1.上采样即：扩充样本较少的类数据直到跟样本多的类差不多为止；或者用下采样即：在样本多的类中随机剔除部分数据。   针对上采样的话...
• 3.工作服(反光衣)数据集扩充方案 0.摘要 本文开源1个工作服(反光衣)检测数据集(含标注)和预训练模型，此项目已经上传github，欢迎star。 马上更新 1.开源项目github链接 https://github.com/gengyanlei/...

...