基于pytorch实现对图片进行数据增强

 更新时间:2024年01月05日 10:22:44   作者:草莓橙子碗  
图像数据增强是一种在训练机器学习和深度学习模型时常用的策略,尤其是在计算机视觉领域,具体而言,它通过创建和原始图像稍有不同的新图像来扩大训练集,本文给大家介绍了如何基于pytorch实现对图片进行数据增强,需要的朋友可以参考下

背景

在进行机器学习的任务中,我们的训练数据往往是有限的,在有限的数据集上获得较好的模型训练结果,我们不仅要在模型结构上下功夫,另一方面也需要对数据集进行数据增强

图片数据增强

图像数据增强是一种在训练机器学习和深度学习模型时常用的策略,尤其是在计算机视觉领域。具体而言,它通过创建和原始图像稍有不同的新图像来扩大训练集。 数据增强的主要目标有以下几点:

  •  解决过拟合:过拟合是指模型在训练集上表现得过于优秀,但是在测试集(即未见过的新数据)上表现差的现象。一个常见的解决过拟合的策略是增加训练数据。数据增强通过在原有训练数据的基础上增加各种变化的数据,有效地增大了训练集。
  • 提高模型的泛化能力:一些数据增强手段(如旋转、缩放、平移等)可以模拟一些真实场景中会产生的视觉变化,有助于训练模型对这些场景变化更具有鲁棒性,从而提高模型的泛化能力。
  • 引入可控制的噪声:一些数据增强方法,如随机裁剪、像素值噪声、颜色偏移等,可以在一定程度上模拟真实环境中的噪声。以这样的方式引入的噪声可以使模型更健壮,并且增强模型的噪声容忍力。
  • 视觉不变性:通过像翻转、旋转这样的变换,数据增强可以帮助模型在任何视觉角度下都能正确地识别出相同的对象,输入图像进行各种方式的扭曲后仍能被模型准确识别出来,增强了模型的视觉不变性。 总的来说,图片数据增强可以让模型学习到更多样性的数据,可以在一定程度上提升模型的识别准确率,更好的适应实际环境中样本的多样性,从而提高模型的泛化能力。

代码实现

我们使用torchvision的transforms库对图片数据进行数据增强,使用一张卡比巴拉的图片

首先读取图片数据,以下是准备工作

from PIL import Image
import numpy as np
import torchvision.transforms as tfs
import matplotlib.pyplot as plt
 
img_path = r"D:\CSDN_point\1_4\kabibala.jpg"
img = Image.open(img_path)
print("the shape of img is {}".format(np.array(img).shape))

图片伸缩

img_re = tfs.Resize((500,1000))(img)
plt.imshow(img_re)
plt.show()

tfs.Reszie((500,1000))把图像的高和宽分别拉伸到500像素和1000像素

图片裁剪

img_crop = tfs.RandomCrop(500)(img)
plt.imshow(img_crop)
plt.show()

tfs.RandomCrop(500)随机截取图片500\times500大小的区域

中心裁剪

img_crop_cen = tfs.CenterCrop(700)(img)
plt.imshow(img_crop_cen)
plt.show()

tfs.CenterCrop(700)裁剪图片中心位置700\times700大小的区域

随机水平翻转

# 随机水平翻转,概率是0.5
img_hori = tfs.RandomHorizontalFlip()(img)
# 随机垂直翻转,概率是0.5
img_ver = tfs.RandomVerticalFlip()(img)
 
plt.subplot(1,2,1)
plt.imshow(img_hori)
plt.title("RandomHorizontalFlip")
plt.subplot(1,2,2)
plt.imshow(img_ver)
plt.title("RandomVerticalFlip")
plt.show()

随机改变图片亮度、对比度和色相

img_j = tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)(img)
plt.imshow(img_j)
plt.show()

tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)中参数的含义:

  • brightness=0.5:亮度的浮点数系数,brightness系数在 [max(0, 1 - brightness), 1 + brightness] 的范围内随机选择。例如,brightness=0.5,就表明亮度在 [0.5, 1.5] 的范围内随机选择。
  • contrast=0.5:对比度的浮点数系数。对比度系数在 [max(0, 1 - contrast), 1 + contrast] 的范围内随机选择。例如,contrast=0.5,就表明对比度在 [0.5, 1.5] 的范围内随机选择。
  • hue=0.5:色相的浮点数系数。色相系数在 [-hue, hue] 的范围内随机选择。例如,hue=0.5,就表明色相在 [-0.5, 0.5] 的范围内随机选择。

多变换整合

可以使用Compose模块将多个变换进行整合

# 将多个变换整合到my_trans
my_trans = tfs.Compose([tfs.Resize(800),tfs.RandomHorizontalFlip(),tfs.RandomCrop(500),tfs.RandomVerticalFlip(),tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)])
 
_,fig = plt.subplots(3,3)
for i in range(3):
    for j in range(3):
        fig[i][j].imshow(my_trans(img))
        plt.axis('off')
plt.show()

以上就是基于pytorch实现对图片进行数据增强的详细内容,更多关于pytorch图片数据增强的资料请关注脚本之家其它相关文章!

相关文章

  • Python生成器与迭代器详情

    Python生成器与迭代器详情

    这篇文章主要介绍了Python生成器与迭代器,现在可以通过生成器来直接创建一个列表,是由于内存的限制,表的容量肯定是有限的,果我们需要一个包含几百个元素的列表,是每次访问的时候只访问其中的几个,剩下的元素不使用就很浪费内存空间,下面来了解具体内容
    2021-11-11
  • 基于python的七种经典排序算法(推荐)

    基于python的七种经典排序算法(推荐)

    本篇文章主要介绍基于python的七种经典排序算法(推荐),具有一定的参考价值,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-12-12
  • pycharm python代码调试跳出for循环问题

    pycharm python代码调试跳出for循环问题

    这篇文章主要介绍了pycharm python代码调试跳出for循环问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python3 中return和yield的区别

    Python3 中return和yield的区别

    这篇文章主要介绍了Python3 中return和yield的区别,return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的,但是具体有什么区别呢,带着疑问一起进入下面文章学习详细内容吧
    2022-06-06
  • Python数据处理之字符串处理技巧全解析

    Python数据处理之字符串处理技巧全解析

    这篇文章主要为大家详细介绍了Python字符串核心操作技巧,涵盖文本切片,拼接,查找替换,格式化及清洗标准化全流程,有需要的小伙伴可以参考一下
    2025-07-07
  • Pycharm连接远程mysql报错的实现

    Pycharm连接远程mysql报错的实现

    本文主要介绍了Pycharm连接远程mysql报错的实现,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Python的Matplotlib库应用实例超详细教程

    Python的Matplotlib库应用实例超详细教程

    这篇文章主要介绍了Python的Matplotlib库应用的相关资料,Matplotlib是一个强大的Python数据可视化库,支持绘制2D和3D图像,它提供了简单易用的API,广泛应用于数据分析和科学研究,需要的朋友可以参考下
    2025-01-01
  • 从numpy数组中取出满足条件的元素示例

    从numpy数组中取出满足条件的元素示例

    今天小编就为大家分享一篇从numpy数组中取出满足条件的元素示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 使用Python从零搭建一个能用的AI Agent

    使用Python从零搭建一个能用的AI Agent

    这篇文章主要为大家详细介绍了如何使用Python从零搭建一个能用的AI Agent,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • 对pandas读取中文unicode的csv和添加行标题的方法详解

    对pandas读取中文unicode的csv和添加行标题的方法详解

    今天小编就为大家分享一篇对pandas读取中文unicode的csv和添加行标题的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论