Pyramid Scene Parsing Network–CVPR,2017论文解读及其pytorch代码

news2024/11/24 9:40:45

文章目录

  • Pyramid Scene Parsing Network--CVPR,2017
    • 一、背景介绍
    • 二、网络结构和优化方法
    • 三、实验结果

Pyramid Scene Parsing Network–CVPR,2017

Github代码链接

一、背景介绍

现阶段随着数据集制作精细化、标签种类变多、具有语义相似标签等导致出现一些困难样本,使得经典的语义分割网络无法很好的处理(如FCN,作者认为FCN缺乏合适的策略去利用全局场景类别线索)这些困难样本。如下,作者挑选了ADE20K数据集中几个具有代表性的困难样本,第一行因为FCN没有正确捕获图像内容之间的关系,错误的将外形和汽车相似的游艇识别为汽车,要是能够正确识别出其在水面上就能够避免这种错误;第二行是因为FCN没有捕获类别之间的关系导致遇到相似的类别如building和skyscraper这两类,就无法正确区分;第三行是因为类别代表的物体相对大小各有区别,但FCN没有针对该问题进行处理,导致和床纹理相似的枕头被错误识别成床。

总结这些观察结果,许多错误部分或完全与不同感受野的上下文关系和全局信息相关。

提高模型感受野是解决该问题的切入点,虽然通过理论分析ResNet获得的感受野比原图还大(也就是能够感知全图),但是通过实验发现CNN的感受野是小于理论分析的。

不少人提出用Global average pooling来提高模型感受野,但是作者认为对于困难样本经过Global average pooling后的特征仅用一个特征向量来代表许多的物体类别会导致空间信息的丢失或者引起歧义。故作者认为可以对于局部区域进行全局平均池化就可以缓解该问题。

此外,随着网络变得越来越深,会带来优化困难这一问题。ResNet通过skip connection来缓解优化问题,作者提出通过添加附加损失来辅助训练(附加损失及其相关分支只在训练时使用,测试时就会丢弃)。

在这里插入图片描述

二、网络结构和优化方法

在这里插入图片描述

结构如上图所示,从图上就能大致看出网络forward过程是什么样子。首先输入图片,通过特征提取网络如ResNet等提取到特征X后(这里作者为了扩大感受野使用的是包含空洞卷积的ResNet,X特征为原图的1/8大小)。之后X输入进作者提出的pyramid pooling module,该模块分为四个分支,通过AdaptiveAvgPool2d函数将特征X池化为1x1、2x2、3x3和6x6大小的4个特征。这四个特征分别对应不同尺度的特征,比如1x1的表示全图。之后这4个特征通过卷积层减少网络通道数,方便后面和特征X沿着通道维度拼接。在拼接前要将特征图的大小统一,这里作者使用了线性插值法将4个特征上采样到和特征X大小一样的特征。之后通过卷积层获取最终的输出。

这里多说一嘴,通常图片大小为256或者512,1/8就是32或者64。这样看就大体知道作者为什么选择1、2、3、6了。

为了方便大家理解,这里贴一下Pyramid Pooling Module的Pytorch代码:

class PPM(nn.Module):
    def __init__(self, in_dim, reduction_dim, bins): #这里的in_dim就是特征X的通道数、reduction_dim就是获得的4个特征通过卷积层减少通道后的数量,通常取in_dim/4。bins为列表,表示通过AdaptiveAvgPool2d后获得的4个分支的特征大小。
        super(PPM, self).__init__()
        self.features = []
        for bin in bins:
            self.features.append(nn.Sequential(
                nn.AdaptiveAvgPool2d(bin),
                nn.Conv2d(in_dim, reduction_dim, kernel_size=1, bias=False),
                nn.BatchNorm2d(reduction_dim),
                nn.ReLU(inplace=True)
            ))
        self.features = nn.ModuleList(self.features)

    def forward(self, x):
        x_size = x.size()
        out = [x]
        for f in self.features:
            out.append(F.interpolate(f(x), x_size[2:], mode='bilinear', align_corners=True))
        return torch.cat(out, 1)

在这里插入图片描述
为了方便优化,作者在ResNet网络上除了主损失函数loss1还添加了loss2。这里因为要使用loss2是一个有监督损失,对应的标签为Ground Truth,就必须添加单独的分支让获取到的特征能够和Ground Truth对应。作者使用了卷积层+上采样构造这个分支。

三、实验结果

For a practical deep learning system, devil is always in the details.

实验结果在当时遥遥领先

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

继承的笔记

继承 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为 对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点 继承类 Java 中提供了一个关键字…

Hadoop-Hbase

1. Hbase安装 1.1 安装zookeeper、 hbase 解压至/opt/soft,并分别改名 配置环境变量并source生效 #ZK export ZOOKEEPER_HOME/opt/soft/zk345 export PATH$ZOOKEEPER_HOME/bin:$PATH #HBASE_HOME export HBASE_HOME/opt/soft/hbase235 export PATH$HBASE_HOME/b…

【OS】操作系统课程笔记 第三章 进程管理

3.1 多道程序设计 吞吐率:衡量一个系统效率的一个指标 采用多道程序设计可以显著提高吞吐率: 但是,并不是内存程序数量越多越好,下面有三点否定: 内存的容量限制了系统可同时处理程序的数目设备数量有限程序道数过多…

✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】

搜索与图论 1. DFS1. 排列数字(3分钟)2. n-皇后问题 2. BFS&#xff08;队列&#xff09;1. 走迷宫二刷总结&#xff08;队列存储一个节点pair<int,int>&#xff09;三刷总结 走过的点标记上距离(既可以记录距离&#xff0c;也可以判断是否走过) ★ ★ 例题2. 八数码二刷…

