github地址:https://github.com/Lextal/pspnet-pytorch/blob/master/pspnet.py

PSP模块示意图如下

代码如下

  1. class PSPModule(nn.Module):
  2. def __init__(self, features, out_features=1024, sizes=(1, 2, 3, 6)):
  3. super().__init__()
  4. self.stages = []
  5. self.stages = nn.ModuleList([self._make_stage(features, size) for size in sizes])
  6. self.bottleneck = nn.Conv2d(features * (len(sizes) + 1), out_features, kernel_size=1)
  7. self.relu = nn.ReLU()
  8.  
  9. def _make_stage(self, features, size):
  10. prior = nn.AdaptiveAvgPool2d(output_size=(size, size))
  11. conv = nn.Conv2d(features, features, kernel_size=1, bias=False)
  12. return nn.Sequential(prior, conv)
  13.  
  14. def forward(self, feats):
  15. h, w = feats.size(2), feats.size(3)
  16. priors = [F.upsample(input=stage(feats), size=(h, w), mode='bilinear') for stage in self.stages] + [feats]
  17. bottle = self.bottleneck(torch.cat(priors, 1))
  18. return self.relu(bottle)

此外,我基于自己的工作稍加修改,也给出一个3D版本。改动有几处,一是3d卷积和池化,二是上采样由双线性插值切换为trilinear,不知是否翻译为三线性插值,三是我对池化部分输出尺寸的修改,上采样到输入的一半,同时与普通池化相结合,不过,这样有没有效果,我还没试过

  1. class PSPModule(nn.Module):
  2. def __init__(self, features, sizes=(1, 2, 3, 6)):
  3. super(PSPModule, self).__init__()
  4. self.stages = []
  5. self.stages = nn.ModuleList([self._make_stage(features, size) for size in sizes])
  6. self.bottleneck = nn.Conv3d(features * (1 + 1), features, kernel_size=1)
  7. self.relu = nn.ReLU()
  8.  
  9. def _make_stage(self, features, size):
  10. prior = nn.AdaptiveAvgPool3d(output_size=(size, size, size))
  11. conv = nn.Conv3d(features, features / 4, kernel_size=1, bias=False)
  12. return nn.Sequential(prior, conv)
  13.  
  14. def forward(self, x, maxpool_x):
  15. h, w, l = x.size(2), x.size(3), x.size(4)
  16. priors = [F.upsample(input=stage(x), size=(h / 2, w / 2, l/2), mode='trilinear') for stage in self.stages] + [maxpool_x]
  17. bottle = self.bottleneck(torch.cat(priors, 1))
  18. print(bottle.size())
  19. return self.relu(bottle)

  

【语义分割】PSPNet中PSP模块的pytorch实现的更多相关文章

  1. 【语义分割】large kernel matters中GCN模块的pytorch实现

    GCN模块的实现比较简单,在giuhub上看到两种实现,轻微不同 实现一:https://github.com/ycszen/pytorch-segmentation/blob/master/gcn. ...

  2. 【语义分割】Stacked Hourglass Networks 以及 PyTorch 实现

    Stacked Hourglass Networks(级联漏斗网络) 姿态估计(Pose Estimation)是 CV 领域一个非常重要的方向,而级联漏斗网络的提出就是为了提升姿态估计的效果,但是其 ...

  3. 【Semantic segmentation Overview】一文概览主要语义分割网络(转)

    文章来源:https://www.tinymind.cn/articles/410 本文来自 CSDN 网站,译者蓝三金 图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类 ...

  4. 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

    花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅. DeepLabv1 Semantic image segmen ...

  5. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  6. CVPR2020:点云弱监督三维语义分割的多路径区域挖掘

    CVPR2020:点云弱监督三维语义分割的多路径区域挖掘 Multi-Path Region Mining for Weakly Supervised 3D Semantic Segmentation ...

  7. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  8. 语义分割--全卷积网络FCN详解

    语义分割--全卷积网络FCN详解   1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于C ...

  9. PyTorch中的MIT ADE20K数据集的语义分割

    PyTorch中的MIT ADE20K数据集的语义分割 代码地址:https://github.com/CSAILVision/semantic-segmentation-pytorch Semant ...

随机推荐

  1. ubuntu16配置mysql5.7主从同步

    测试环境如下: master: 10.0.0.26 slave01: 10.0.0.27 slave02: 10.0.0.28 一.三台机均安装mysql-server5.7 $ sudo apt-g ...

  2. Linux ping不通外网

    在linux中ping www.baidu.com 无法ping通,可能原因是DNS没配置好 方法一: 修改vi /etc/resolv.conf  增加如下内容: nameserver 114.11 ...

  3. 【bzoj2947】[Poi2000]促销

    2947: [Poi2000]促销 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 181  Solved: 120[Submit][Status][D ...

  4. linux系统上部署一个web项目

    对于apache开源项目中tomcat的认识,大多停留在Windows下,这次我通过一个简单的实例来介绍一下在linux下如何搭建tomcat环境,并且部署一个web项目. 先从基本安装开始,可别小看 ...

  5. docker问题:docker端口映射错误

    1 docker端口映射错误 1.1 问题描述 利用docker启动nginx容器的时候报错: 1.2 解决办法 一次执行下面的命令就可以解决 pkill docker iptables -t nat ...

  6. java面试题 级hr解答 非技术问题 !=!=未看

    Java基础 ● 集合类以及集合框架:HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法:ConcurrentHashMap: ● 进程和线程的区别: ● Java的并发. ...

  7. 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现

        回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录:      src\ NDF.Data.EntityFramew ...

  8. vs2017不是完全支持c99

    1.比如c99里面有一个特性, int count[]={0,[5]=7,9,10} 这种在VS2017里面是编译不通过的.; 2.c99有一个变长数组的概念(VLA),但是vs2017不支持.

  9. p5155 [USACO18DEC]Balance Beam

    传送门 分析 https://www.luogu.org/blog/22112/solution-p5155 代码 #include<bits/stdc++.h> using namesp ...

  10. servlet-向页面输出中文出现乱码处理方式

    package cn.lijun .content; import java.io.IOException;import java.io.PrintWriter; import javax.servl ...