对比学习+语义分割:Cross-Image Pixel Contrasting for Semantic Segmentation

论文名称:Cross-Image Pixel Contrasting for Semantic Segmentation

这是一种将对比学习运用到全监督语义分割里的方法,主要起到辅助训练的作用,在实际推理部署的时候,原本用来对比学习的分支是去除的。

主要解决的问题:

  • 模型训练的时候只考虑当前一张图像的内容,无法站在整个数据集的内容上考虑问题。

创新点:

  • 基于像素到像素的对比(pixel to pixel)+像素到区域的对比(pixel to region),设计了更加高效的memory bank。
  • 设计了一种更加合理的难样本采样策略,Segmentation-Aware Hard Anchor Sampling。

整体结构

整体结构

通过上图可以看到,相比常规的全监督语义分割结构,本文的方法只是额外增加了一条用于对比计算的辅助分支,该分支在实际推理部署的时候是去除的,所以对于语义分割模型本身是不增加推理负担的。

Memory Bank

这个东西就是一个数据池,保存了历史数据用于对比计算,这里面保存的都是经过了模型特征提取后的D维特征,本文D=256。

Pixel to Pixel

这个是针对整个数据集的图像来操作的,就是对所有类设置一个专属的队列(整个数据集有多少个类就有多少个队列,比如COCO数据集有80类,那么就有80个队列),训练的时候从每个mini-batch中的每个类选取V个D维像素加入到对应类的队列T里,T是远大于V的。一旦T被装满了,那么就去旧留新。通过这种方式Memory Bank能动态存储绝大部分图像的内容特征。

num_pixel = idxs.shape[0]
perm = torch.randperm(num_pixel)    #随机选择一定像素
K = min(num_pixel, self.pixel_update_freq)    #跟预设值比较,减少代码出错的操作
feat = this_feat[:, perm[:K]]
feat = torch.transpose(feat, 0, 1)
ptr = int(pixel_queue_ptr[lb])

if ptr + K >= self.memory_size:     #队列满了则去旧留新
    pixel_queue[lb, -K:, :] = nn.functional.normalize(feat, p=2, dim=1)
    pixel_queue_ptr[lb] = 0
else:
    pixel_queue[lb, ptr:ptr + K, :] = nn.functional.normalize(feat, p=2, dim=1)
    pixel_queue_ptr[lb] = (pixel_queue_ptr[lb] + 1) % self.memory_size  

上面的源码可以大致看到,首先会随机选择一定数量的像素加入到队列,如果队列满了则旧的数据会被新的数据代替。

Pixel to Region

就是将区域的一大块特征用一个像素点的特征去表示,主要是用来弥补pixel to pixel 采样不充分的问题,这个方法是针对一张图像的操作,将多个一张图像的特征拼接到一起训练就能获取全局信息。怎么操作的呢?比如一张图像上有3个地方是猫的区域,首先对这个3块区域在XY坐标上进行求平均,最后变为3个D维的像素特征(D,1,1),然后再对这个3个像素点在对应通道维度上求平均,最后当前图像的3只猫就被一个D维的像素点表示。

# segment enqueue and dequeue
feat = torch.mean(this_feat[:, idxs], dim=1).squeeze(1)
ptr = int(segment_queue_ptr[lb])
segment_queue[lb, ptr, :] = nn.functional.normalize(feat.view(-1), p=2, dim=0)
segment_queue_ptr[lb] = (segment_queue_ptr[lb] + 1) % self.memory_size

这个方法是训练前期开辟一大块内存,然后每一个mini-batch都会加入一定的特征进去,越到训练后期特征越多,等一轮训练完成后就清空,再重新开始。

困难样本采样策略Segmentation-Aware Hard Anchor Sampling

这个采样策略其实很简单,相比现有的难负挖掘采样策略,它是随机采一半困难样本,剩下的一半就随机采样,这剩下的一本里面应该既有困难样本也有简单样本,这样做的目的是防止全部使用困难样本训练导致过拟合。举个例子,当前是一个类别为猫的像素特征,首先会从memory bank中选择512个D维的像素点,这些像素点属于狗、羊等其他跟猫特征接近的动物,或者是猫的但经常分类分错的像素点,再随机从memory bank中选择一些像素点放一起,源码中是总共选择1024个点用于跟当前的限度点进行损失计算。怎么确定是困难样本还是简单样本呢?就是通过模型的mask图的像素值跟label值对不对的上,mask值跟label值匹配就是困难样本。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容