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

文章目录

  • 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.mzph.cn/news/78479.shtml

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

相关文章

DataX实现Mysql与ElasticSearch(ES)数据同步

文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX: 三、DataX压缩包导入,解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…

实时显示当前文件夹下的文件大小,shell脚本实现

图片来源于网络,如果侵权请联系博主删除! 需求: 写一个shell终端命令,实时显示当前文件夹下的文件大小 实现: 您可以使用以下的Shell脚本命令来实时显示当前文件夹下的文件大小: while true; docleardu …

2023-亲测有效-git clone失败怎么办?用代理?加git?

git 克隆不下来,超时 用以下格式: git clone https://ghproxy.com/https://github.com/Tencent/ncnn.git 你的网站前面加上 https://ghproxy.com/ 刷的一下就下完了!!

投资理财基础知识分享(三)

大家好,我是财富智星,今天跟继续跟大家分享投资理财基础知识,买理财,何时买,何时卖的问题。 一、何时买? 在投资中,决定何时买入资产对于理财新手来说并不是一个应该花费过多精力的问题&#xf…

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程 1:系统要求 软件运行支持32位/64位window 10/11系统,内存最低要求> 8Gb.无其他硬性要求。 1:下载安装 打开百度网盘链接下载: 链接:百度网盘 请输入…

Transformers-Bert家族系列算法汇总

🤗 Transformers 提供 API 和工具,可轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本、碳足迹,并节省从头开始训练模型所需的时间和资源。这些模型支持不同形式的常见任务,例如: 📝 自…

Vue3统一导出局部组件和全局组件

局部组件统一导出 components新增ComponentA.vue、ComponentB.vue两个组件 新增index.js进行组件统一导入 import ComponentA from ./ComponentA.vue import ComponentB from ./ComponentB.vueexport {ComponentA,ComponentB }使用 <template><ComponentA /><…

最新模块化设计小程序系统源码完整版:开源可二开,支持DIY

随着互联网的快速发展&#xff0c;小程序已成为各行各业开展业务的重要工具。而模块化设计小程序系统源码完整版则是一种高效、灵活、易维护的解决方案。 分享一个最新的模块化设计小程序系统源码完整版&#xff0c;源码开源可二开&#xff0c;支持自由DIY设计&#xff0c;含完…

怎么裁剪图片?总结了下面几个方法

怎么裁剪图片&#xff1f;在日常的生活中&#xff0c;图片已经成为了我们不可或缺的一部分。或许你正在整理自己的相册时&#xff0c;或者我们需要向互联网上发布一些图片的时候&#xff0c;总之我们随时都可能会遇到一张需要进行裁剪的图片。比如说&#xff0c;一些图片上存在…

Unity 课时 4 : No.4 模拟面试题

课时 4 : No.4 模拟面试题 C# 1. 请说明字符串中 string str null string str “” string str string.Empty 三者的区别 第一个未作初始化没有值, 第二个为空字符串, 答案&#xff1a; str null 在堆中没有分配内存地址 str "" 和 string.Empty 一样都是…

新加坡亲子游景点推荐

长久以来&#xff0c;新加坡和马来西亚都是中国游客非常青睐的出境游目的地之一&#xff0c;极近的距离、便捷的交通、亲切的语言和文化环境使得这里的旅游体验备受赞誉。如果你准备带孩子去新加坡和马来西亚观光游&#xff0c;可以让你们享受到更多样的亲子旅行体验噢~ Wild W…

设计模式汇总

设计模式本质上是某类特定问题的代码设计解决方案&#xff0c;实际上是一套某类问题的代码设计经验总结。&#xff08;前辈总结的解决某类问题的切实可行的套路&#xff09; 问题 1、为什么要使用设计模式&#xff1f; 答&#xff1a;1、 提高代码复用率&#xff0c;降低开发成…

【网络通信 -- WebRTC】FlexFec 基本知识点总结概述

【网络通信 -- WebRTC】FlexFec 基本知识点总结概述 【1】FlexFec 的保护方案 假设存在一组源数据包(D L)&#xff0c;其序列号从 1 开始运行到 D L 一维非交错行 FEC(1-D Non-interleaved Row FEC) : 一种连续的源数据包进行保护的方案&#xff0c;可用于恢复按行分组的源…

Linux内存管理--smaps内存

一、内存的两个概念 了解smaps内存之前要先搞清楚Linux内存管理中的虚拟内存&#xff08;Virtual Memory&#xff09;和驻留内存&#xff08;Resident Memory&#xff09;两个概念。 1、虚拟内存 首先需要强调的是虚拟内存不同于物理内存&#xff0c;虽然两者都包含内存字眼…

微信会员卡开发流程

功能需求&#xff1a; 通过微信第三方平台创建的模板小程序&#xff0c;想要实现用户在小程序支付一定金额后领取会员卡&#xff0c;领取会员卡后可给用户下发一定数量的优惠券&#xff0c;并且实现用户在小程序消费享受商品折扣。 开发流程&#xff1a; 一、了解微信的3个平…

Java高级: 反射

目录 反射反射概述反射获取类的字节码反射获取类的构造器反射获取构造器的作用反射获取成员变量&使用反射获取成员方法反射获取成员方法的作用 反射的应用案例 接下来我们学习的反射、动态代理、注解等知识点&#xff0c;在以后开发中极少用到&#xff0c;这些技术都是以后…

【动态规划刷题 14】最长递增子序列 摆动序列

673. 最长递增子序列的个数 链接: 673. 最长递增子序列的个数 给定一个未排序的整数数组 nums &#xff0c; 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列&#xff0c;分别是 [1, 3, 4,…

[Qt]基础数据类型和信号槽

文章目录 1. Qt基本结构1.1 Qt本有项目1.1.1 项目文件&#xff08;.pro&#xff09;1.1.2 main.cpp1.1.3 mainwindow.ui1.1.4 mainwindow.h1.1.5 mainwindow.cpp 1.2 Qt中的窗口类1.2.1基础窗口类1.2.2 窗口的显示 1.3 内存回收 2. Qt中的基础数据类型2.1 基础类型2.2 log输出2…

Linux上防火墙操作

开放关闭防火墙 查看防火墙状态的命令&#xff1a;systemctl status firewalld 或者 firewall-cmd --state 暂时关闭防火墙的命令&#xff1a;systemctl stop firewalld 暂时开启防火墙的命令&#xff1a;systemctl start firewalld 永久关闭防火墙(禁用开机自启)下次启动&a…

内网穿透——Windows搭建服务器

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…