文章目录

  • 一、主要思想
  • 二、方法

一、主要思想

提出了pyramid pooling module (PPM) 模块,聚合不同区域的上下文信息,从而提高获取全局信息的能力。

现有的深度网络方法中,某一个操作的感受野直接决定了这个操作可以获得多少上下文信息,所以提升感受野可以为网络引入更多的上下文信息。

二、方法


Step1:使用global averag pooling得到不同尺度的特征,PPM模块融合了4个不同尺度的特征:

  • 红色是最粗糙尺度,使用一个global average pooling 实现
  • 其他的都是将特征图切分为不同数量的块,在每个块内使用global average pooling (文中四个尺度分别是 1x1, 2x2, 3x3, 6x6)

Step2:global average pooling 之后,每层都接一个1x1的卷积来降低通道维度。

Step3:上采样到和原图相同的尺寸,然后和进入PPM头之前的feature map 进行concat 来预测结果。


import torch
import torch.nn as nn
from mmcv.cnn import ConvModulefrom mmseg.ops import resize
from ..builder import HEADS
from .decode_head import BaseDecodeHead
from .Attention_layer import HardClassAttention as HCAclass PPM(nn.ModuleList):"""Pooling Pyramid Module used in PSPNet.Args:pool_scales (tuple[int]): Pooling scales used in Pooling PyramidModule.in_channels (int): Input channels.channels (int): Channels after modules, before conv_seg.conv_cfg (dict|None): Config of conv layers.norm_cfg (dict|None): Config of norm layers.act_cfg (dict): Config of activation layers.align_corners (bool): align_corners argument of F.interpolate."""def __init__(self, pool_scales, in_channels, channels, conv_cfg, norm_cfg,act_cfg, align_corners):super(PPM, self).__init__()self.pool_scales = pool_scalesself.align_corners = align_cornersself.in_channels = in_channelsself.channels = channelsself.conv_cfg = conv_cfgself.norm_cfg = norm_cfgself.act_cfg = act_cfgfor pool_scale in pool_scales:self.append(nn.Sequential(nn.AdaptiveAvgPool2d(pool_scale),ConvModule(self.in_channels,self.channels,1,conv_cfg=self.conv_cfg,norm_cfg=self.norm_cfg,act_cfg=self.act_cfg)))def forward(self, x):"""Forward function."""ppm_outs = []for ppm in self:ppm_out = ppm(x)upsampled_ppm_out = resize(ppm_out,size=x.size()[2:],mode='bilinear',align_corners=self.align_corners)ppm_outs.append(upsampled_ppm_out)return ppm_outs@HEADS.register_module()
class PSPHead(BaseDecodeHead):"""Pyramid Scene Parsing Network.This head is the implementation of`PSPNet <https://arxiv.org/abs/1612.01105>`_.Args:pool_scales (tuple[int]): Pooling scales used in Pooling PyramidModule. Default: (1, 2, 3, 6)."""def __init__(self, pool_scales=(1, 2, 3, 6), **kwargs):super(PSPHead, self).__init__(**kwargs)assert isinstance(pool_scales, (list, tuple))self.pool_scales = pool_scalesself.psp_modules = PPM(self.pool_scales,self.in_channels,self.channels,conv_cfg=self.conv_cfg,norm_cfg=self.norm_cfg,act_cfg=self.act_cfg,align_corners=self.align_corners)self.bottleneck = ConvModule(self.in_channels + len(pool_scales) * self.channels,self.channels,3,padding=1,conv_cfg=self.conv_cfg,norm_cfg=self.norm_cfg,act_cfg=self.act_cfg)def forward(self, inputs):"""Forward function."""# inputs [4, 512, 64, 128]x = self._transform_inputs(inputs) #[4, 2048, 64, 128]psp_outs = [x]  # list, len=1, psp_outs[0].shape = [4, 2048, 64, 128]# self.psp_models(x), list, len=4psp_outs.extend(self.psp_modules(x)) # len(psp_outs) = 5, psp_out[1-4].shape = [4, 512, 64, 128]psp_outs = torch.cat(psp_outs, dim=1) # [4, 4096, 64, 128]output = self.bottleneck(psp_outs)    # [4, 512, 64, 128]output = self.cls_seg(output)         # [4, 19, 64, 128]# import pdb; pdb.set_trace()return output

