当前位置:   article > 正文

卷积神经网络之上采样-pytorch_卷积 上采样 pytorch

卷积 上采样 pytorch

       利用卷积神经网络进行图像处理(图像超分、图像编码、风格转换、图像语义分割等)时避免不了要用到上采样操作,一般常见的上采样有:

      1、传统上采样。pytorch的双线性上采样函数torch.nn.Upsample(scale_factor=scale_factor, mode='bilinear'),参数model为选择的上采样插值算法。

      2、反卷积。pytorch操作函数torch.nn.ConvTranspose2d。

      3、反卷积的一些替换操作。

       反卷积一般会出现棋盘效应,一些避免棋盘操作的方法可见https://blog.csdn.net/shwan_ma/article/details/80874366,总结        起来就是两种:(1)kernel size与stride可以整除,比如核大小与步长都选择2;(2)利用双线性上采样+padding+卷积操作替换反卷积:

  class better_upsampling(nn.Module):
      def __init__(self, in_ch, out_ch, scale_factor):
          super(better_upsampling, self).__init__()
          self.conv = nn.Conv2d(in_ch, out_ch, 3, padding=0)
          self.up = nn.Upsample(scale_factor=scale_factor, mode='bilinear')

      def forward(self, x):
          x = self.up(x)
          x = F.pad(x, (3 // 2, int(3 / 2),
                     3 // 2, int(3 / 2)))
          x = self.conv(x)
          return x

      4、pixel_shuffle(pytorch)或depth_to_space(tensorflow)

       这两个操作功能是一样的,都是减少特征通道,扩大特征分辨率。详情可参考         https://blog.csdn.net/CHNguoshiwushuang/article/details/80878460

       在实践中,四种操作我是配合标准Unet网络进行试验的,其中传统上采样采用双线性上采样,方法4中的pixel_shuffle后面直接跟一个1*1卷积操作,以提升通道数量。通过试验,有如下发现:

     (1)双线性上采样的效果最好,直接反卷积因为有盘棋盘效应,效果最差;

     (2)方法3中的替换操作(1)还是会有棋盘效应;

     (3)方法3中的(2)以及方法4可以避免棋盘效应,但是最后的测试结果还是比直接采用双线性采样要差。

      以上只是结合Unet网络进行的实验得出的结果,仅供参考。具体采用哪种上采样方法好,还是需要结合自己的任务,具体问题具体分析才行。

      

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/154270
推荐阅读
相关标签
  

闽ICP备14008679号