下采样方法

AntiAliasInterpolation2d代码解读

注记

最近在看一些视频驱动的代码时,常见一种特殊的下采样方法,故在这里记录一下。

Class AntiAliasInterpolation2d(nn.Module):
	## 初始化
	def __init__(self, channels, scale):
		## channels
		## scale: 下采样比例 取 < 1, 这里假设取0.5
		super(AntiAliasInterpolation2d, self).__init__()
		sigma = (1 / scale - 1) / 2  ## 0.5
		kernel_size = 2* round(sigma * 4) + 1 ## 5
		self.ka = kernel_size // 2 ## 2
		self.kb = self.ka - 1 if kernel_size % 2 == 0 else self.ka ## 2
		kernel_size = [kernel_size, kernel_size] ##[5, 5]
		sigma = [sigma, sigma]   ## [0.5, 0.5] 
		kernel = 1
		meshgrids = torch.mershgrid(   ## size: (2, 5, 5)
			[	
				torch.arange(size, dtype=torc.float32)
					for size in kernel_size	
				]
		)
		for size, std, mgrid in zip(kernel_size, sigma, meshgrids):
			mean = (size - 1)  / 2   ## 2
			## 高斯处理(标准化,使得数据在处理之后,符合正态分布,符合模型推理要求)
			kernel *= torch.exp(-(mgrid - mean)**2 / (2 * std **2)) ## shape: [5, 5]
		## 保证卷积核中元素和为1
		kernel = kernel / torch.sum(kernel) ## shape: [5, 5]
		kernel = kernel.view(1, 1, *kernel.size()) ##shape[1, 1, 5, 5]
		## 数组广播
		kernel = kernel.repeat(channels, *[1] * (kernel.dim() - 1)) ## shape:[channels, 1, 5, 5],这里第二个维度由(in_channel/group)计算得到
		## 向模块添加持久缓冲区(将kennel加入到“weight”中,weight不参与训练)
		self.register_buffer("weight", kernel)
		self.groups = channels ## group=channel,为deepwise
		self.scale = scale
		inv_scale = 1 / scale
		self.int_inv_scale = int(inv_scale)
	
	## 推理
	def forward(self, input):
		if self.scale == 1.0:
			return input
		## 填充(conv 操作不改变size)
		out = F.pad(input, (self.ka, self.kb, self.ka, self,kb))
		## 卷积处理
		out = F.conv2d(out, weight=self.weight, groups=self.groups)
		## 下采样,int_inv_scale为scale 倒数的整数
		out = out[:, :, ::self.int_inv_scale, ::self.int_inv_scale]
		return out
	
		 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Matlab中,可以使用下采样方法对图像进行降采样。下采样是指将图像的分辨率降低,减少图像中的像素数量。下采样方法可以通过缩小图像的尺寸来实现。 在给定的代码中,使用了以下方法对图像进行下采样: - p256=photo(1:2:end,1:2:end):将原图像按照2的步长进行采样,得到256x256的图像。 - p128=photo(1:4:end,1:4:end):将原图像按照4的步长进行采样,得到128x128的图像。 - p64=photo(1:8:end,1:8:end):将原图像按照8的步长进行采样,得到64x64的图像。 这些代码将原图像和经过不同采样率处理后的图像显示在同一个figure中,以便进行对比和分析。\[2\] 需要注意的是,下采样会导致图像的细节丢失,因此在选择采样率时需要权衡图像质量和计算效率的因素。 #### 引用[.reference_title] - *1* *2* [图像数字处理——使用matlab对图像进行采样和量化](https://blog.csdn.net/qq_45913371/article/details/120310917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [图像复原方法(matlab)](https://blog.csdn.net/weixin_56260304/article/details/127461594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值