【语义分割】PSPNet:Pyramid Scene Parsing Network相关推荐

  1. 【论文阅读】PSPNet(Pyramid Scene Parsing Network)

    用于语义分割的金字塔场景识别网络 论文链接 摘要 该论文通过金字塔池化模块以及金字塔场景解析网络(PSPNet),通过基于不同区域的上下文信息聚合来利用全局上下文信息的能力.全局先验表示在场景解析任务 ...

  2. 场景解析--Pyramid Scene Parsing Network

    Pyramid Scene Parsing Network CVPR2017 语义分割 https://github.com/hszhao/PSPNet 针对 FCN 中没有 context 信息,本 ...

  3. Pyramid Scene Parsing Network

    论文地址:https://arxiv.org/pdf/1612.01105.pdf 源码地址:https://github.com/hszhao/PSPNet 来自:Semantic Segmenta ...

  4. 【PSPnet2017】Pyramid Scene Parsing Network

    Pyramid Scene Parsing Network 金字塔式场景解析网络 arXiv:1612.01105v2 [cs.CV] 27 Apr 2017 文章地址:https://arxiv.o ...

  5. 一文掌握语义分割PSPNet——证件照制作、抠图(算法原理、Pytorch实现)

    目录 一. 语义分割概述 二.  PSPNet语义分割原理和Pytorch实现 1. PSPNet算法原理 2. 环境配置 3.  训练数据集处理 4.数据预处理和加载 5. 模型构建 5. 训练 三 ...

  6. 机器学习笔记: Upsampling, U-Net, Pyramid Scene Parsing Net

    前言 在CNN-based 的 模型中,我们可能会用到downsampling 操作来减少模型参数,以及扩大感受野的效果. 下图是一个graph segmentation的例子,就先使用 downsa ...

  7. 【语义分割】DANet Dual Attention Network for Scene Segmentation

    DANet(Dual Attention Network for Scene Segmentation)在语义分割领域多个数据集上取得了STOA的结果,值得大家关注. [废话两段] 由于之前没跑过语义 ...

  8. 【论文阅读--实时语义分割】BiSeNet V2: Bilateral Network with Guided Aggregation

    摘要 低层细节和高层语义对于语义分割任务都是必不可少的.然而,为了加快模型推理的速度,目前的方法几乎总是牺牲低级细节,这导致了相当大的精度下降.我们建议将这些空间细节和分类语义分开处理,以实现高精度和 ...

  9. 场景分割:MIT Scene Parsing 与DilatedNet 扩展卷积网络

    MIT Scene Parsing Benchmark简介 Scene parsing is to segment and parse an image into different image re ...

最新文章

  1. 《如何与面试官处朋友》系列-缓存击穿、穿透、雪崩场景原理大调解
  2. R语言ggplot2可视化在X轴上可视化时间标签实战:可视化时间标签、对时间标签进行旋转
  3. R语言do.call函数和call函数实战
  4. 检测到目标服务器启用了trace方法_CVPR2019目标检测方法进展综述
  5. 人工智能和机器学习在治安管理方面意义重大
  6. Nature论文爆出千行Python代码Bug,或影响百篇学术论文
  7. 三百元月薪的小资生活
  8. 以下描述中不属于python语言控制结构的是_高中信息技术《Python语言》模块试卷...
  9. 前端如何正确使用中间件?
  10. js中的location的href和pathname,search
  11. 我的世界手动选择java_如何选中路径-我的世界怎么选择java路?我的世界怎么选择java路径 爱问知识人...
  12. linux 下搭建yolov3错误,Ubuntu20.04+cuda11.1+yolo3 目标检测 深度学习系统 真正从0搭建 包含各类可能遇到的错误...
  13. WriteableBitmap 巧学巧用
  14. 基于Pre-trained模型加速模型学习的6点建议
  15. Nodejs Playwright 自动识别验证码登陆B站
  16. mac下用mysql执行sql文件完整
  17. caj转word是怎么进行转换的
  18. Java matlab车牌识别,车牌识别matlab实现(蓝色车牌和新能源车牌)
  19. 东芝L630-08R装机拆机流程
  20. 那年花一个钟用PS改证件照的背景色,今天用Excel我只花了60秒!

热门文章

  1. 夏普出了款机器人手机 可以和你“坐着聊聊天”
  2. 中国人工智能学会通讯——神经环路研究最新进展及对类脑计算的启示 1.复杂科学...
  3. 许昌:让便捷支付成为智慧城市新名片
  4. 微信APP支付的坑 - errorcode=-1
  5. 使用 rem 实现 适配各种屏幕布局
  6. ADO和DAO的区别
  7. 10月末周网络安全报告:应用程序漏洞占比93.1%
  8. python3.2安装tornado
  9. BOA+CGI+SQLite 随笔
  10. 绝对经典的滑动门特效代码