热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorch学习笔记——图像处理(transforms.Normalize归一化)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了PyTorch学习笔记——图像处理(transforms.Normalize归一化)相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了PyTorch学习笔记——图像处理(transforms.Normalize 归一化)相关的知识,希望对你有一定的参考价值。



PyTorch学习笔记——图像处理 transforms.Normalize 归一化


  • 回顾 torchvision.ToTensor
  • 归一化 transforms.Normalize
  • 公式


回顾 torchvision.ToTensor

在看这一片博客之前,需要先浏览以下我的上一篇博客
PyTorch学习笔记——图像处理(torchvision.ToTensor)

import torchvision.transforms as transforms
import numpy as np
import torch
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as imgplt
img_path = "1.jpg"
# transforms.ToTensor()
transform1 = transforms.Compose([
transforms.ToTensor(), # range [0, 255] -> [0.0,1.0]
]
)
##numpy.ndarray
img = cv2.imread(img_path)# 读取图像
img1 = transform1(img) # 归一化到 [0.0,1.0]
print("img.shape = ",img.shape)
print("img1.shape = ",img1.shape)
print("img = ",img)
print("img1 = ",img1)

img.shape = (424, 640, 3)
img1.shape = torch.Size([3, 424, 640])
img = [[[249 246 231]
[248 246 228]
[247 245 227]
...
[ 17 19 20]
[ 20 19 21]
[ 32 14 21]]
[[249 246 231]
[248 246 228]
[247 245 227]
...
[ 29 30 20]
[ 29 30 20]
[ 15 24 14]]
[[248 245 230]
[248 245 230]
[248 246 228]
...
[ 80 41 26]
[ 80 41 26]
[ 45 36 16]]
...
[[169 175 216]
[174 178 219]
[167 173 210]
...
[ 14 17 22]
[ 14 17 22]
[ 15 18 23]]
[[151 157 202]
[163 167 208]
[172 174 209]
...
[ 14 17 22]
[ 13 16 21]
[ 13 16 21]]
[[168 171 215]
[173 174 212]
[179 177 207]
...
[ 13 16 21]
[ 12 15 20]
[ 11 13 21]]]
img1 = tensor([[[0.9765, 0.9725, 0.9686, ..., 0.0667, 0.0784, 0.1255],
[0.9765, 0.9725, 0.9686, ..., 0.1137, 0.1137, 0.0588],
[0.9725, 0.9725, 0.9725, ..., 0.3137, 0.3137, 0.1765],
...,
[0.6627, 0.6824, 0.6549, ..., 0.0549, 0.0549, 0.0588],
[0.5922, 0.6392, 0.6745, ..., 0.0549, 0.0510, 0.0510],
[0.6588, 0.6784, 0.7020, ..., 0.0510, 0.0471, 0.0431]],
[[0.9647, 0.9647, 0.9608, ..., 0.0745, 0.0745, 0.0549],
[0.9647, 0.9647, 0.9608, ..., 0.1176, 0.1176, 0.0941],
[0.9608, 0.9608, 0.9647, ..., 0.1608, 0.1608, 0.1412],
...,
[0.6863, 0.6980, 0.6784, ..., 0.0667, 0.0667, 0.0706],
[0.6157, 0.6549, 0.6824, ..., 0.0667, 0.0627, 0.0627],
[0.6706, 0.6824, 0.6941, ..., 0.0627, 0.0588, 0.0510]],
[[0.9059, 0.8941, 0.8902, ..., 0.0784, 0.0824, 0.0824],
[0.9059, 0.8941, 0.8902, ..., 0.0784, 0.0784, 0.0549],
[0.9020, 0.9020, 0.8941, ..., 0.1020, 0.1020, 0.0627],
...,
[0.8471, 0.8588, 0.8235, ..., 0.0863, 0.0863, 0.0902],
[0.7922, 0.8157, 0.8196, ..., 0.0863, 0.0824, 0.0824],
[0.8431, 0.8314, 0.8118, ..., 0.0824, 0.0784, 0.0824]]])

