【语义分割专题】语义分割相关工作--PSPNet

语义分割系列5-Pspnet(pytorch实现) 本文介绍了PSPnet网络,通过pytorch框架搭建了Pspnet模型,在CamVid数据集上进行复现。 阅读详情

Pyramid Scene Parsing Network

论文在结构上提供了一个pyramid pooling module,在不同层次上融合feature,达到语义和细节的融合。

PSPNet通过引入空洞卷积来修改基础的ResNet架构,,特征经过最初的池化,在整个编码器网络中以相同的分辨率处理(原始图像的1/4),直到它到达空间池化模块。

在ResNet的中间层引入辅助损失,以优化整体学习。

在修改后的ResNet编码器顶部的空间金字塔池化聚合全局上下文。

或许可以考虑在金字塔结构那里加一个SE模块

贡献:

  • 提出了金字塔的场景解析网络(将困难的上下文特征嵌入到FCN的预测网络中)
  • 提出了一种基于有监督的loss的ResNet的优化策略。
  • 构建了一个实用的system用于场景解析

在这里插入图片描述

  • 基础层经过预训练模型(ResnNet)和空洞卷积策略提取feature map,提取后的feature map是输入的1/8.
  • feature map经过Pyramid Pooling Module得到融合的带有整体信息的feature,在上采样与池化前的feautre map相concat
  • 最后经过一个卷积层得到最终输出。

该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征即全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1 x 1的卷积对于级别通道降为原来的1/N.再通过双线性插值获得未池化前的大小,最终concat到一起。

论文架构:

  • Abstract

    本文提出的金字塔池化模块能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。
    
  • Introduction

    场景分割是对场景的理解。它包含了预测这个标签,位置以及形状。
    
    目前已知的并没有很好地利用全局场景种类。获取全局的图像特征。空间金字塔池化。并提出优化策略。
    
  • Related Work

     回顾了场景解析以及语义分割任务
     
     高层的特征包含了更多的语义信息以及更少的位置信息。
     
     要利用好全局的文本信息 global context information by different-region-based context aggregation
     
     语义分割模型的工作基于两个方法:
         一方面:基于多尺度的特征融合,高层特征具有很强的语义信息,底层特征包含更多的细节;
         另外一方面,基于结构的越策。例如使用CRF(条件随机场)做后端细化分割结果。
      
      为了充分的利用全局特征层次先验知识来进行不同场景理解,本文提出的PSP模型能够聚合不同区域的上下文而达到该目的。
    
  • Pyramid Scene Parsing Network

  • Deep Supervision for ResNet-Based FCN

  • Experiments

     devil is always in the details.
     
     base learning rate;momentum and weight decay;data augmentation;auxiliary loss;
     
     评价指标:Mean IoU and Pixel Acc
    

在这里插入图片描述

在这里插入图片描述

代码

IMAGE_ORDERING = 'channels_last'


def relu6(x):
	return K.relu(x, max_value=6)




def _conv_block(inputs, filters, alpha, kernel=(3, 3), strides=(1, 1)):

	channel_axis = 1 if IMAGE_ORDERING == 'channels_first' else -1
	filters = int(filters * alpha)
	x = ZeroPadding2D(padding=(1, 1), name='conv1_pad', data_format=IMAGE_ORDERING  )(inputs)
	x = Conv2D(filters, kernel , data_format=IMAGE_ORDERING  ,
										padding='valid',
										use_bias=False,
										strides=strides,
										name='conv1')(x)
	x = BatchNormalization(axis=channel_axis, name='conv1_bn')(x)
	return Activation(relu6, name='conv1_relu')(x)




def _depthwise_conv_block(inputs, pointwise_conv_filters, alpha,
													depth_multiplier=1, strides=(1, 1), block_id=1):

	channel_axis = 1 if IMAGE_ORDERING == 'channels_first' else -1
	pointwise_conv_filters = int(pointwise_conv_filters * alpha)

	x = ZeroPadding2D((1, 1) , data_format=IMAGE_ORDERING , name='conv_pad_%d' % block_id)(inputs)
	x = DepthwiseConv2D((3, 3) , data_format=IMAGE_ORDERING ,
														 padding='valid',
														 depth_multiplier=depth_multiplier,
														 strides=strides,
														 use_bias=False,
														 name='conv_dw_%d' % block_id)(x)
	x = BatchNormalization(
			axis=channel_axis, name='conv_dw_%d_bn' % block_id)(x)
	x = Activation(relu6, name='conv_dw_%d_relu' % block_id)(x)

	x = Conv2D(pointwise_conv_filters, (1, 1), data_format=IMAGE_ORDERING ,
										padding='same',
										use_bias=False,
										strides=(1, 1),
										name='conv_pw_%d' % block_id)(x)
	x = BatchNormalization(axis=channel_axis,
																name='conv_pw_%d_bn' % block_id)(x)
	return Activation(relu6, name='conv_pw_%d_relu' % block_id)(x)





