欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2023-12-24 12:17:39
...

对象上下文语义分割: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对比固定空间表示的上下文聚合更具灵活性。可以看到下图:

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

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

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


Approach

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

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

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

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

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)

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

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

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


Experiments

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

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

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


Conclusions

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

上一篇:

下一篇: