深度学习中图片数据增强方法

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习中图片数据增强方法相关的知识,希望对你有一定的参考价值。

简 介: 在深度学习中需要对图像进行不同的处理。本文对比了基于Numpy以及Paddle.vision.transforms函数中对于图片处理的效果。

关键词 图像预处理cv2paddle

OpenCV方式
文章目录
基本测试
Paddle方式
基本测试
总 结

 

§01 OpenCV方式


  面这些内容来自于CSDN中 Paddle2.0之图像增广 中介绍的方式,通过测试,为之后的应用积累经验。

1.1 基本测试

  测试的图片来自于 火星好奇号 的照片。

▲ 图1.1.1 Mars Curiosity返回的照片

  下面的试验是在 PaddlePaddle中的AI Studio的 BML CodeLab。上载测试文件,到 /home/aistudio/data/中。

1.1.1 读入图片

  下面是使用CV2打开一个图片的基本方法。

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import cv2

picfile = '/home/aistudio/data/211219204357.JPG'

img = cv2.imread(picfile)

plt.figure(figsize=(10,10))
plt.imshow(img)
plt.show()

  使用cv2.imread()读入图片后石红plt.imshow现实的图片:

▲ 图1.1.2 使用cv2.imread()读入图片后石红plt.imshow现实的图片

  可以看到图片的颜色出现的变化。这是由于cv2的缺省读入的时候,它的颜色层是按照“BGR”的顺序,而不是按照plt.imshow()所需要的"RGB的顺序。

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

  经过cvColor(img, cv2.COLOR_BGR2RGB)处理之后的图片:

▲ 图1.1.3 经过cvColor(img, cv2.COLOR_BGR2RGB)处理之后的图片

  显示图片数据。

print(type(img), shape(img))

<class 'numpy.ndarray'>
(653, 1040, 3)

1.1.2 图片缩放

  使用cv2.resize()将图片尺寸进行变换:

print(type(img), shape(img))

img1 = cv2.resize(img, (64,64))
plt.figure(figsize=(10,10))
plt.imshow(img1)

  使用cv2.resize()处理成64×64的分辨率:

▲ 图1.1.4 使用cv2.resize()处理成64×64的分辨率

  重新将图片resize成(512,512):

img2 = cv2.resize(img1, (512,512))
plt.figure(figsize=(10,10))
plt.imshow(img2)

  重新resize成(512×512):

▲ 图1.1.5 重新resize成(512×512)

print(type(img), shape(img))

  img的数据类型和结构:

<class 'numpy.ndarray'>
(64, 64, 3)

1.1.3 图片翻转

print(type(img), shape(img))
img1 = flip(img)
plt.figure(figsize=(10,10))
plt.imshow(img1)

<class 'numpy.ndarray'>
(653, 1040, 3)

  直接在(H,W,3)的基础上使用flip产生的效果:

▲ 图1.1.6 直接在(H,W,3)的基础上使用flip产生的效果

(1)左右翻转

img1 = flip(img, 1)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  左右翻转:flip(img,1):

▲ 图1.1.7 左右翻转:flip(img,1)

(2)上下翻转

img1 = flip(img, 0)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  上下翻转:flip(img,0):

▲ 图1.1.8 上下翻转:flip(img,0)

(3)颜色反转

img1 = flip(img, 2)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  颜色反转:flip(img,2):

▲ 图1.1.9 颜色反转:flip(img,2)

1.1.4 图片旋转

rows,cols,h = img.shape
M = cv2.getRotationMatrix2D(((cols-1)/2.0, (rows-1)/2.0), 40, 0.7)
img1 = cv2.warpAffine(img, M, (cols, rows))
plt.figure(figsize=(10,10))
plt.imshow(img1)

  图片旋转:

▲ 图1.1.10 图片旋转

1.1.5 亮度调整

