参考代码:HRNet-OCR

1. 概述

导读:这篇文章研究了语义分割中上下文信息的提取与表达,其方法设计的灵感来自于:分割中一个像素的label是其对应目标(object)的类别,那么基于此文章便是通过不同object区域的表达去关联并表达一个像素(特征图上)的信息,从而建立更加具有区分性质的上下文信息。对此完成该目的需要3个步骤:
1)通过在GT的监督训练下得到图片的分割结果;
2)在分割结果的基础上按照分割的类别划分区域(对应文章的object),使用区域中像素去计算区域的表达(OCR,Object-Contextual Representations);
3)建立每个像素与不同区域之间的联系,这里通过加权的方式去聚合不同区域的表达,从而去增强像素信息的表达;
文章的方法提供了另外一种角度的上下文信息增强方法,通过添加SegFix的后处理过程可以进一步优化分割边界,从而文章的整体方法HRNet+OCR+SegFix取得相当不错的分割结果。

文章的方法是通过在分割网络的中间阶段通过一个分割预测头来生成一个corse的分割结果,再在此基础上使用文章提到的object-contextual representation去优化特征图中的像素,因而文章的方法将相同目标类别的上下文信息与不同不目标类别的上下文信息进行区分,也就是说文章的方法是基于目标的(object based)。

在常见的上下文信息提取的方法中有比较常用的基于空间聚合的也有基于attention方式聚合的,这里将他们与文章的方法进行比较:

  • 1)基于空间的方法,这类中ASPP/PPM是典型的代表,其区分的是当前pixel与周围位置的pixel。以典型的ASPP方式为例子,对于一个增强之后的像素其输出可以描述为:
    yid=∑ps=pi+dΔtKtdxsy_i^d=\sum_{p_s=p_i+d\Delta_t}K_t^dx_syid​=ps​=pi​+dΔt​∑​Ktd​xs​
    其中,xsx_sxs​代表的是输入特的pixel,KKK代表的是对应空洞卷积的参数,ddd代表膨胀系数。在下图中展示的是文章的方法和ASPP方法使用使用上下文上的不同:

    从下表可以看看与其它空间聚合类方法的性能比较:
  • 2)基于attention的方法,这类中DANet/ CFNet/ OCNet是较为典型的代表,多使用attention的方式去建立当前像素和整体像素之间的关系,并没有去考虑像素所属的不同目标属性,其输出可以描述为:
    yi=ρ(∑s∈Iwisδ(xs))y_i=\rho(\sum_{s\in I}w_{is}\delta(x_s))yi​=ρ(s∈I∑​wis​δ(xs​))
    与上述attention方式进行特征增强性能上的比较:

上面的两种方式其计算量与文章方法的比较:

2. 方法设计

2.1 OCR头结构

文章基于目标的上下文信息增强方法其结构见下图所示:

2.1 OCR头原理

文章整体的像素特征增强的过程可以通过下面的公式进行表达:
yi=ρ(∑k=1Kwikδ(fk))y_i=\rho(\sum_{k=1}^Kw_{ik}\delta(\mathcal{f}_k))yi​=ρ(k=1∑K​wik​δ(fk​))
其中,fk\mathcal{f}_kfk​是第kkk个区域的表达,wi,kw_{i,k}wi,k​是第iii个像素对第kkk个目标的关系(也就是加权系数),这样每个像素点就与所有的不同目标关联起来了。其具体的对应代码如下:

# ocr 对应Step1
out_aux = self.aux_head(feats)  # feats是backbone输出u的特征图
# compute contrast feature
feats = self.conv3x3_ocr(feats)context = self.ocr_gather_head(feats, out_aux)  # 对应Step2
feats = self.ocr_distri_head(feats, context)  # 对应Step3out = self.cls_head(feats)

具体要实现上述的功能,则就需要完成下面的3个步骤:

Step1:
获得分割目标,这里通过分割头在分割网络的中间得到一个corase的分割结果,之后根据分割结果中不同像素的类别将其划分为KKK个不同的目标{M1,M2,…,Mk}\{M_1,M_2,\dots,M_k\}{M1​,M2​,…,Mk​}。对应的代码便是:

self.aux_head = nn.Sequential(nn.Conv2d(last_inp_channels, last_inp_channels,kernel_size=1, stride=1, padding=0),BatchNorm2d(last_inp_channels),nn.ReLU(inplace=relu_inplace),nn.Conv2d(last_inp_channels, config.DATASET.NUM_CLASSES,kernel_size=1, stride=1, padding=0, bias=True)
)

Step2:
计算目标区域的表达,这里通过每个目标的分割概率(通过softmax normalize)与输入的特征图进行计算,得到每个区域的特征表达:
fk=∑i∈Im‾kixi\mathcal{f}_k=\sum_{i\in I}\overline{m}_{ki}x_ifk​=i∈I∑​mki​xi​
对应的实现代码:

