Torch中常见插值方式及各自的优缺点

news2024/11/15 14:45:52

Pytorch常见插值方式及优缺点

  • 1 插值算法
  • 2 Pytorch中能看到的插值方式
  • 3 Nearest插值法
    • 3.1 方法介绍
    • 3.2 优缺点
  • 4 Linear插值法
    • 4.1 方法接受
    • 4.2 优缺点
  • 5 Bilinear插值法
    • 5.1 方法介绍
    • 5.2 优缺点
  • 6 Bicubic插值法
    • 6.1 方法介绍
    • 6.2 优缺点
  • 7 Trlinear插值法
    • 7.1 方法介绍
    • 7.2 优缺点
  • 8 图片演示

1 插值算法

插值指的是利用已知数据去预测未知数据,图像插值则是给定一个像素点,根据它周围像素点的信息来对该像素点的值进行预测。
当我们调整图片尺寸或者对图片变形的时候常会用到图片插值。

常见的插值算法可以分为两类自适应和非自适应。 自适应的方法可以根据插值的内容来改变(尖锐的边缘或者是平滑的纹理),非自适应的方法对所有的像素点都进行同样的处理。 非自适应算法包括:最近邻,双线性,双三次,样条,sinc,lanczos等。 由于其复杂度, 这些插值的时候使用从0 to 256 (or more) 邻近像素。 包含越多的邻近像素,他们越精确,但是花费的时间也越长。这些算法可以用来扭曲和缩放照片。

2 Pytorch中能看到的插值方式

nn.Upsample()中的插值方式
在这里插入图片描述

出现的插值方式有Nearest(最近邻插值法),Linear(线性插值法),Bilinear(双线性插值法),Bicubic(双三次插值法),Trilinear(三线性插值法)

3 Nearest插值法

3.1 方法介绍

顾名思义最近邻插值就是选取离目标点最近的点的值(黑点,原来就存在的点)作为新的插入点的值:
在这里插入图片描述
Pytorch代码演示:
在这里插入图片描述

可以看到在原始数据周围的点数据,其数值都是和其最近的点数值相同

3.2 优缺点

缺点: 由于是以最近的点作为新的插入点,因此边缘不会出现缓慢的渐慢过度区域,因而重新采样后灰度值有明显的不连续性,这也导致放大的图像容易出现锯齿的现象,缩小后的图像有很严重的失真;
优点: 最近邻插值法的优点是计算量很小,算法也简单,因此运算速度较快。

4 Linear插值法

4.1 方法接受

线性插值是以距离为权重的一种插值方式:
在这里插入图片描述
其本质就是利用两个点形成直线方程,带入x坐标,得到该像素点的插值。
Pytorch代码演示
由于在实际的代码中,需要给数据的每个点坐标附上像素值,在演示时不方便,因此后面会直接给出使用Upsample得到图象的例子。

4.2 优缺点

为的是给双线性插值法做铺垫的

5 Bilinear插值法

5.1 方法介绍

在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。见下图:
在这里插入图片描述
我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。最常见的情况,f就是一个像素点的像素值。思路是我们可以将求解过程分解为两次插值过程,首先在x轴方向上进行插值,根据点Q11,Q21得到
在这里插入图片描述
根据点Q12,Q22得到
在这里插入图片描述
然后在y轴方向上进行插值, 根据点R1 和R2得到
在这里插入图片描述
整理得
在这里插入图片描述
Pytorch代码演示:
在这里插入图片描述

5.2 优缺点

双线性插值利用周围四个邻点的灰度值在两个方向上做线性插值得到采样点的灰度值。这种方法在很大程度上消除了锯齿现象,但在边缘上变得较为模糊,同时需要一些计算量。

6 Bicubic插值法

6.1 方法介绍

太难了,有点没搞懂,可以参考末尾的参考博客!
Pytorch代码演示:
在这里插入图片描述

6.2 优缺点

双三次插值不仅考虑四个邻点灰度值,还考虑各邻点间的灰度值变化率的影响。是双线性插值的改进算法。和前两种经典插值方法相比,可以取得较好的插值效果。会损失插值图像的高频部分,因而是图像边缘模糊,需要的计算量也相应提升。

7 Trlinear插值法

7.1 方法介绍