def get_mobilenet_encoder( input_height=224 ,  input_width=224 , pretrained='imagenet' ):

	alpha=1.0
	depth_multiplier=1
	dropout=1e-3


	img_input = Input(shape=(input_height,input_width , 3 ))


	x = _conv_block(img_input, 32, alpha, strides=(2, 2))
	x = _depthwise_conv_block(x, 64, alpha, depth_multiplier, block_id=1)
	f1 = x

	x = _depthwise_conv_block(x, 128, alpha, depth_multiplier,
														strides=(2, 2), block_id=2)
	x = _depthwise_conv_block(x, 128, alpha, depth_multiplier, block_id=3)
	f2 = x

	x = _depthwise_conv_block(x, 256, alpha, depth_multiplier,
														strides=(2, 2), block_id=4)
	x = _depthwise_conv_block(x, 256, alpha, depth_multiplier, block_id=5)
	f3 = x

	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier,
														strides=(2, 2), block_id=6)
	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=7)
	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=8)
	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=9)
	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=10)
	x = _depthwise_conv_block(x, 512, alpha, depth_multiplier, block_id=11)
	f4 = x

	x = _depthwise_conv_block(x, 1024, alpha, depth_multiplier,
														strides=(2, 2), block_id=12)
	x = _depthwise_conv_block(x, 1024, alpha, depth_multiplier, block_id=13)
	f5 = x

	return img_input , [f1 , f2 , f3 , f4 , f5 ]



IMAGE_ORDERING = 'channels_last'
MERGE_AXIS = -1


def resize_image(inp, s, data_format):
    import tensorflow as tf

    return Lambda(
        lambda x: tf.image.resize_images(
            x, (K.int_shape(x)[1] * s[0], K.int_shape(x)[2] * s[1]))
    )(inp)


def pool_block(feats, pool_factor):
    if IMAGE_ORDERING == 'channels_first':
        h = K.int_shape(feats)[2]
        w = K.int_shape(feats)[3]
    elif IMAGE_ORDERING == 'channels_last':
        h = K.int_shape(feats)[1]
        w = K.int_shape(feats)[2]

    # strides = [18,18],[9,9],[6,6],[3,3]
    pool_size = strides = [int(np.round(float(h) / pool_factor)), int(np.round(float(w) / pool_factor))]

    # 进行不同程度的平均
    x = AveragePooling2D(pool_size, data_format=IMAGE_ORDERING, strides=strides, padding='same')(feats)

    # 进行卷积
    x = Conv2D(512, (1, 1), data_format=IMAGE_ORDERING, padding='same', use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)

    x = resize_image(x, strides, data_format=IMAGE_ORDERING)

    return x


def _pspnet(n_classes, encoder, input_height=384, input_width=576):
    assert input_height % 192 == 0
    assert input_width % 192 == 0

    img_input, levels = encoder(input_height=input_height, input_width=input_width)
    [f1, f2, f3, f4, f5] = levels

    o = f5

    # 对f5进行不同程度的池化
    pool_factors = [1, 2, 3, 6]
    pool_outs = [o]

    for p in pool_factors:
        pooled = pool_block(o, p)
        pool_outs.append(pooled)

    # 连接
    o = Concatenate(axis=MERGE_AXIS)(pool_outs)

    # 卷积
    o = Conv2D(512, (1, 1), data_format=IMAGE_ORDERING, use_bias=False)(o)
    o = BatchNormalization()(o)
    o = Activation('relu')(o)

    # 此时输出为[144,144,nclasses]
    o = Conv2D(n_classes, (3, 3), data_format=IMAGE_ORDERING, padding='same')(o)
    o = resize_image(o, (8, 8), data_format=IMAGE_ORDERING)
    o = Reshape((-1, n_classes))(o)
    o = Softmax()(o)
    model = Model(img_input, o)
    return model


def mobilenet_pspnet(n_classes, input_height=224, input_width=224):
    model = _pspnet(n_classes, get_mobilenet_encoder, input_height=input_height, input_width=input_width)
    model.model_name = "mobilenet_pspnet"
    return model