batch_size, c, h, w = probs.size(0), probs.size(1), probs.size(2), probs.size(3)
probs = probs.view(batch_size, c, -1)
feats = feats.view(batch_size, feats.size(1), -1)
feats = feats.permute(0, 2, 1) # batch x hw x c
probs = F.softmax(self.scale * probs, dim=2)# batch x k x hw
ocr_context = torch.matmul(probs, feats).permute(0, 2, 1).unsqueeze(3)# batch x k x c

Step3:
计算目表上下文表达,这里是将不同的目标(object)区域表达与当前像素点xix_ixi​计算相关性:
wik=ek(xj,fk)∑j=1Kek(xj,fj)w_{ik}=\frac{e^{\mathcal{k}(x_j,f_k)}}{\sum_{j=1}^Ke^{\mathcal{k}(x_j,f_j)}}wik​=∑j=1K​ek(xj​,fj​)ek(xj​,fk​)​
其中,k(x,f)=ϕ(x)Tψ(f)\mathcal{k}(x,f)=\phi(x)^T\psi(f)k(x,f)=ϕ(x)Tψ(f)是一种类似self-attention形式的关联性度量。之后使用object-based上下文对信息增强:
zi=g([xiTyiT]T)z_i=g([x_i^T\ y_i^T]^T)zi​=g([xiT​ yiT​]T)
这里其实就是求取对应像素点的attention权重,与self-attention类似,其核心代码为:

query = self.f_pixel(x).view(batch_size, self.key_channels, -1)
query = query.permute(0, 2, 1)
key = self.f_object(proxy).view(batch_size, self.key_channels, -1)
value = self.f_down(proxy).view(batch_size, self.key_channels, -1)
value = value.permute(0, 2, 1)sim_map = torch.matmul(query, key)
sim_map = (self.key_channels**-.5) * sim_map
sim_map = F.softmax(sim_map, dim=-1)   # add bg context ...
context = torch.matmul(sim_map, value)
context = context.permute(0, 2, 1).contiguous()
context = context.view(batch_size, self.key_channels, *x.size()[2:])
context = self.f_up(context)

上文中的ϕ(⋅),ψ(⋅),δ(⋅),ρ(⋅),g(⋅)\phi(\cdot),\psi(\cdot),\delta(\cdot),\rho(\cdot),g(\cdot)ϕ(⋅),ψ(⋅),δ(⋅),ρ(⋅),g(⋅)都是有1*1的卷积+BN+ReLU构建的。

文章将通过coarse分割结果进行OCR与通过GT进行OCR的结果进行比较,其对比见下图所示:

对于该object-based特征优化与简单的附加损失和self-attention机制的增强方式进行比较:

3. 实验结果

《HRNet-OCR:Object-Contextual Representations for Semantic Segmentation》论文笔记相关推荐

  1. 论文笔记之Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...

  2. 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...

  3. 论文笔记Understanding and Diagnosing Visual Tracking Systems

    最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...

  4. 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...

  5. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)

    追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...

  6. ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...

  7. Understanding and Diagnosing Visual Tracking Systems

    文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...

  8. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...

  9. ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...

  10. CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...

最新文章

  1. vc++从txt文件中读取数据
  2. URLEncoder和URLDecoder中特殊字符的处理方案 URL传值问题
  3. 怎么共享电脑上的文件_电脑小技巧--远程访问共享文件夹
  4. springMVC文件下载
  5. 16位无符号比较器设计
  6. JDBC出现这个错误的解决办法Connections could not be acquired from the underlying database!
  7. 按图索骥:SQL中数据倾斜问题的处理思路与方法
  8. pcie总线连接两台电脑_基于PCIE总线多主互连系统的设计与实现
  9. 调取方法_最新微信调取转账证据新方法公布
  10. 吴恩达《神经网络与深度学习》课程笔记(1)-- 深度学习概述
  11. 1.5.PHP7.1 狐教程-(PHP开发工具 PHPStorm 配置)
  12. Matlab聚类分析/判别分析
  13. 雪莹软件将word转图片产生空白区域的问题解决方法
  14. C#中操作Excel(4)—— 向Excel中插入两种图表以及设置图表格式
  15. 【2017年第3期】电信大数据在信用风险管理中的应用
  16. 国内设计师经常逛的5个素材网站
  17. OSChina 周一乱弹 ——有2个小混蛋大晚上……
  18. Mac搭建Flink集群
  19. OpenInventor开发环境配置——以vs2008为例
  20. C语言在坐标轴上输出曲线,C语言图形输出习题

热门文章

  1. 74款android开机动画,修改Android系统开机动画
  2. spring boot服务部署后访问zul页面404
  3. 有需要【JavaScript权威指南第七版、JavaScript高级程序设计第四版】的可以私信我哈
  4. 别在花钱买Java资料了!自学Java必备的干货合集免费给你(含珍藏电子书)
  5. c# winform 显示动态gif图片的简单方法
  6. 部编版是什么版本_部编版教材和人教版教材有什么区别
  7. ajax和jquery教程pdf,ajax和jquery教程pdf
  8. 英文期刊论文翻译格式要求和文献要求
  9. 基于JAVA+SQL Server数据库项目——学生校园卡管理系统(SSH框架)
  10. 苹果CMSV10好看的模板灰黑色爱看影院自适应炫酷黑模板