数据预处理:随机裁剪放缩

随机裁剪放缩是一种数据增强技术,可以在训练神经网络时增加数据的多样性,提高模型的泛化能力。具体来说,随机裁剪放缩可以通过随机裁剪和缩放原始图片来生成多个不同的训练样本,从而增加数据集的大小和多样性。这种技术在图像分类、目标检测和语义分割等任务中都有广泛的应用。

输入:

数据预处理:随机裁剪放缩_第1张图片

输出:

下面是一个随机裁剪放缩的Python实现示例,其中包括了随机裁剪和缩放的代码:

import cv2
import numpy as np

def random_crop_resize(img, crop_size, resize_size):
    '''
    随机裁剪放缩
    :param img: 原始图片
    :param crop_size: 裁剪尺寸
    :param resize_size: 缩放尺寸
    :return: 裁剪放缩后的图片
    '''
    height, width = img.shape[:2]
    x = np.random.randint(0, width - crop_size[1] + 1)
    y = np.random.randint(0, height - crop_size[0] + 1)
    crop_img = img[y:y+crop_size[0], x:x+crop_size[1]]
    result_img = cv2.resize(crop_img, resize_size)
    return result_img

if __name__ == '__main__':
    img = cv2.imread('test.jpg')
    crop_size = (200, 200)
    resize_size = (100, 100)
    result_img = random_crop_resize(img, crop_size, resize_size)
    cv2.imshow('origin', img)
    cv2.imshow('result', result_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

更进一步来说,使用RandomResizedCrop实现上述功能。
RandomResizedCrop是PyTorch中的一个数据增强函数,用于对图像进行随机裁剪和缩放。具体来说,它会从原始图像中随机裁剪出一块面积为原始图像面积的一定比例的区域,然后将这块区域缩放到指定的大小。其中,scale参数指定了裁剪区域相对于原始图像面积的比例范围,ratio参数指定了裁剪区域的宽高比范围。

示例:

from PIL import Image
import torchvision.transforms as transforms

# 定义一个RandomResizedCrop变换
transform = transforms.RandomResizedCrop(224, scale=(0.08, 1.0), ratio=(3. / 4., 4. / 3.))

# 加载一张示例图片
img = Image.open(r'D:\papercode\experiment\1\mmclassification-master\tests\data\color.jpg')

# 对图片进行变换
img_transformed = transform(img)

# 显示变换后的图片
img_transformed.show()

输入不变:
数据预处理:随机裁剪放缩_第2张图片

scale=(0.08, 1.0), ratio=(3. / 4., 4. / 3.)时,

输出:
数据预处理:随机裁剪放缩_第3张图片数据预处理:随机裁剪放缩_第4张图片数据预处理:随机裁剪放缩_第5张图片数据预处理:随机裁剪放缩_第6张图片

可以看到放缩剪切后的图像中,是原图像中不同比例内容重新缩放的,而这个比例在0.08:1.0之间

scale=(0.88, 1.0), ratio=(4. / 3., 3. / 4.)时, 

输出:
数据预处理:随机裁剪放缩_第7张图片数据预处理:随机裁剪放缩_第8张图片数据预处理:随机裁剪放缩_第9张图片数据预处理:随机裁剪放缩_第10张图片

可以看到放缩后的图像中,三张图像相差不大,与原图像相差也不大,因为这里比例设置为0.88:1.0 

你可能感兴趣的:(学习,笔记,深度学习)