rows,cols,channels = img.shape
img1 = cv2.addWeighted(img, 0.6, zeros([rows,cols,channels],img.dtype), 0.6, 0.6)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  亮度调整:

▲ 图1.1.11 亮度调整

 

§02 Paddle方式


  关资料参见: paddle.vision

2.1 基本测试

2.1.1 Resize

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotate

img1 = Resize((32,32))(img)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  Resize((32,32))(img)处理后的结果:

▲ 图2.1.1 Resize((32,32))(img)处理后的结果

2.1.2 图像旋转

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotate

img1 = rotate(img, 45)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  rotate(img, 45)处理后的结果:

▲ 图2.1.2 rotate(img, 45)处理后的结果

2.1.3 转换成灰度图

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotate,to_grayscale
from PIL                    import Image
img1 = Image.fromarray(img)

img1 = to_grayscale(img1)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  请注意到其中使用到了 PIL中的Image函数。

▲ 图2.1.3 to_grayscale处理后的图像

  注意: PIL Image与numpy的array之间的转换:

(1)Image

Image.fromarray(data)

(2)array

mumpy.array(Image)

2.1.4 亮度调整

from paddle.vision.transforms import adjust_brightness

img1 = adjust_brightness(Image.fromarray(img), 0.5)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  adjust_brightness(img,0.5)::处理结果:

▲ 图2.1.4 adjust_brightness(img,0.5)::处理结果

from paddle.vision.transforms import adjust_brightness
import tqdm

gifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

count = 0
for r in tqdm.tqdm(linspace(0, 1.0, 20)):
    img1 = adjust_brightness(Image.fromarray(img), 0.5)
    count += 1
    savefile = os.path.join(gifpath, '%02d.jpg'%count)
    plt.figure(figsize=(10,10))
    plt.imshow(img1)
    plt.savefig(savefile)

▲ 图2.1.6 亮度变化

2.1.5 对比度变化

from paddle.vision.transforms import adjust_brightness,adjust_contrast
import tqdm

count = 0
for r in tqdm.tqdm(linspace(0, 2.0, 100)):
    img1 = adjust_contrast(Image.fromarray(img), r)
    count += 1
    savefile = os.path.join(gifpath, '%02d.jpg'%count)
    plt.figure(figsize=(10,10))
    plt.imshow(img1)
    plt.savefig(savefile)

▲ 图2.1.6 对比度的变化

2.1.6 调节色调

  参考文档: adjust_hue

▲ 图2.1.7 色调变化

import tqdm

gifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
count = 0
for r in tqdm.tqdm(linspace(0.5,0.5,100)):
    img1 = adjust_hue(Image.fromarray(img), r)
    count += 1
    savefile = os.path.join(gifpath, '%02d.jpg'%count)
    plt.figure(figsize=(10,6))
    plt.imshow(img1)
    plt.savefig(savefile)

2.1.7 中心剪切

import tqdm

gifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
from paddle.vision.transforms import center_crop

count = 0
for r in tqdm.tqdm(range(20, 500, 5)):
    img1 = center_crop(Image.fromarray(img), r)
    count += 1
    savefile = os.path.join(gifpath, '%02d.jpg'%count)
    plt.figure(figsize=(10,6))
    plt.imshow(img1)
    plt.savefig(savefile)

▲ 图2.1.8 中心剪切

2.1.8 ColorJetter

▲ 图2.1.9 ColorJitter

from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
from paddle.vision.transforms import center_crop, ColorJitter

count = 0
for r in tqdm.tqdm(range(80)):
    img1 = ColorJitter(0.5,0.5,0.5,0.5)(Image.fromarray(img))
    count += 深度学习训练营之数据增强

深度学习正则化---数据增强

深度学习目前几种热门的数据增强方法

深度学习目前几种热门的数据增强方法

深度学习和目标检测系列教程 9-300:TorchVision和Albumentation性能对比,如何使用Albumentation对图片数据做数据增强

matlab 深度学习黑暗图片画质增强