就是在三维数据中,再使用一个坐标轴,和双线性插值法有异曲同工之处:
在这里插入图片描述
三线性插值的结果与沿三个轴的插值步骤的顺序无关:任何其他顺序,例如沿x,然后沿y,最后沿z,产生相同的值。

Pytorch代码演示:
在这里插入图片描述

7.2 优缺点

就是双线性插值方法在高维数据中的应用是,是一个十分经典的算法!

8 图片演示

代码:

import torch
import torch.nn as nn
import torchvision.transforms as transforms 
import matplotlib.pyplot as plt

to_img = transforms.ToPILImage()
input = torch.arange(64*64, dtype=torch.float32).view(1,1,64,64)
m_nearest = nn.Upsample(scale_factor=2, mode='nearest')
m_bilinear = nn.Upsample(scale_factor=2, mode='bilinear')
m_bicubic = nn.Upsample(scale_factor=2, mode='bicubic')
img_near = m_nearest(input)
img_bili = m_bilinear(input)
img_bicu = m_bicubic(input)


plt.subplot(2,2,1)
plt.title("Normal")
plt.imshow(to_img(input.squeeze(0).squeeze(0)), cmap="gray")


plt.subplot(2,2,2)
plt.title("Nearest")
plt.imshow(to_img(img_near.squeeze(0).squeeze(0)), cmap="gray")


plt.subplot(2,2,3)
plt.title("Bilinear")
plt.imshow(to_img(img_bili.squeeze(0).squeeze(0)), cmap="gray")


plt.subplot(2,2,4)
plt.title("Bicubic")
plt.imshow(to_img(img_bicu.squeeze(0).squeeze(0)), cmap="gray")
plt.show()

结果:
在这里插入图片描述

这个演示的稍显仓促,大家可以自己使用一张灰度图进行不同方式的插值放大,看看呈现出来的效果如何。

参考博客:

https://www.cnblogs.com/wxl845235800/p/7446270.html

https://www.cnblogs.com/laozhanghahaha/p/12580822.html

https://blog.csdn.net/weixin_42546737/article/details/110850247

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#窗体应用程序可能会遇到的一些奇怪问题

最近在上程序实训课,写一个管理程序,主要是用了C#,在VS2017平台,在开发过程中自然是少不了很多奇怪的问题,做个记录。 有下面几个问题: 问题1:.Conversion failed when converting from a character stri…

小红书“复刻”微信,微信“内造”小红书

配图来自Canva可画 随着互联网增长红利逐渐见顶,各大互联网平台对流量的争夺变得愈发激烈。而为了寻找新的业务可能性,各家都在不遗余力地拓宽自身边界。在此背景下,目前最为“吸睛”和“吸金”的社交、电商、种草、短视频等领域&#xff0c…

linux创建文件软连接和硬链接详解

前言linux系统中链接文件仔细区分可以分为软连接(符号链接)和硬链接。软链接比硬链接应用更广泛,所以也可以认为linux链接文件就是指软链接文件。本文将会在第2部分介绍创建软链接和硬链接的基本命令,在第3部分从linux文件系统的角…

Gated Activations门控激活单元

门控激活 在架构图的方框部分,您会注意到扩张卷积输出分成两个分支,随后通过逐元素乘法重新组合。这描绘了一个门控激活单元,其中我们将tanh激活分支解释为一个学习过滤器,将sigmoid激活分支解释为一个学习门,用于调节…

(五十五)大白话更新数据的时候,自动维护的聚簇索引到底是什么?

上一次我们给大家讲了一下基于主键如何组织一个索引,然后建立索引之后,如何基于主键在索引中快速定位到那行数据所在的数据页,再如何进入数据页快速到定位那行数据,大家看下面的图。 我们今天就先基于上面的图,把按照主…

·神经网络

目录11神经网络demo112神经网络demo213神经网络demo320tensorflow2.0 安装教程,所有安装工具(神经网络)21神经网络-线性回归- demo122神经网络-线性回归- demo228神经网络-多层感知- demo1目录11神经网络demo1 package com.example.xxx; import java.ut…

玩转qsort——“C”

各位CSDN的uu们你们好呀,今天小雅兰的内容还是我们的深度剖析指针呀,上篇博客我们学习了回调函数这个知识点,但是没有写完,因为:小雅兰觉得qsort值得单独写出来!!!好啦,就…

