简单记录一下用于图像语义分割的2个模块

1. GAU(Global Attention Upsample, 全局注意力上采样模块)

全局注意力上采样模块 (GAU)通过全局池化将高层特征作为低层特征的加权计算的指导,提取高层次特征的全局上下文信息。

实现如下所示:

对低层次特征执行3×3的卷积操作,同时减少CNN特征图的通道数;

从高层次特征经过全局平均池化生成的全局上下文信息依次经过 1×1 卷积、批量归一化 (batch normalization) 和非线性变换操作 (nonlinearity),然后再与低层次特征相乘;

最后,高层次特征与加权后的低层次特征相加并进行逐步的上采样过程;

GAU模块不仅能够更有效地适应不同尺度下的特征映射,还能以简单的方式为低层次的特征映射提供指导信息。

基于keras的代码实现:

# GAU(Global Attention Upsample, 全局注意力上采样模块)
# 低层特征图low_fm进行3*3卷积
# 高层特征图high_fm进行GAP、1*1,再与低层特征图进行相乘操作、批归一化、非线性激活
# 将上述得到的低层特征图与高层特征图进行相加融合
def GAU(low_fm, high_fm, filters):n, h, w, c = low_fm.get_shape().as_list()# 3*3low_fm = Conv2D(filters=filters, kernel_size=3, strides=1, padding='same', use_bias=False, dilation_rate=(1, 1))(low_fm)# GAPhigh_fm_up = GlobalAveragePooling2D()(high_fm)# 1*1high_fm_up = Reshape(target_shape=[1, 1, int(high_fm_up.shape[-1])])(high_fm_up)high_fm_up = tf.image.resize_bilinear(image=high_fm_up, size=[h, w], align_corners=True,name='resize_bilinear')high_fm_up = Conv2D(filters=filters, kernel_size=1, strides=1, padding='same', use_bias=False, dilation_rate=(1, 1))(high_fm_up)# 融合x = Multiply()([low_fm, high_fm_up])x = BatchNormlization()(x)x = Activation('relu')(x)# 输出high_fm = tf.image.resize_bilinear(image=high_fm, size=[h, w], align_corners=True,name='bilinear')out = Add()([x, high_fm])return out

2. PPM(Pyramid pooling module, 金字塔池化模块)

PPM目的是为了聚合不同特征层的上下文信息,以提高网络获取全局信息的能力,在不同的尺度下以保留全局信息使用不同多尺度的pooling操作,比起普通的pooling操作更能保留全局上下文信息;

具体做法为:在原始特征图上使用不同尺度的池化,得到多个不同尺寸的特征图,再在通道维度上拼接这些特征图 (包含原始特征图),最终输出一个糅合了多种尺度的复合特征图,从而达到兼顾全局语义信息与局部细节信息的目的;

示意图如下所示:

(a)图为单幅原始输入图像;
(b)图为通过CNN提取的原始特征图;CNN模块可以根据需要自行选择,论文中给出的该特征图尺寸为6*6;
(c)图为PPM模块:对(b)特征图进行不同尺度的池化操作,得到多个不同尺寸的特征图,然后对得到的特征图进行上采样操作,恢复至原始特征图大小,最后在通道维度上进行拼接,得到最终的融合了多种尺度的复合特征图;

例如图中为4个不同的池化操作,分别为红、橙、蓝和绿来表示:

红:使用6×6的池化,输出尺寸为1×1,再通过双线性插值上采样至6×6;
橙:使用3×3的池化,输出尺寸为2×2,再通过双线性插值上采样至6×6;
蓝:使用2×2的池化,输出尺寸为3×3,再通过双线性插值上采样至6×6;
绿:使用1×1的池化,输出尺寸为6×6 。

(d)图为最终预测结果, 通过1*1卷积调整通道,以实现像素级别的分类。

基于keras的代码实现:

以下代码用于语义分割,其中模型网络使用的是ghostnet作为主干网络实现;

其中的双线性插值上采样可参考GAU模块的代码,以下代码需要根据实际需要进行更改;