PSPNet :语义分割 PSPNet:语义分割 随着卷积神经网络在目标检测任务上的推进,它也开始被用于更精细的图像处理任务:语义分割和实例分割。目标检测只需要预测图像中每个对象的位置和类别,语义分割还要把每个像素都进行分类,而实例分割的任务则更难,要进一步把每个对象的不同实例都区分开。 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割。语义分割是对图像中的每一个像素进行分类,目前广泛应用于医学图像与无人驾驶等。语义在语音识别中指的是语音的意思,在图像领域,语义指的是 阅读详情

相关推荐

深度学习之PSPnet用于语义分割

工程主页:https://github.com/hszhao/PSPNet1 摘要 rank 1 on PASCAL VOC 2012 等多个benchmark(信息截止2016.12.16) http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?cls=mean&challengeid=11&compid=6&submid=8822

大青上的博客 2万+

【语义分割网络系列】五、PSPNet

PSPNet

traveller的博客 1966

【语义分割系列:九】PSPNet 论文翻译笔记解析

2017 CVPR Pyramid Scene Parsing Network Semantic Segmentation on PyTorch (include FCN, PSPNet, Deeplabv3, DANet, DenseASPP, BiSeNet, EncNet, DUNet, ICNet, ENet, OCNet, CCNet, PSANet, CGNet, ESPNet, L...

鹿鹿的博客 2053

PSPNet | 语义分割及场景分析

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本次, 由香港中文大学(CUHK)和商汤科技(SenseTime)提出的金字塔场景解析网络(Pyramid Scene Parsing Network,PSPNet)已经过审阅。语义分割的目标仅仅是获知已知对象的每个像素的类别标签。场景解析是基于语义分割的,它的目标是获知图像内所有像素的类别标签。场景...

小白学视觉 2746

语义分割之PSP-Net原理以及代码讲解

CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 论文地址:Pyramid Scene Parsing Network github地址: PSP-Net可以说是语义分割当中比较经典的一个了,不仅有着较好的多类分割精度,同时实时性也ok(backbone在resnet18时在p100上可以跑到40ms左右,不算慢,当然现在很多优秀的语义分割算法都能做的比它好),整个网络结构相对也很简单,所以目前语义分割方.

xuzz_498100208的博客 1万+

常用语义分割小样本模型

常用语义分割小样本模型 1.介绍 深度卷积神经网络在图像分类、目标检测、语义分割等许多视觉理解任务上都取得了重大突破。一个关键的原因是大规模数据集的可用性,比如ImageNet,这些数据集支持对深度模型的培训。然而,数据标记是昂贵的,特别是对于密集的预测任务,如语义分割和实例分割。此外,在对模型进行训练之后,很难将模型应用于新类的预测。与机器学习算法不同的是,人类只看到几个例子就能很容易地从图像中分割出一个新概念。人类和机器学习算法之间的差距激发了对小样本学习的研究,其目的是学习一个模型,可以很好地推广到具

吴建明wujianming_110117 3315

语义分割-PSPNet

论文阅读: 《Pyramid Scene Parsing Network》原文链接 场景解析对于不受限制的开放词汇表和多样化的场景具有挑战性。在此论文中,利用金字塔池模块和金字塔场景解析网络(PSPNet)来开发基于不同区域的全球上下文信息聚合的能力。全局先验表示法能够有效地生成高质量的场景解析结果,pspnet在像素级预测上作为优越的框架。该方法在不同的数据集上实现了最先进的性能。2016年,在场景解析挑战中获第一。PSPNet在PASCAL VOC 2012和Cityscapes上的mIoU的准确性分别

weixin_43925119的博客 603

PSPNet logits 蒸馏和特征蒸馏

PSPNet 知识蒸馏PSPNet logits 蒸馏和特征蒸馏IntroductionInnovations蒸馏现状本文方法原理Results PSPNet logits 蒸馏和特征蒸馏 Introduction 随着神经网络和CNN的发展,越来越多的复杂问题可以得到解决,但近年来,伴随着计算机的性能提升,神经网络结构变得越来越复杂和庞大。为了获得更高性价比的模拟计算,神经网络的迁移学习和压缩算法逐渐受到更多关注。研究人员期望以更小的时间成本和存储成本来获得更灵活的网络应用。 关于提高网络效率和准确性的问

asaander的博客 6709

PSPNet语义分割网络

论文题目:Pyramid Scene Parsing Network 论文链接:https://arxiv.org/pdf/1612.01105.pdf 各位好,今天我给大家带来一篇关于图像语义分割领域文章。这是2017年发表在CVPR上的一篇文章。可以说是经典。为何这么说呢?不用急,我会在后续笔述中详细阐述。由于本人爱好,各位可能在本人博文的看到很多研究方向,有视频行为识别,图像分割,...

机器学习,深度学习 2433

PSPNet原理与代码实例讲解

PSPNet原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来 语义分割是计算机视觉领域中的一项重要任务,它旨在识

AI架构师小马 989

语义分割(研究现状、技术基础)

前言 语义分割的目标是输入图像的每个像素分配一个标签,即像素级别的物体分类任务,如下图所示, 其中一张场景图像及该场景对应的语义分割标签图像,道路所属的所有像素区域都被标注为紫色,即道路类。基于这一特性,它可以广泛地应用于人脸分割、医学图像处理和自动驾驶领域的感知应用。 一、国内外研究现状 1.1 通用语义分割 FCN:Fully Convolution Network(FCN)作为语义分割在深度学习领域的开山之作,它第一次将图像分类网絡的最后一层全连接层替换为一系列反卷积层,使得经过下采

黎国溥 1万+

目标分割(七)PSPNet讲解

目标分割PSPNet讲解 原文:PSPNet 收录:CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 代码:PSPNet-github

Raywit的博客 1万+

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 522

语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3

FCN网络 主要思想:使用卷积层替换到全连接层,以voc数据集、backbone为VGG16为例,最后的全连接层替换为卷积层,通道数为21(voc20类+背景),接着进行上采样为输入尺寸大小,对每一个像素点(21个特征图)进行softmax操作,确定该像素点所属类别。 ...

weixin_44645198的博客 3171

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4604

从UC3842的FB脚到COMP脚:一次讲透反激电源两种光耦反馈接法的选择与实战

本文深入探讨了UC3842 PWM控制器在反激式开关电源设计中的两种光耦反馈接法:FB脚与COMP脚方案。通过分析信号极性差异、稳定性特点及动态响应性能,提供场景化选型指南和可靠性设计要点,帮助工程师优化反馈环路设计,提升系统稳定性与效率。特别针对TL431和PC817等关键元件在温度漂移、老化衰减等实际问题给出解决方案。

weixin_28717683的博客 712

PSPNet——Pyramid Scene Parsing Network

什么是PSPNet模型? PSPNet模型最主要的特点是采用了PSP模块。 该模型提出的金字塔池化模块(Pyramid Pooling Module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。实验表明这样的先验表示(即指代PSP这个结构)是有效的,在多个数据集上展现了优良的效果。 PSP结构的功能是将获取到的特征层划分成不同大小的网格,每个网格内部各自进行平均池化。实现聚合不同区域的上下文信息,从而提高获取全局信息的能力。 在PSPNet中,PSP结构典型情况下,会将输入进来的特征层

乐亦亦乐的博客 2593

从零到一:手把手部署用友T3标准版11.2及SQL Server 2008R2环境

本文详细介绍了从零开始部署用友T3标准版11.2及SQL Server 2008R2环境的完整流程,包括环境准备、SQL Server安装、环境检测与修复、T3标准版安装实战以及初始化配置与测试。通过手把手的步骤指导和常见问题解决方案,帮助用户顺利完成部署,确保系统稳定运行。

weixin_28339967的博客 457

PSPNet

Pyramid Scene Parsing Network 收录:CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 原文地址: PSPNet 代码: pspnet-github Keras tensorflow 效果图: Abstract 本文提出的金字塔池化模块( pyramid pooling ...

WeisongZhao 6945

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2287

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

PSPNet 语义分割网络模型论文解读

转自:https://blog.youkuaiyun.com/u011974639/article/details/78985130 PSPNet Pyramid Scene Parsing Network 收录:CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 原文地址: PSPNet 代码: pspne...

haima1998的专栏 2568

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4723

Semantic Segmentation--Pyramid Scene Parsing Network(PSPNet)论文解读

PSPNet Pyramid Scene Parsing Network 收录:CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 原文地址: PSPNet 代码: pspnet-github Keras tensorflow 效果图: Abstract 本文提出的金字塔池化模

DFan的NoteBook 4万+

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2422

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

用于语义分割的金字塔场景识别网络 摘要 该论文通过金字塔池化模块以及金字塔场景解析网络(PSPNet),通过基于不同区域的上下文信息聚合来利用全局上下文信息的能力。全局先验表示在场景解析任务中产生了高质量的结果,而PSPNet为像素级预测提供了更好的框架。本论文提出的方法在各种数据集上实现了最先进的性能。它在ImageNet 2016场景解析挑战中,在PASCAL VOC2012上获得了mIOU准...

kyy1997的博客 2214

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 【语义分割专题】语义分割相关工作--ENet网络相关工作
下一篇: 【语义分割专题】语义分割相关工作--Multi-Scale Context Aggregation by Dilated Convolution
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值