Ae:合成设置

Ae菜单:合成/合成设置Composition Settings快捷键:Ctrl K合成名称Composition Name为合成定义一个恰当的名称以便于查找和识别。◆ ◆ ◆基本Basic有关合成的一些常规设置。预设Preset给出了适合各种平台的常用预设。也可以创建并保存自己的自定义预设…

项目请求地址自动加上了本地ip的解决方式

一般情况下来说都是一些粗心大意的问题导致的 场景一:少加了/ 场景二:前后多加了空格 场景三:拼接地址错误![

改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积

单个静态卷积核是现代卷积神经网络(CNNs)的常见训练范式。然而,最近的动态卷积研究表明,学习加权为其输入依赖注意力的n个卷积核的线性组合可以显著提高轻量级CNNs的准确性,同时保持高效的推理。然而,我们观察到现有的作品通过卷积核空间的一个维度(关于卷积核数量)赋予…

SpringSecurity学习(二)自定义资源认证规则、自定义登录页面、自定义登录(成功/失败)处理、用户信息获取

文章目录一、自定义认证1. 自定义资源权限规则二、自定义登录页面1. 引入thymeleaf依赖,并配置2. 配置SecurityCfg的securityFilterChain实例3. 编写login.html注意:三、自定义登录成功处理1. 编写JsonAuthenticationSuccessHandler处理器,返…

如何在excel中创建斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:…

软件测试是个人就能做?恕我直言,你可能是个“纯粹”的测试工具人,BUG收集器

作为过来人的我和你说说软件测试的真正情况。 前言 一个软件做出来,最不能少的是谁?毫无疑问是开发,开发是最了解软件运作的那个人,早期就有不少一人撸网站或者APP的例子,相当于一个人同时是产品、研发、测试、运维等…

学习笔记-架构的演进之服务容错策略-服务发现-3月day01

文章目录前言服务容错容错策略附前言 “容错性设计”(Design for Failure)是微服务的一个核心原则。 使用微服务架构,拆分出的服务越来越多,也逐渐导致以下问题: 某一个服务的崩溃,会导致所有用到这个服务…

webrtc拥塞控制算法对比-GCC vs BBR vs PCC

1.前言现有集成在webrtc中的拥塞控制算法有三种, 分别是: 谷歌自研发的gcc, 谷歌自研发的BBR算法, 斯坦福大学提出的基于机器学习凸优化的PCC算法. 本文将探讨一下三个算法的区别和优缺点。2.背景迈聆会议从17年到现在, 一直使用的是基于谷歌的gcc算法自研的Omcc算法(optimizat…

【基于机器学习的推荐系统项目实战-1】初识推荐系统

本文目录一、为什么我们需要推荐系统?二、推荐系统的发展阶段三、推荐系统模型四、通用推荐系统框架4.1 数据生产4.2 数据存储4.3 算法召回4.4 结果排序4.5 结果应用4.6 新浪微博的框架开源结构图五、推荐常用特征5.1 用户特征5.2 物品特征六、推荐常用算法七、结果…

正点原子IMX6ULL开发板-liunx内核移植例程-uboot卡在Starting kernel...问题

环境 虚拟机与Linux版本: VMware 17.0.0 Ubuntu16 NXP提供的U-boot与Linux版本: u-boot:uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 linux:linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 开发板: 正点原子-IMX6ULL_EMMC版本,底板版…

国产光刻机再突破后,能实现7nm芯片量产?专家:别再盲目自大

众所周知,不能生产高端芯片,一直都是我国芯片产业一个无法抹去的痛。加上老美近几年的刻意打压,部分中芯企更是苦不堪言,因此大部分人心里也都憋着一口气,这几年也是铆足了劲,大力推动国产芯片技术的发展。…

小家电品牌私域增长解决方案来了

小家电品牌的私域优势 01、行业线上化发展程度高 相对于大家电动辄上千上万元的价格,小家电的客单价较低。而且与大家电偏刚需属性不同的是,小家电的消费需求侧重场景化,用户希望通过购买小家电来提高自身的生活品质。这就决定了用户的决策…

【数组】JavaScript 全栈体系(六)

JavaScript 基础 第十章 循环-for 一、for循环基本使用 实现循环的 3 要素 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…