当前位置:   article > 正文

对象上下文语义分割:OCR论文笔记(Object-Contextual Representations for Semantic Segmentation )_ocr_distri_head

ocr_distri_head

对象上下文语义分割:OCR

原文:Object-Contextual Representations for Semantic Segmentation

论文链接: https://arxiv.org/abs/1909.11065

pytorch official code: https://github.com/HRNet/HRNet-Semantic-Segmentation/tree/HRNet-OCR

笔记时间:2020.11.25

文章发表在了ECCV2020

微软和中科大提出的HRNet可以保持高分辨率的特性可以用于对位置信息敏感的任务中。

在语义分割的任务中进一步的提出了一个聚合上下文信息的模块。也就是今天说的这个OCR。

看到目前的分割文章都有一种A+B的感觉,A是一个backbone(resnet,inception)等等。B是一个语义聚合的模块(包括pspnet中的PPM,deeplab中的ASPP)等等



Abstract

文章的总体思路是:像素的标签是像素所在的对象的标签,并且通过用相应的对象区域表示来表征每个像素来加强像素表示。

主要分为三个步骤:

  • First, we learn object regions under the supervision of the ground-truth segmentation.(这里的object regions可以大概理解成我先搞一个粗略的分割)
  • Second, we compute the object region representation by aggregating the representations of the pixels lying in the object region.
  • Last, we compute the relation between each pixel and each object region, and augment the representation of each pixel with the object-contextual representation which is a weighted aggregation of all the object region representations.

具体看这些步骤好像很乱,事实上大概目标就是计算像素和对象之间的关系,最后来加强每个像素的表示。


Introduction+Related work

对于上下文信息的利用最早就有aspp和ppm这种具有固定区域结构的空间表示。但是本文提出的OCR对比固定空间表示的上下文聚合更具灵活性。可以看到下图:

image-20201125155513735

对于aspp来讲,每个像素去提取上下文信息都是固定空间位置的。对于OCR来讲,他提取的上下文信息是提取目标像素所在对象的上下文信息。

论文整体的思路有点有粗到细的感觉。先根据粗的分割结果表示出对象。再通过对象和像素之间的关系,加强表示像素的信息。但是这个粗分割的结果只用于生成上下文信息。


Approach

image-20201125160231563

文章这个部分写了很多的公式。直接看公式可能有点云里雾里,直接看代码可能更清楚些。

image-20201125160518228

看的是上面这个文件的代码

https://github.com/HRNet/HRNet-Semantic-Segmentation/blob/HRNet-OCR/lib/models/seg_hrnet_ocr.py

633行之前都是进行HRNet,从633行开始才是OCR的部分

     # ocr
    
    #这句的作用是进行粗分割,形成对应论文中的软对象区域,也就是粉色框里的东西
       	out_aux = self.aux_head(feats)
        
        # compute contrast feature
     #这里feats就是图中的蓝色框里的东西,对应论文中的pixel reprations
        feats = self.conv3x3_ocr(feats)
	 
    #这里形成的是object region representation,就是紫色框里的东西
        context = self.ocr_gather_head(feats, out_aux)
        
     #计算pixel和object region的关系。最后形成的是augmented 		  #representation也就是黄色框里的深蓝色块(这步里面进去看有很多的步骤)
        feats = self.ocr_distri_head(feats, context)

        #最后分类到对应的channel数
        out = self.cls_head(feats)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在看代码的过程中没有看到最后上采样4倍的地方,找了好久,最后发现好像写在了criterion.py 交叉熵损失那里,不知道为啥要这么做。

对比实验验证对象区域监督对性能有不小的影响

image-20201125163115962


Experiments

训练:用于监督目标区域的损失设置损失权重为0.4。进行了数据增强。

image-20201125164036533

作者不仅在性能上进行了对比,在内存使用,参数量等也进行了对比。


Conclusions

文章提出了一种面向语义分割的对象上下文表示方法。主要的想法就是认为像素的标签是像素所在的对象的标签,并且通过用相应的对象区域表示来表征每个像素来加强像素表示。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号