Learning to Segment Every Thing解读和Learning to Segment Every Thing算法笔记这两篇博客讲的很好了。
前面我们也讲了,模型的参数相当于 embeding vector包含了类别的appearance information。在box和mask 分支中只有最后一层包含category-specific的参数,是类别专属的,原有的mask rcnn里这两路是独立训练学习的,本文不直接学习mask 分支最后一层的参数,而是通过Weight Transfer学习一个从box分支参数到mask 分支参数的变换。前提的insight就是box和mask最后一层包含category-specific的参数,是类别专属的,算是类别语义信息的embeding,是很相关的,可以通过学习从box变换到mask这边来的。
我们以Mask RCNN(ResNet101-FPN)为例,box分支包含分类和回归,分类部分最后一层,每个类别的cls参数vector维度为1024,回归部分是1024x4=4096,mask分支,输出分辨率是28x28,最后一层每个类别的seg参数vector维度为256(从roialign出来是14141024,然后通过4个conv变成1414256,再加一个deconv到2828256,最后一个11的conv得到score map,这个11卷积的参数就是刚说的seg参数,总共参数是25611*#classes,每个类别的参数就是25611)
我们现在就要加个Weight Transfer,将检测分支的参数cls和box变换到seg,θ是class-agnostic(类别无关的),学习过来的。
就是要学习一个从1024或者4095或者1024+4096维向量到256维向量的变换矩阵
w s e g c = T ( w d e t c ; θ ) w_{\mathrm{seg}}^{c}=\mathcal{T}\left(w_{\mathrm{det}}^{c} ; \theta\right) wsegc=