这是上一篇的代码,可以看到,使用transforms.ToTensor将图像转化为tensor


归一化 transforms.Normalize

transform1 = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5))
]
)

将源代码修改为现在这样

img_path = "1.jpg"
# transforms.ToTensor()
transform2 = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5))
]
)
##numpy.ndarray
import torchvision.transforms as transforms
import numpy as np
import torch
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as imgplt
img_path = "1.jpg"
# transforms.ToTensor()
transform1 = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5))
]
)
##numpy.ndarray
img = cv2.imread(img_path)# 读取图像
img1 = transform1(img) # 归一化到 [0.0,1.0]
print("img.shape = ",img.shape)
print("img1.shape = ",img1.shape)
print("img = ",img)
print("img1 = ",img1)

img.shape = (424, 640, 3)
img1.shape = torch.Size([3, 424, 640])
img = [[[249 246 231]
[248 246 228]
[247 245 227]
...
[ 17 19 20]
[ 20 19 21]
[ 32 14 21]]
[[249 246 231]
[248 246 228]
[247 245 227]
...
[ 29 30 20]
[ 29 30 20]
[ 15 24 14]]
[[248 245 230]
[248 245 230]
[248 246 228]
...
[ 80 41 26]
[ 80 41 26]
[ 45 36 16]]
...
[[169 175 216]
[174 178 219]
[167 173 210]
...
[ 14 17 22]
[ 14 17 22]
[ 15 18 23]]
[[151 157 202]
[163 167 208]
[172 174 209]
...
[ 14 17 22]
[ 13 16 21]
[ 13 16 21]]
[[168 171 215]
[173 174 212]
[179 177 207]
...
[ 13 16 21]
[ 12 15 20]
[ 11 13 21]]]
img1 = tensor([[[ 0.9529, 0.9451, 0.9373, ..., -0.8667, -0.8431, -0.7490],
[ 0.9529, 0.9451, 0.9373, ..., -0.7725, -0.7725, -0.8824],
[ 0.9451, 0.9451, 0.9451, ..., -0.3725, -0.3725, -0.6471],
...,
[ 0.3255, 0.3647, 0.3098, ..., -0.8902, -0.8902, -0.8824],
[ 0.1843, 0.2784, 0.3490, ..., -0.8902, -0.8980, -0.8980],
[ 0.3176, 0.3569, 0.4039, ..., -0.8980, -0.9059, -0.9137]],
[[ 0.9294, 0.9294, 0.9216, ..., -0.8510, -0.8510, -0.8902],
[ 0.9294, 0.9294, 0.9216, ..., -0.7647, -0.7647, -0.8118],
[ 0.9216, 0.9216, 0.9294, ..., -0.6784, -0.6784, -0.7176],
...,
[ 0.3725, 0.3961, 0.3569, ..., -0.8667, -0.8667, -0.8588],
[ 0.2314, 0.3098, 0.3647, ..., -0.8667, -0.8745, -0.8745],
[ 0.3412, 0.3647, 0.3882, ..., -0.8745, -0.8824, -0.8980]],
[[ 0.8118, 0.7882, 0.7804, ..., -0.8431, -0.8353, -0.8353],
[ 0.8118, 0.7882, 0.7804, ..., -0.8431, -0.8431, -0.8902],
[ 0.8039, 0.8039, 0.7882, ..., -0.7961, -0.7961, -0.8745],
...,
[ 0.6941, 0.7176, 0.6471, ..., -0.8275, -0.8275, -0.8196],
[ 0.5843, 0.6314, 0.6392, ..., -0.8275, -0.8353, -0.8353],
[ 0.6863, 0.6627, 0.6235, ..., -0.8353, -0.8431, -0.8353]]])

可以看到,最后的数组,值的范围变成了[-1,1]


公式

transforms.Normalize使用如下公式进行归一化:

channel=(channel-mean)/std
也就是说 ( (0,1) - 0.5 ) / 0.5 = (-1,1)


推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
露絲瑪麗蓮夢露_533
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有