PixelShuffle上采样原理讲解及程序实现

1 PixelShuffle简介

PixelShuffle(Sub-Pixel Convolutional Neural Network,像素重组)是一种经典的上采样方法,由《Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network》在处理图像超分辨率的问题上提出,可以对缩小后的特征图进行有效的放大操作。
PixelShuffle现已广泛应用在如图像分割等计算机视觉问题上,和反卷积一起成为了神经网络中最常用的两种上采样技术。相比之下PixelShuffle克服了反卷积的易产生棋盘格的问题,可以说PixelShuffle是目前通用上采样upsample技术中性能最好的

2 PixelShuffle原理讲解

下图为原论文中关于使用PixelShuffle实现图像超分辨的示意图(增加了一些标注)。

  • 超分辨率图像生成过程:首先对一个大小为 [ H , W , C ] [H,W,C] [H,W,C]的低分辨率图像(Input)进行 l − 1 l-1 l1次卷积,获得一个特征图 [ H , W , C ⋅ r 2 ] [H,W,C·r^2] [H,W,Cr2],这里的r为设置的期望上采样倍数。然后对特征图做shuffle变换获得一张大小为 [ H ⋅ r , W ⋅ r , C ] [H·r,W·r,C] [Hr,Wr,C]超分辨率图像(output)
  • PixelShuffle的功能:对特征图进行shape变换: [ H , W , C ⋅ r 2 ] [H,W,C·r^2] [H,W,Cr2]>>> [ H ⋅ r , W ⋅ r , C ] [H·r,W·r,C] [Hr,Wr,C]
  • PixelShuffle理解:将一个低分辨率像素划分为 [ r × r ] [r \times r] [r×r]份,默认是由特征图对应像素位置的 r 2 r^2 r2个特征像素组成一个低分辨率像素。在组成的过程中通过不断优化每组组合的权重来达到最好的上采样效果。

3 PixelShuffle程序实现

作为一种优秀的特征上采样方法,pytorch和tensorflow等深度学习平台已提供了相应的API接口,下面分享基于numpy,pytorch实现的PixelShuffle程序。

3.1 基于numpy实现PixelShuffle

#基于numpy实现PixelShuffle
#以[4,3,3]->[1,3*2,3*2]为例
#注:在实际程序中,通常习惯把通道C放在前面表示
import numpy as np
a = np.arange(36).reshape([4, 3, 3])
b = a.reshape([2, 2, 3, 3])
c = b.transpose([2, 0, 3, 1])
d = c.reshape([6, 6])

3.2 torch.nn.PixelShuffle()

pytorch中集成了PixelShuffle方法:torch.nn.PixelShuffle()
具体的使用方法为:

import torch
ps = torch.nn.PixelShuffle(3)
a = torch.Tensor(1, 9, 4, 4)
b = ps(a)
print(a.size())
"""
输出结果:
torch.Size([1, 9, 4, 4])
"""

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PixelShufflePytorch中的一个函数,用于将输入的张量进行像素重排。它的实现方式是通过将输入的通道进行重新排列,形成更高分辨率的输出张量。具体来说,PixelShuffle函数接受一个参数r,表示每个输出像素包含的输入通道数量。例如,如果r=2,那么每个输出像素将由4个输入通道组成。 在Pytorch中,可以使用torch.nn.PixelShuffle(upscale_factor)来调用PixelShuffle函数来实现像素重排。其中,upscale_factor表示放大倍数,即每个输出像素包含的输入通道数量。 以输出张量的(0, 0)位置的像素为例,它对应了r^2个通道。这些通道会被排列成一个r x r的大像素。例如,如果r = 3,那么输出张量的一个像素将包含9个通道。这个像素对应于右边SR图像中一个3x3的大像素。值得注意的是,颜色的对应关系需要仔细观察,以确保正确的像素匹配。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [PixelShuffle原理笔记(paper,pytorch实现)](https://blog.csdn.net/level_code/article/details/123637969)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [低分辨率feature maps的上采样方法:pixelshuffle](https://blog.csdn.net/qq_38883271/article/details/116260821)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值