torchvision中的transforms

这篇具有很好参考价值的文章主要介绍了torchvision中的transforms。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

torchvision是图像处理库,计算机视觉工具包。

在pycharm中使用镜像下载包时在命令行输入(以cv2为例):

#使用国内镜像下载
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

transforms 集成了随机翻转、旋转、增强对比度、转化为tensor、转化为图像等功能,用于数据增强。(transforms更多的指的是transforms.py文件,其中包含很多类)

1.Transforms的使用

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算,它极大地简化了向量和矩阵的操作处理。

Tensor,即“张量”。实际上跟numpy数组、向量、矩阵的格式基本一样。但是是专门针对GPU来设计的,可以运行在GPU上来加快计算效率。

在PyTorch中,张量Tensor是最基础的运算单位,与NumPy中的NDArray类似,张量表示的是一个多维矩阵。不同的是,PyTorch中的Tensor可以运行在GPU上,而NumPy的NDArray只能运行在CPU上。由于Tensor能在GPU上运行,因此大大加快了运算速度。

在使用 transforms.ToTensor() 进行图片数据转换过程中会对图像的像素值进行正则化,即一般读取的图片像素值都是8 bit 的二进制,那么它的十进制的范围为 [0, 255],而正则化会对每个像素值除以255,也就是把像素值正则化成 [0.0, 1.0]的范围。

torchvision中的transforms

利用ToTensor()实现图像类型转换:

 文章来源地址https://www.toymoban.com/news/detail-638338.html

import cv2
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# 绝对路径 C:\MyApp\Pycharm\pyproject\dataset\train\ants\0013035.jpg
# 相对路径 dataset/train/ants/0013035.jpg
img_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)#得到的是PIL Image类型
cv_img = cv2.imread(img_path)#得到的是ndarray类型

writer = SummaryWriter("logs")

# transforms在python中的使用
#将PIL Image或numpy.ndarray类型转换为tensor类型
tensor_trans = transforms.ToTensor()#实例化ToTensor类
tensor_img = tensor_trans(img)

writer.add_image("Tensor_img", tensor_img)

writer.close()

 

torchvision中的transforms

 

2.常见的Transforms类

关注点:

输入类型(PIL-Image.open() tensor-ToTensor() narrays-cv.imread() ),输出类型,类的作用,参数个数和类型,(当不知道变量类型时可以通过print()或print(type())或设置断点进行debug来了解其返回类型,多看官方文档)

 

python中内置函数__call__的用法:在实例化对象后直接加上()使用方法,不需要用点来调用方法。

class Person:
   def __call__(self, name):
       print("__call__ "+"Hello "+name)

   def hello(self, name):
       print("hello "+name)

person = Person()
person("hahaha")
person.hello("wuhu")

2.1.ToTensor()的使用

将PIL Image或numpy.ndarray类型转换为tensor类型

2.2.Normalize()的使用

将tensor图像进行归一化,得到的仍是tensor类型

Normalize归一化的计算:output[channel] = (input[channel] - mean[channel]) / std[channel]

2.3.Resize()的使用

将PIL Image对象的尺寸调整为指定大小,类型不变

2.4.Compose()的使用

串联多个图片变换的操作。Compose()中的参数需要是一个列表,Python中列表的表示形式为[数据1,数据2,...],在Compose中数据需要是transforms类型,所以得到Compose([transforms参数1,transforms参数1,...])

2.5.RandomCrop的使用

实现对PIL Image图片随机裁剪,裁剪的尺寸根据给定的参数进行,如果给定的是1个参数,则裁剪成正方形,如果是两个参数(一个序列),则裁剪成两个参数指定的长和宽。

代码如下:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("dataset/train/ants/0013035.jpg")
print(img)

# ToTensor的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)

# Normalize的使用:归一化Tensor图像
# 三通道需要三个均值和标准差
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.1, 0.2, 0.3], [0.3, 0.2, 0.1])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)

# Resize的使用
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_reisze -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print((img_resize))

# Compose -resize -2 等比缩放
trans_resize_2 = transforms.Resize(52)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)

# RandomCrop
trans_random = transforms.RandomCrop(512)
# trans_random = transforms.RandomCrop((100, 200))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
   img_crop = trans_compose_2(img)
   writer.add_image("RandomCrop", img_crop, i)
# for i in range(10):
#     img_crop = trans_compose_2(img)
#     writer.add_image("RandomCropHW", img_crop, i)

writer.close()

 

归一化的图像结果:

torchvision中的transformstorchvision中的transformstorchvision中的transforms

Resize结果:

torchvision中的transformstorchvision中的transforms

RandomCrop的结果:

torchvision中的transformstorchvision中的transforms

 

到了这里,关于torchvision中的transforms的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BIT 变化检测模型复现 深度学习学习笔记 基于transformer结构的图像处理模型

    BIT 是用 transformer 结构进行变化检测的一个孪生网络,它的 backbone 用的是 Resnet 结构,具体结构分析可以参考这个链接的作者写的,非常清楚, http://t.csdn.cn/rA9sH。 下面就是来讲我自己的实现过程,比较简单。 首先,在官网找到相应的代码,下载解压到自己的本地。github上面的

    2024年02月10日
    浏览(27)
  • Python-OpenCV中的图像处理-图像平滑

    使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界)。 这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平

    2024年02月13日
    浏览(30)
  • Python-OpenCV中的图像处理-图像梯度

    图像梯度,图像边界等 使用到的函数有: cv2.Sobel(), cv2.Scharr(), cv2.Laplacian() 等 原理:梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器: Sobel,Scharr 和 Laplacian。Sobel, Scharr 其实就是求一阶或二阶导数。 Scharr 是对 Sobel(使用小的卷积核求解

    2024年02月13日
    浏览(34)
  • Python-OpenCV中的图像处理-图像轮廓

    轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。 查找轮廓的函数会修改原始图像。如果你

    2024年02月13日
    浏览(41)
  • Python-OpenCV中的图像处理-图像阀值

    与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进

    2024年02月13日
    浏览(31)
  • LabVIEW使用图像处理检测显微图像中的白血病

    LabVIEW使用图像处理检测显微图像中的白血病 人体最重要的部分是血液,因为它使人活着。它执行许多重要功能,例如转移氧气,二氧化碳,矿物质等。血液量不足会极大地影响新陈代谢,如果不及早治疗,这可能是非常危险的。常见的血液疾病之一是白血病。白血病是儿童

    2024年02月13日
    浏览(41)
  • Python-OpenCV中的图像处理-图像直方图

    通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。 BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需

    2024年02月12日
    浏览(44)
  • Python-OpenCV中的图像处理-图像金字塔

    同一图像的不同分辨率的子图集合,如果把最大的图像放在底部,最小的放在顶部,看起来像一座金字塔,故而得名图像金字塔。 cv2.pyrUp():上采样 cv2.pyrDown():下采样 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图

    2024年02月13日
    浏览(42)
  • OpenCV-Python中的图像处理-图像直方图

    通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。 BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需

    2024年02月12日
    浏览(32)
  • 数字图像处理中的车牌识别

    车牌识别是一种通过计算机视觉技术和图像处理技术来识别车辆车牌号码的技术。它可以通过摄像头捕捉车辆的图像,对图像进行处理和分析,从而自动识别车辆的车牌号码。这项技术在交通管理、安防、停车场管理等领域都有广泛的应用。近年来,随着人工智能技术的发展

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包