ICCV2021
先将图片经过FCN encoder(Resnet和hrnet)得到feature I,其中一条支路会经过fSEG得到Y,|C|是真实类别的数量,
是GT label,将其onehot后和softmax后的y进行交叉熵损失:
fPROJ将每个嵌入i∈I的高维像素映射为256的l2归一化特征向量,用于计算对比损失Lnce。fPROJ通过ReLU实现为两个1×1卷积层。
下式Pi和Ni分别表示从memory bank得到的像素i的正样本和负样本的pixel embedding集合。正/负样本和锚点i并不局限于来自同一幅图像。可以通过拉近相同的类像素样本和推开不同的类样本来学习嵌入空间。λ为1,为0.1.
总体损失为:
分割网络利用一元交叉熵损失和两两度量损失的优势,可以产生更多的鉴别特征。
Pixel-to-Region Contrast(memory bank的设计):
1、为了减小memory bank的大小,不会存下所有的像素,会选择为每个类别维护一个像素队列。对于每个类别,从最新的batch中的每张图像中只随机抽取少量像素V,并拉入队列,队列大小为T >>V。V = 10,T = 10N(N为图像数量)
2、region bank大小为|C|×N×D,其中D为像素嵌入的维数,N为图像数量。
Region bank中的第(, n)个元素是对第n幅图像中标为类的所有像素的嵌入进行平均池化得到的d维特征向量。有两个好处:1)存储更多具有代表性的“pixel”sample,占用内存少;和2)可以让对比损失进一步探索像素-区域关系。
Memory bank总体大小:
Hard Example Sampling:
Semi-Hard Example Sampling:一些研究建议使用困难样本,因为用最难的样本优化度量学习可能会导致糟糕的局部极小值。因此,用了Semi-Hard Example Sampling:对于每个锚嵌入,我们首先收集前10%的最接近的负样本(从memory bank M中抽取前10%的最远正例),然后随机抽取K个负样本。
Segmentation-Aware Hard Anchor Sampling:开发了一个锚点采样策略,而不是挖掘信息丰富的正负样本,具体是:具有错误预测的像素,即,被视为hard anchor。对于对比损失计算(参见Eq.(3)),一半的锚是随机抽样的,另一半是hard anchor。这种锚点采样策略使我们的对比学习能够更多地关注难以分类的像素。
对于Semi-Hard Example Sampling和Segmentation-Aware Hard Anchor Sampling:正负样本采样实例数量上,将采样实例的数量(即K)分别设置为1024和2048。对于每个小批次,每个类别采样50个锚(一半是随机采样,另一半是难以分割的)。
结果:
使用不同损失函数的可视化结果图:
表1是只在单张图像内部(intra)选择正负样本和在所有图像(inter)选择正负样本作比较,表2是比较了没有memory bank,和memory bank只有pixel memory和region memory各自的部分等的比较,表3是比较困难负样本挖掘方法。
问题:
1、fPROJ和memory bank在训练期间和inference阶段的使用?
projection head和memory bank只在training期间应用,在inference时删除。因此,它对网络不引入任何改变或额外的计算成本。
同步更新类似于刷新,更新一个内容要把所有的内容都刷新一遍。而异步则只刷新更新或修改的部分,不重新将所有内容全部刷新一遍。
下一篇:Git背后的设计理念