# PPM(Pyramid pooling module, 金字塔池化模块)
# bin_size=[]为池化尺寸, 根据需要自行选择
def PPM(inputs, bin_sizes=[5, 9, 13]):n, h, w, c = inputs.get_shape().sa_list()# 1*1降维inputs = Conv2D(filters=c // 4, kernel_size=1, strides=1, padding='same', use_bias=False, dilation_rate=(1, 1))(inputs)inputs = BatchNormlization()(inputs)inputs = Activation('relu')(inputs)concat_list = [inputs]# 池化for bin_size in bin_sizes:x = AvgPool2D(pool_size=[bin_size, bin_size], strides=(1, 1), padding='same')(inputs)concat_list.append(x)net = Concatenate(axis=-1)(concat_list)net = Conv2D(filters=c, kernel_size=1, strides=1, padding='same', use_bias=False, dilation_rate=(1, 1))(net)net = BatchNormlization()(net)net = Activation('relu')(net)return net

用于图像语义分割的GAU与PPM相关推荐

  1. 制作用于图像语义分割训练的标签数据【图像分割】【labelme】

    制作用于图像语义分割训练的标签数据 *写在前面 一.使用labelme制作json数据 1.安装labelme 2.利用labelme制作json数据 二.将json数据转化为图像数据 1.单个jso ...

  2. 图像语义分割_图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积...

    论文地址 :Rethinking Atrous Convolution for Semantic Image Segmentation 论文代码:Github链接 1. 摘要 文章主要的工作: 使用空 ...

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

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

  4. Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络

    Pytorch: 图像语义分割-FCN, U-Net, SegNet, 预训练网络 Copyright: Jingmin Wei, Pattern Recognition and Intelligen ...

  5. 图像语义分割入门:FCN/U-Net网络解析

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像 ...

  6. 图像语义分割网络FCN(32s、16s、8s)原理及MindSpore实现

    一.FCN网络结构 全卷积网络(Fully Convolutional Networks),是较早用于图像语义分割的神经网络.根据名称可知,FCN主要网络结构全部由卷积层组成,在图像领域,卷积是一种非 ...

  7. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

  8. 将特定像素点在图像上连接起来_(NeurIPS 2019) Gated CRF Loss-一种用于弱监督图像语义分割的新型损失函数...

    本文已经被NeurIPS 2019(2019 Conference and Workshop on Neural Information Processing Systems)接收,论文为弱监督图像语 ...

  9. NeurIPS 2019 | 用于弱监督图像语义分割的新型损失函数

    作者丨赵磊 学校丨北京林业大学硕士生 研究方向丨语义分割 本文已经被 NeurIPS 2019 (2019 Conference and Workshop on Neural Information ...

最新文章

  1. 31页官方PPT,回顾史上最大芯片WSE:科技的壮丽美感!
  2. 既然都说外企香,给你准备一波外企面经!
  3. java+实现集合并运算_JAVA程序设计报告+集合运算
  4. 【Linux】24_网络管理数据链路层详解
  5. mysql性能测试工具msyqlslap_MySQL性能测试工具 mysqlslap
  6. Android开发之xml动画(补间动画)记录
  7. javascript Event loop
  8. bundle + forever部署Meteor App
  9. FileSystemObject 对象
  10. 人造地球卫星由哪些系统组成?
  11. 《白话强化学习与PyTorch》第1章 强化学习是什么----读书笔记
  12. 全国计算机vfp是什么,vfp是什么-你知VFP是什么东西吗?它是我们大学生必须上的计算机的一个章节的 爱问知识人...
  13. 谱曲软件-MuseScore
  14. Excel单元格保护
  15. GameFramework框架 (一) 框架简介
  16. java中编写一个三角形类,java 三角形类Triangle java 三角形类 Triangle的用法详解
  17. 原型制作与图解——墨刀工具
  18. 计算机无法检测电池损耗怎么办,笔记本电脑如何检测电池损耗程度-鲁大师检测电池损耗的方法 - 河东软件园...
  19. RabbitMq高级惰性列队
  20. nodejs调用java的jar包进行PPT转pdf

热门文章

  1. XDOJ.172 构造表达式
  2. Maven的爱恨情仇
  3. 扫雷游戏软件测试,软件测试-扫雷游戏(10页)-原创力文档
  4. 【学英语玩程序】科技英语翻译总结
  5. Pre-Trained_Models_Past_Present_and_Future
  6. mybatis中 查询两张表,结果如果用resultMap接收,当两张表字段有重复的时候,如果不对字段加以区分,resultMap出来的值是空的
  7. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称
  8. 进制转化——十进制转二进制
  9. 权限管理实现的两种方式(详解)
  10. python_pandas操作-数值上下滑动一个格