图像分割 | Context Prior CPNet | CVPR2020
- 文章转自微信公众号:「机器学习炼丹术」
- 文章作者:炼丹兄(已授权)
- 作者联系方式:cyx645016617
- 论文名称:“Context Prior for Scene Segmentation”
0 综述
先上效果图,CPNet似乎对一些难样本有着更好的效果:
文中提到了下面关键字:
构建了corresponding prior map(CPmap),然后通过Context Prior Layer(CPLayer)来把这个CPmap融合到网络中,与此同时,使用Affinity Loss来对应这个CPLayer。
关于上面这句话如何解读,我先留着疑问。
1 Context Prior
作者提出两个概念:
- intra-context:同一类别的像素之间的关系;
- inter-context:不同类别的像素之间的关系。
作者说,在图像分割任务中,每一个图片都有对应的ground truth,但是ground truth中是每一个像素所属于的类别,说模型很难从独立的像素中学习到contextual(上下文)信息,因此需要explicitly regularize network(显式的规范网络)。
在论文中,作者使用Affinity Loss来显式的规范网络.
For each pixel in the image, this loss forces the network to consider the pixels of the same category (intra-context) and the pixels among the different categories (inter-context).
这个损失可以让模型考虑同一类别的其他像素和不同类别的其他像素。
2 构建Ideal Affinity Map
在使用Affinity Loss之前,需要先构建Ideal Affinity Map。
- 现在我们有一个图片,Image,这个图片的ground truth GT.
- Image经过全卷积网络,得到尺寸HxW的特征图;
- GT下采样到HxW大小,写作\(\widetilde{GT}\),然后对\(\widetilde{GT}\)做one hot encoding,这样得到一个HxWxC的张量,其中C为分割的类别数量,对这个张量记做\(\widehat{GT}\)
- 通过reshape的方法,把\(\widehat{GT}\)的shape变成NxC,其中N=HxW,然后通过计算\(\widehat{GT}\widehat{GT}^{\mathrm{T}}\)得到一个NxN的矩阵,这个记做A;
- A就是我们所要的Ideal Affinity Map。
A is our desired Ideal Affinity Map with size N × N , which encodes which pixels belong to the same category. We employ the Ideal Affinity Map to supervise the learning of Context Prior Map.
这个A中每一个1表示这一个像素和其他同一类别的像素,通过这个Ideal Affinity Map来训练CPMap
3 Affinity Loss
我们用全卷积网络对Image进行特征提取,得到一个HxW的尺寸的特征图,这里我们在上文已经说到了,但是没有说这个特征图的通道数是多少,看下图:
通道数是HxW,也就是上面提到的N,这样对于每一个像素来说,他的特征正好是1xN,这样和我们得到的Ideal Affinity Map是不是刚好对应上了?
所以这里我们就可以用简单的二值交叉熵来计算Predicted Prior Map和Ideal Affinity Map的损失:
这就完事了吗?并不是:
However, such a unary loss only considers the isolated pixel in the prior map ignoring the semantic correlation with other pixels.
直观上感觉,上面的其实只考虑了两个像素之间的关系,其实忽视了更多的语义关系。所以还需要另外一部分损失。
a表示Idea Affinity Map中的元素,P表示从X得到的NxN的矩阵。
公式(2)表示,这里有点目标检测的味道了。
举个例子,假设总共有5个像素把:
- a = [0,0,1,0,1],表示与同类的像素有第三个和第五个两个像素;
- p = [0.1,0.2,0.8,0.2,0.9],表示预测出来的像素中,第一个像素有0.1的概率是同类的,第三个像素有0.8的概率是同类的;
- \(\frac{ap}{a}\),刚好就是 真阳/样本为真的个数,为召回率;
- \(\frac{ap}{p}\),刚好就是 真阳/预测为真的个数,为精准率;
这一块讲解的比较粗糙,因为混淆矩阵,PR曲线,召回率精准率应该是大家了解的内容啦,如果不了解可的话可以阅读我之前写过的笔记。(已经记录了107篇笔记了。。我也懒得找文章链接了,抱歉哈哈)
作者原文:
对于公式(4),1-a刚好就是把0和1反过来了,这样1-a中的1表示的是不同的两个像素,因此体现的是inter-class 不同类的联系。
最后的最后,Affinity Loss为:
4 Context Prior Layer
CPLayer的结构如下,突然一看还挺复杂的:
- CPLayer的输入认为是X,就是\(shape=H\times W \times C_0\);
- X经过一个aggregation module变成了\(shape=H\times W \times C_1的\widetilde{X}\);
这里来看一下aggregation module是如何整合了spatial information:
看起来就是用了两个并行的1xk和kx1的卷积,OK,这个地方不难。
- \(\widetilde{X}\)经过一个1x1的卷积层和Sigmoid层,变成我们的prior Map (P),这个P的shape=HxWxN;
- 这里的P经过Affinity Loss的监督训练下,在理想情况下,P体现的就是像素之间的关系
- 之前得到了\(\widetilde{X}\),reshape成\(N\times C_1\)的形状,(这里的\(C_1\)其实就是最终要分类的类别数)
- 这里可以得到intra-class的信息\(Y=P\widetilde{X}\)
- 也可以得到inter-class的信息\(\bar{Y}=(1-P)\widetilde{X}\)
这里我提示一下,怎么理解这个intra-class呢?从P中,可以找到一个像素和其他同类别的像素,从\(\widetilde{X}\)中,可以找到所有像素预测概率。因此Y中的每一个像素的预测的概率值,其实是考虑了同类别的其他像素的预测值综合起来的结果。因此这是一个类内上下文的综合考虑。
- \(F = concat(X,Y,\bar{Y})\)
5 细节
之前计算的affinity Loss在论文中是写作\(L_p\),
- 其中\(L_u\)是unary loss一元损失,也就是二值交叉熵;
- \(L_g\)是global loss,也就是整体的一个损失;
然后整个模型的损失:
- 除了我们提到的\(L_p\),affinity loss,权重为1;
- \(L_a\)是auxiliary loss ,权重为0.4
- \(L_s\)是主要的main segmentation loss,权重为1.
图像分割 | Context Prior CPNet | CVPR2020的更多相关文章
- 多篇开源CVPR 2020 语义分割论文
多篇开源CVPR 2020 语义分割论文 前言 1. DynamicRouting:针对语义分割的动态路径选择网络 Learning Dynamic Routing for Semantic Segm ...
- Spring MVC 学习总结(一)——MVC概要与环境配置
一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...
- Correlation Filter in Visual Tracking
涉及两篇论文:Visual Object Tracking using Adaptive Correlation Filters 和Fast Visual Tracking via Dense Spa ...
- 时空上下文视觉跟踪(STC)算法的解读与代码复现(转)
时空上下文视觉跟踪(STC)算法的解读与代码复现 zouxy09@qq.com http://blog.csdn.net/zouxy09 本博文主要是关注一篇视觉跟踪的论文.这篇论文是Kaihua Z ...
- HttpClient(4.3.5) - HTTP Authentication
HttpClient provides full support for authentication schemes defined by the HTTP standard specificati ...
- httpcomponents-client-4.4.x
Chapter 1. Fundamentals Prev Next Chapter 1. Fundamentals 1.1. Request execution The most essent ...
- httpcomponents-client-ga(4.5)
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/ Chapter 1. Fundamentals Prev Next ...
- httpcomponents-client-4.3.x DOC
Chapter 1. Fundamentals Prev Next Chapter 1. Fundamentals 1.1. Request execution The most essent ...
- Spring MVC 学习总结(一)——MVC概要与环境配置(IDea与Eclipse示例)
一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...
随机推荐
- 四十五:漏洞发现-API接口服务之漏洞探针类型利用修复
接口服务类安全测试 根据前期信息收集针对目标端口服务类探针后进行的安全测试,主要涉及攻击方法:口令安全,WEB类漏洞,版本漏洞等,其中产生的危害可大可小,属于端口服务/第三方服务类安全测试.一般在已知 ...
- 【bzoj 1190】梦幻岛宝珠(DP)
这题是在01背包问题的基础上,扩充了重量,需要用时间换空间. 思路: 1.仔细看题,注意到重量wi为a*2^b(a<=10,b<=30),很容易想到要按 b 分开做背包的DP.接下来的重点 ...
- hdu 13394 Minimum Inversion Number 线段树
题意: 首先给你一个长度为n的序列v,你需要首先找出来逆序对(i<j && v[i]>v[j]) 然后把这个序列的最后一个元素放在第一个位置上,其他元素都向后移动一位. 一 ...
- POJ 1655 Balancing Act ( 树的重心板子题,链式前向星建图)
题意: 给你一个由n个节点n-1条边构成的一棵树,你需要输出树的重心是那个节点,以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的 题解: 树的重心定义:找到一个点,其所 ...
- hdu2546 饭卡
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
- Checkout Assistant CodeForces - 19B
题意: 给你n个物品,每个物品有一个价格ci和一个支付时间ti,在这个ti时间内,你可以免费拿ti个物品.问你想要带走这n个物品最小需要多少钱 题解: 原本还想着贪心去写,但是好像贪心写不了,,,不属 ...
- Vulkan与DX11交互
Demo演示地址07_wintest 有什么用 在android平台主流是用opengl es,android下vulkan与opengles纹理互通. 而在win平台,主流游戏还用的是DX11,如果 ...
- SpringBoot整合Swagger初探
当下的Web项目大都采用前后端分离+分布式微服务的架构.前后端分离式的开发中,前端开发人员要与后端开发人员协商通信接口,约定接口规范.因此对于开发人员来说能够维持一份及时更新且完整全面的API文档会大 ...
- Shpfile文件的字段类型说明
Shpfile文件的字段类型设置如下表所示: 字段类型 字符 字段长度 长整型 N 9 短整型 N 4 浮点型 F 13 双精度 F 19 文本 C 50 特别需要注意的是字段长度,在导出SHP的时候 ...
- POJ - 3280 Cheapest Palindrome 【区间dp】【非原创】
Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...