离线安装PX4日志分析工具Flight Review

使用Flight Review在线分析日志&#xff0c;有时会因为网络原因无法使用 使用离线安装的方式使用Flight Review&#xff0c;可以在无需网络的情况下使用Flight Review sudo apt-get install sqlite3 fftw3 libfftw3-devsudo apt-get install libatlas3-basegit clone --recur…

【Linux核心宝典】Linux 系统目录结构详解 - 01

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Linux基础入门

一、操作系统安装方法 1、使用u盘安装 工具&#xff08;前提条件&#xff09;&#xff1a; <1>u盘 <2>镜像文件iso/msdn.itellyou.cn <3>把u盘做成PE&#xff1a;大白菜/老毛桃/winPE/软碟通/ultralSO 设置BIOS&#xff1a;通过u盘启动 安装系统&…

Vue项目中实现拖拽排序效果-demo

在Vue3中实现拖拽排序&#xff0c;可以借助一些浏览器自带的API&#xff0c;以及一些Vue3的特性&#xff1a; 使用<template>标签中的v-for指令渲染出一个列表&#xff0c;每个列表项绑定一个draggable属性&#xff0c;使其能够被拖拽。 <template><ul><…

一次I/O操作的过程

什么是IO呢&#xff1f; IO&#xff0c;英文全称是Input/Output&#xff0c;翻译过来就是输入/输出。平时我们听得挺多&#xff0c;就是什么磁盘IO&#xff0c;网络IO。那IO到底是什么呢&#xff1f;是不是有种懵懵懂懂的感觉呀&#xff0c;好像大概知道它是什么&#xff0c;又…

ARIMA模型

1、简介 ARIMA模型(Autoregressive Integrated Moving Average model)&#xff0c;差分整合移动平均自回归模型&#xff0c;又称整合移动平均自回归模型&#xff0c;时间序列预测分析方法之一。ARIMA(p,d,q)中&#xff0c;AR是"自回归"&#xff0c;p为自回归项数;MA…

二叉树题目:最大层内元素和

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;最大层内元素和 出处&#xff1a;1161. 最大层内元素和 难度 4 级 题目描述 要求 给定一个二叉树的根结点 ro…

zookeeper可视化工具ZooInspector用法

最近在做银行的项目&#xff0c;用到了thrift&#xff0c;rpc和zookeeper&#xff0c;所有应用都是注册到zookeeper上的&#xff0c;想知道哪些应用注册上了&#xff0c;就用到ZooInspector这个可视化的工具。 1&#xff0c;下载 链接&#xff1a;https://issues.apache.org/…

flex弹性盒模型与阿里图标的使用

华子目录 flex布局flex布局原理flex使用三要素 阿里图标&#xff08;字体&#xff09; flex布局 相关学习网站&#xff1a;http://c.biancheng.net/css3/flex.html 1.flex是当前最主流的布局方式&#xff1a;用它布局起来更方便&#xff0c;取代了浮动的作用。 2.浮动布局有缺…

BUG:阿里巴巴图标库引入链接后,icon有时候会不显示的话svg下载到本地使用

忽然icon图标就不显示&#xff0c;但是代码、icon链接地址都没有发生变化 解决办法&#xff1a;将icon图标下载到本地&#xff0c;记住前后引用本地的名字要保持一致

学习jQuery库的第一天

简介 什么是 jQuery &#xff1f; jQuery 是一个广泛使用的 JavaScript 库。它简化了网页开发中常见的许多任务&#xff0c;例如 HTML 文档遍历、操作 HTML 元素、处理事件、动画效果、Ajax 网络请求等。通过使用 jQuery&#xff0c;开发人员可以更加高效地编写跨浏览器兼容的…

如何制作一个成功的超市购物小程序

随着互联网的普及和移动支付的便捷性&#xff0c;越来越多的消费者选择在网上购物&#xff0c;这也促使越来越多的商家开始搭建自己的小程序商城。对于超市便利店来说&#xff0c;拥有一个便捷、易用的小程序商城能够吸引更多的消费者&#xff0c;提高销售效率。那么如何快速搭…

MyBatis初级

文章目录 一、mybatis1、概念2、JDBC缺点2.1、之前jdbc操作2.2 、原始jdbc操作的分析 3、mybatis的使用3.1、导入maven依赖3.2、新建表3.3、实体类3.4、编写mybatis的配置文件3.5、编写接口 和 映射文件3.6、编写测试类3.7、注意事项 4、代理方式开发5、mybatis和spring整合5.1…

数学实验-最佳分数近似值(Mathematica实现)

一、实验名称&#xff1a;最佳分数近似值 二、实验环境&#xff1a;Mathematica 10.3软件 三、实验目的&#xff1a;研究怎样用分数近似值去对给定的无理数作最佳逼近&#xff0c;“最佳”就是既要误差小&#xff0c;又要分母小。我们首先需要对“最佳”定出具体而明确的标准…

动态IP代理是什么?一文看懂动态代理IP

一、什么是动态IP代理&#xff1f; 动态IP代理是一种代理服务&#xff0c;而动态IP是由ISP动态分配给用户的IP地址&#xff0c;这些IP地址会周期性地更改。每次链接互联网时&#xff0c;用户会被分配一个新的IP地址&#xff0c;因而也称为”轮换IP”。 IP地址轮换是一个过程&…

Roreg复现

一、roreg复现 [github链接][参考] 1.1 报错1 Traceback (most recent call last): File "setup.py", line 52, in <module> import torch File "/home/w/anaconda3/envs/pty_roreg/lib/python3.7/site-packages/torch/__init__.py", line …