torch.nn.ReflectionPad2d()的用法简介

最近在看Pix2PixHD的源码时,发现里面有几处用了nn.ReflectionPad2d()这个函数,查阅了官方文档和网上的资料后,终于弄明白了这个函数的用处。

函数用途:对输入图像以最外围像素为对称轴,做四周的轴对称镜像填充。

填充顺序:左->右->上->下

对于一个4维的Tensor,当只指定一个padding参数时,则表示对四周采用相同的填充行数。

# 对四周都填充3行
nn.ReflectionPad2d(3)    

   以下为计算实例:

>>> a = tensor([[[[1., 1., 1., 1., 1.],
                  [1., 1., 1., 1., 1.],
                  [1., 1., 1., 3., 1.],
                  [1., 3., 4., 5., 1.],
                  [1., 1., 1., 1., 1.]]]])

>>> p = nn.ReflectionPad2d(3) 

>>> p(a) = tensor([[[[5., 4., 3., 1., 3., 4., 5., 1., 5., 4., 3.],
                     [3., 1., 1., 1., 1., 1., 3., 1., 3., 1., 1.],
                     [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
                     [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
                     [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
                     [3., 1., 1., 1., 1., 1., 3., 1., 3., 1., 1.],
                     [5., 4., 3., 1., 3., 4., 5., 1., 5., 4., 3.],
                     [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
                     [5., 4., 3., 1., 3., 4., 5., 1., 5., 4., 3.],
                     [3., 1., 1., 1., 1., 1., 3., 1., 3., 1., 1.],
                     [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]]])



将上述运算过程用图示形式表示,以左侧填充3列像素为例,褐色虚线框内为原始Tensor:

 

 

 

若分别对4个维度进行不同行数的填充,则需分别指定填充参数。

# 左侧填充1行,右侧填充2行,上方填充3行,下方填充2行
nn.ReflectionPad2d((1, 2, 3, 2))    
 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值