深度学习上采样下采样概念以及实现

news/2024/12/2 21:45:08/

#pic_center =400x
系列文章:


文章目录

  • 参考博客
  • 概念
      • 上采样
      • 下采样
  • 实现
      • 上采样
      • 下采样


参考博客

【深度学习】上采样,下采样,卷积

torch.nn.functional.interpolate函数

概念

上采样

简单说将图片放大,通过在像素键插入数据

1.插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;

2.转置卷积又或是说反卷积(Transpose Conv),通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;相比上池化,使用反卷积进行图像的“上采样”是可以被学习的(会用到卷积操作,其参数是可学习的)。

下采样

简单说是将图片缩小
主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图;

1.用stride为2的卷积层实现:卷积过程导致的图像变小是为了提取特征。下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。

2.用stride为2的池化层实现:池化下采样是为了降低特征的维度。如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征。

实现

完整的代码在DDIM/models/diffusion.py

class Upsample(nn.Module):def __init__(self, in_channels, with_conv):super().__init__()self.with_conv = with_convif self.with_conv:self.conv = torch.nn.Conv2d(in_channels,in_channels,kernel_size=3,stride=1,padding=1)def forward(self, x):x = torch.nn.functional.interpolate(x, scale_factor=2.0, mode="nearest")if self.with_conv:x = self.conv(x)return xclass Downsample(nn.Module):def __init__(self, in_channels, with_conv):super().__init__()self.with_conv = with_convif self.with_conv:# no asymmetric padding in torch conv, must do it ourselvesself.conv = torch.nn.Conv2d(in_channels,in_channels,kernel_size=3,stride=2,padding=0)def forward(self, x):if self.with_conv:pad = (0, 1, 0, 1)x = torch.nn.functional.pad(x, pad, mode="constant", value=0)x = self.conv(x)else:x = torch.nn.functional.avg_pool2d(x, kernel_size=2, stride=2)return x

上采样

interpolate是插值的意思

 x = torch.nn.functional.interpolate(x, scale_factor=2.0, mode="nearest")

def interpolate(

​ input: Any,
​ size: Any | None = …,
​ scale_factor: Any | None = …,
​ mode: str = …,
​ align_corners: Any | None = …,
​ recompute_scale_factor: Any | None = …,
​ antialias: bool = …) -> None

参数:

  • input (Tensor) – 输入张量。

  • size (int or Tuple*[int] or* Tuple*[int,* int] or Tuple*[int,* int, int]) –输出大小。

  • scale_factor (float or Tuple*[float]*) – 指定输出为输入的多少倍数。如果输入为tuple,其也要制定为tuple类型。

    • 注: size 和scale_factor指定一个即可
  • mode (str) – 可使用的上采样算法,有'nearest', 'linear', 'bilinear', 'bicubic' , 'trilinear'和'area'. 默认使用'nearest'。

  • align_corners (bool, optional) –几何上,我们认为输入和输出的像素是正方形,而不是点。如果设置为True,则输入和输出张量由其角像素的中心点对齐,从而保留角像素处的值。如果设置为False,则输入和输出张量由它们的角像素的角点对齐,插值使用边界外值的边值填充;当scale_factor保持不变时,使该操作独立于输入大小

下采样

# 池化方式
x = torch.nn.functional.avg_pool2d(x, kernel_size=2, stride=2)
#卷积形式
x = np.random.randint(1,10, [1,5,5])
x = torch.FloatTensor(x)
print(x)
in_channels = 1
conv = torch.nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=2, padding=0)
print(conv)
x = conv(x)
print(x.shape)

http://www.ppmy.cn/news/74141.html

相关文章

【机器学习】 - 作业1: 基于决策树的英雄联盟游戏胜负预测

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

InnoDB数据页结构

什么是页?什么是数据页? 页是InnoDB管理存储空间的基本单元,一个页的大小一般是16k。 InnoDB有许多不同的页,有存放表空间头部信息的页,INODE信息的页,当然还有存放我们记录信息的页,这个页叫…

SELECT LAST_INSERT_ID()自增主键冲突或者为0问题

问题 数据库为mysql; mapper.xml文件为mybatis-generator自动生成的; 连接池使用DruidDataSource; 最终生成的insertSelective如下: 出现问题: 主键冲突:[WMyBatisTraceInterceptor:54][com.mysql.jdbc.…

linux内核的proc文件系统

https://xuesong.blog.csdn.net/article/details/109522945 Linux的procfs文件系统是一个虚拟文件系统,是一种特殊文件系统,用于显示进程信息和内核进程。目前,虽然/proc仍然被广泛使用,但是内核2.6及以上的版本,大部分…

MySQL事务和索引

目录 事务的概念 事务的四大特性(ACID) 原子性 隔离性 持久性 一致性 什么是脏读、幻读和不可重复读? 脏读 幻读 不可重复读 事务的隔离级别 读未提交 读已提交 可重复读 串行化 索引 索引优点 索引缺点 索引分类 索引设…

SpringBoot【开发实用篇】---- 整合第三方技术(监控)

SpringBoot【开发实用篇】---- 整合第三方技术(监控) 1. 监控的意义2. 可视化监控平台3. 监控原理 在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐…

87.el-table翻页后保存前一页所选并再次返回前一页时把数据勾选上

1.首先给<el-table>添加ref、row-key、选择单条事件、全选事件 <el-table ...... ref"newTable" row-key"resource_id" select"selectItem" select-all"selectAll" ..........> 2.初始化选中的数组checkList data(){ retu…

【深度学习】- 作业5: Didi交通场景-车辆预测

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…